在Selenium Grid

时间:2016-02-25 01:06:39

标签: python firefox selenium xvfb

我一直在我们的Selenium网格上运行测试,并且在使用相同的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
        )

通过我的selenium网格/集线器/节点的通信工作正常。我正在 Jenkins奴隶 - >执行测试test创建远程webdriver - >请求转到服务器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 个答案:

答案 0 :(得分:0)

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

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