我一直在我们的 Selenium Grid 上运行测试,并且在使用相同的 xvfb 显示时遇到了问题 - 当我并行运行一批 100 个测试时,其中大部分是填写表格/点击按钮 - 一些测试得到卡住输入文本或单击按钮。这不是“等到元素”出现的问题,我们已经做到了。
另一个问题的用户对上述问题有 1 个答案: Multiple Instances of Firefox during Selenium Webdriver Testing not handling focus correctly.
那里的解决方案适用于使用 FirefoxBinary 运行本地 Selenium 测试。我正在 Selenium 网格上运行测试,这意味着我正在创建一个远程 webdriver 对象(在 python 中):
profile = self.get_local_firefox_profile()
profile.set_preference("browser.startup.homepage", "http://www.google.com");
firefox_capabilities = {
"browserName": "firefox",
'platform': "linux",
"javascriptEnabled": True,
}
self.driver = webdriver.Remote(
selenium_hub_address,
firefox_capabilities,
profile
)
通过我的 selenium 网格/集线器/节点进行的通信工作正常。我在 Jenkins slave 上执行测试 -> 测试创建远程网络驱动程序 -> 请求转到 server A 上的 Selenium hub -> 调度浏览器/测试运行在服务器 B 上。
我像这样在服务器 B 上启动 Selenium 节点:
/usr/bin/Xvfb :0 -nolisten tcp -ac -cc 4 -screen 0 1200x800x24
# tell browsers the address of the xvfb display
export DISPLAY=:0
java -jar selenium-server-standalone-2.46.0.jar -role node -nodeConfig DefaultNode.json
然后在遇到问题后 - 使用同一显示器进行 100 次并行测试,在填写表单时遇到问题 - 我看到很多人确认我们应该在单独的 xvfb 显示器中运行每个测试以使其更好。
我决定通过向 DISPLAY :0 添加更多屏幕来检验这个理论
/usr/bin/Xvfb :0 -nolisten tcp -ac -cc 4 -screen 0 1200x800x24 -screen 1 1200x800x24
-screen 2 1200x800x24 -screen 3 1200x800x24
我的主要问题是:如何使用远程 selenium 驱动程序在 python 中选择 DISPLAY 0.1、0.2、0.3?
如果我在同一个 Jenkins 从服务器上运行测试(完全忘记网格;在从服务器上安装了 selenium/xvfb/firefox),它似乎可以像这样工作:
firefox_binary = FirefoxBinary('/usr/bin/firefox')
firefox_binary.add_command_line_options('--display=:' + str(display.display))
或者,在本地运行,还有其他选项,如 xvfb-run,pyvirtualwrapper ,ETC。
我看不到使用远程 Firefox 驱动程序来完成此操作的方法。您不能在创建远程驱动程序时使用 FirefoxBinary 对象(一方面,它不可序列化,实际上没有任何意义)。有人解决了这个问题吗?
最佳答案
在启动并运行我们的 selenium 网格之后,我认为我面临的表单填写/文本输入无法正常工作的问题不是因为在 xvfb 上使用了相同的显示。这有几个原因:执行速度更快,输入数据后字段被清除,即使在没有网格的情况下本地也存在一些问题。
切换显示 - 正如我上面提到的 - 如果您在本地运行,这是一项有用的技术。将其设置为在 selenium 网格节点上工作目前似乎是不可能的。
关于python - 在 Selenium Grid 上运行 Firefox 测试时在 xvfb 显示屏幕之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35616368/