python - 在 Selenium Grid 上运行 Firefox 测试时在 xvfb 显示屏幕之间切换

标签 python firefox selenium xvfb

我一直在我们的 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/

相关文章:

python - LibSVM 预测不工作

python - EXP(ORT) 密码和 M2Crypto/OpenSSL

python - 网站在多个页面上识别 Python Selenium Webdriver

image - Selenium webdriver:我想单击https://www.msn.com/zh-cn/weather/today底部的“Like 1.3M”图像

使用 Selenium 进行 Python 网页抓取 - 通过 href 链接进行迭代

python - Pandas - 将每一列单独分组

javascript - 在 Firefox 中设置 FileInput 的 FileList

firefox - UTF-8 编码在 Internet Explorer 中无法正常工作,但在 Mozilla Firefox 中却可以正常工作

javascript - 如何让firefox扩展在指定域上运行js

python - 在 Python 中使用 Selenium Marionette 获取整个页面的屏幕截图