是否可以在 Selenium RC 中隐藏浏览器?
- 2025-03-14 08:57:00
- admin 原创
- 49
问题描述:
我正在使用 Selenium RC 自动执行一些浏览器操作,但我希望浏览器不可见。这可能吗?怎么做?Selenium Grid 怎么样?我也可以隐藏 Selenium RC 窗口吗?
解决方案 1:
有以下几种选择:
您可以使用 Selenium Grid,这样浏览器就会在完全不同的机器(或虚拟机)上打开,然后您可以通过 VNC 或远程桌面连接连接到该机器(如果您想查看浏览器)。另外,还有另一种选择:如果您在该远程服务器上运行 Jenkins 前台进程,它可以在桌面上执行您的测试项目。
您可以在 Linux 上的 XVFB 中以“无头”方式运行 Selenium。我从未尝试过这样做,并且怀疑这样做是否真的值得。http ://www.alittlemadness.com/2008/03/05/running-selenium-headless/
您可以将 Selenium RC 包装在 Windows 服务中。http ://support.microsoft.com/kb/137890。不过,Windows 更高版本上的权限限制可能会阻止 Selenium 访问桌面,就像 Windows 2000 允许我们做的那样。
另一个选择是使用 WebDriver HTMLUnitDriver 之类的东西,它不会启动“真实”浏览器。http ://code.google.com/p/webdriver/ 。此外,还有一个 PhantomJS 选项以及您可以使用的“无头 Chrome”。
当然,您也可以选择使用 SauceLabs 等服务,这样您就可以在云中运行测试。测试完成后,您可以观看测试运行的视频。
解决方案 2:
在 Linux 上,您可以在无头(虚拟)显示器中运行 WebDriver 以隐藏浏览器。这可以通过 Xvfb(X 虚拟帧缓冲区)来实现。
您可以使用以下方式直接从 Python 代码控制 Xvfb xvfbwrapper
:
https://github.com/cgoldberg/xvfbwrapper
无头运行的 Python 代码如下所示:
from selenium import webdriver
from xvfbwrapper import Xvfb
display = Xvfb()
display.start()
# now Firefox will run in a virtual display.
# you will not see the browser.
driver = webdriver.Firefox()
driver.get('http://www.google.com')
print(driver.title)
driver.quit()
display.stop()
在 Debian/Ubuntu 上安装依赖项:
$ sudo apt-get install xvfb
$ pip install xvfbwrapper
解决方案 3:
我轻松地隐藏了浏览器窗口。
只需安装 PhantomJS。然后,将此行更改为:
driver = webdriver.Firefox()
到:
driver = webdriver.PhantomJS()
其余代码无需更改,也不会打开任何浏览器。出于调试目的,请driver.save_screenshot('screen.png')
在代码的不同步骤中使用。
解决方案 4:
+1 将 Selenium RC 作为 Windows 服务。
为了让测试完全隐藏运行,我认为如果您使用的是 Windows,您没有太多解决方案。
我会在你的局域网中专门设置一台电脑,让它一直在线,并运行一个 selenium RC 服务器。这样你就可以使用这台电脑的 IP 而不是本地主机来运行测试。例如:
browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com")
(考虑到这是运行服务器的计算机的 IP)。
完成该设置后,您可以在自己的计算机上运行测试,浏览器和 RC 服务器窗口位于另一台计算机上,完成后即可返回到您的计算机。
解决方案 5:
在 Linux 上,您可以在虚拟显示器上运行测试浏览器。您需要xvfb
创建虚拟 X 服务器的软件包。在基于 Debian 的发行版上,只需运行
sudo apt-get install xvfb
有一个很好的工具ephemeral-x.sh
可以方便地设置任何命令在虚拟显示器上运行。下载并使其可执行:
wget https://raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh
chmod +x ephemeral-x.sh
然后您可以简单地使用它来启动 Selenium 服务器:
./ephemeral-x.sh java -jar selenium-standalone.jar
Selenium 创建的所有浏览器窗口现在都将使用虚拟显示,并且对您来说是不可见的。
解决方案 6:
如果你使用的是 Windows,一个选项是使用不同的用户帐户运行测试。这意味着浏览器和 Java 服务器对你的帐户不可见。
解决方案 7:
这就是我在 Linux 桌面(Ubuntu)上使用 Maven 运行测试的方法。我受够了无法使用 Firefox WebDriver 始终占据焦点。
我安装了 xvfb
xvfb-运行-a mvn 全新安装
就是这样
解决方案 8:
在很多情况下,PhantomJS 并不完全适合您的需求,我想详细说明 Dave Hunt 的回答中提到的无头 chrome 选项。
chrome 57 刚刚推出了此功能。您可以通过 ChromeDriver 传递 --headless 标志来使用它,有关更多信息,请参阅此问题中的讨论
解决方案 9:
有一个名为GhostDriver的 PhantomJS 相关项目,旨在使用 webdriver wire JSON 协议在 Selenium Grid 中运行 PhantomJS 实例。这可能就是您正在寻找的,尽管这个问题已经有 4 年了。
解决方案 10:
在 MacOSX 上,我无法隐藏浏览器窗口,但至少我知道如何将其移动到其他显示器,这样就不会对我的工作流程造成太大影响。当 Firefox 正在运行测试时,只需按住 Control 键并单击其在 Dock 中的图标,选择“选项”,然后选择“分配到显示器 2”。
解决方案 11:
curl -k https://gist.githubusercontent.com/terrancesnyder/995250/raw/cdd1f52353bb614a5a016c2e8e77a2afb718f3c3/ephemeral-x.sh -o ~/ephemeral-x.sh
chmod +x ~/ephemeral-x.sh
~/ephemeral-x.sh TestsStarterCommand
顺便说一句,这是任何运行 e2e 的开发人员都需要的功能,从逻辑上讲,这将产生浏览器。在开发环境中,处理不断弹出的窗口很烦人,您可能会意外地与之交互,导致测试失败。
解决方案 12:
使用无头式 Chrome 是你的最佳选择,或者你可以直接在网站上发帖与它互动,这样可以为其他事情/进程节省大量的计算能力。我在测试使用 CPU 密集型元素在多个网站上搜索鞋子的网络自动化机器人时使用了这种方法,你节省的电量越多,程序越简单,就越容易同时运行多个进程,速度和可靠性也更高。
解决方案 13:
要在无头模式下使用 Chrome 运行 Selenium 并确保它使用桌面视图(或者可能使用移动浏览器),请在 ChromeOptions 中设置窗口大小:
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--window-size=1920,1080') # Use desktop size
driver = webdriver.Chrome(options=options)
扫码咨询,免费领取项目管理大礼包!