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

Posted

技术标签:

【中文标题】在 Selenium Grid 上运行 Firefox 测试时在 xvfb 显示屏幕之间切换【英文标题】:Switching between xvfb display screens when running Firefox tests on Selenium Grid 【发布时间】:2016-06-07 13:58:05 【问题描述】:

我一直在我们的 Selenium Grid 上运行测试,并在使用相同的 xvfb 显示时遇到了问题 - 当我并行运行一批 100 个测试时,其中大部分是填写表单/单击按钮 - 一些测试得到卡在输入文本或单击按钮。这不是“等到元素”出现的问题,我们已经这样做了。

一个单独问题的用户对上述问题有 1 个答案: Multiple Instances of Firefox during Selenium Webdriver Testing not handling focus correctly.

那里的解决方案适用于使用 FirefoxBinary 运行本地 Selenium 测试。我正在 Selenium Grid 上运行测试,这意味着我正在创建一个远程 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
        )

通过我的硒网格/集线器/节点的通信工作正常。我在 Jenkins slave 上执行测试 -> 测试创建远程 webdriver -> 请求转到 server A 上的 Selenium 集线器 -> 调度浏览器/测试运行在服务器 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 等。

我看不到使用远程 Firefox 驱动程序的方法。您不能在创建远程驱动程序时使用 FirefoxBinary 对象(它不能序列化,而且真的没有意义)。有没有人解决过这个问题?

【问题讨论】:

【参考方案1】:

在我们的 selenium 网格启动并运行后,我认为我面临的表单填充/文本输入无法正常工作的问题不是因为在 xvfb 上使用相同的显示。这有几个原因:执行速度更快,输入数据后字段被清除,即使在没有网格的情况下本地也存在一些问题。

切换显示 - 正如我上面提到的 - 如果您在本地运行,这是一种有用的技术。目前似乎不可能将其设置为在 selenium 网格节点上工作。

【讨论】:

以上是关于在 Selenium Grid 上运行 Firefox 测试时在 xvfb 显示屏幕之间切换的主要内容,如果未能解决你的问题,请参考以下文章

在节点机器上执行批处理文件 - Selenium Grid

Selenium Grid节点可以运行的最大浏览器数是多少

如何使用Selenium-Grid

如何使用Selenium-Grid

Selenium GRID:并行运行多个 Robot Framework 测试套件

selenium-grid分布式自动化测试