Python 在Selenium网格上运行Firefox测试时在xvfb显示屏之间切换
我一直在Selenium网格上运行测试,并且在使用相同的xvfb显示时遇到了一个问题—当我并行运行一批100个测试时,其中大多数是填写表单/单击按钮—一些测试在输入文本或单击按钮时被卡住。这不是一个“等到元素出现”的问题,我们已经做到了 一个单独问题的用户对上述问题有1个答案: 那里的解决方案用于使用FirefoxBinary运行本地Selenium测试。我正在Selenium网格上运行测试,这意味着我正在创建一个远程webdriver对象(在python中): 通过selenium grid/hub/node进行的通信工作正常。我正在一个Jenkins slave上执行测试->测试创建远程webdriver->请求到服务器a->上的Selenium中心,该中心调度运行在服务器B上的浏览器/测试 我在服务器B上启动Selenium节点,如下所示:Python 在Selenium网格上运行Firefox测试时在xvfb显示屏之间切换,python,firefox,selenium,xvfb,Python,Firefox,Selenium,Xvfb,我一直在Selenium网格上运行测试,并且在使用相同的xvfb显示时遇到了一个问题—当我并行运行一批100个测试时,其中大多数是填写表单/单击按钮—一些测试在输入文本或单击按钮时被卡住。这不是一个“等到元素出现”的问题,我们已经做到了 一个单独问题的用户对上述问题有1个答案: 那里的解决方案用于使用FirefoxBinary运行本地Selenium测试。我正在Selenium网格上运行测试,这意味着我正在创建一个远程webdriver对象(在python中): 通过selenium grid
/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
firefox_binary = FirefoxBinary('/usr/bin/firefox')
firefox_binary.add_command_line_options('--display=:' + str(display.display))
然后在遇到问题后——100个使用同一显示器的并行测试,表单填充有问题——我看到很多人确认我们应该在单独的xvfb显示器中运行每个测试,以使其更好
我决定通过增加更多的屏幕来测试这个理论:0
/usr/bin/Xvfb :0 -nolisten tcp -ac -cc 4 -screen 0 1200x800x24 -screen 1 1200x800x24
-screen 2 1200x800x24 -screen 3 1200x800x24
我的主要问题是:如何使用远程selenium驱动程序在python中选择显示0.1、0.2、0.3
如果我在同一个Jenkins slave上运行测试(完全忘记了网格;在slave上安装了selenium/xvfb/firefox),那么它似乎可以像这样工作:
/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
firefox_binary = FirefoxBinary('/usr/bin/firefox')
firefox_binary.add_command_line_options('--display=:' + str(display.display))
或者,在本地运行时,还有其他选项,如xvfb run等
我看不到一种使用远程Firefox驱动程序的方法。您不能在远程驱动程序创建中使用FirefoxBinary对象(一方面它不可序列化,实际上毫无意义)。有人解决了这个问题吗 在启动并运行selenium网格之后,我认为表单填充/文本输入不正常所面临的问题不是因为在xvfb上使用了相同的显示。原因有几个:执行速度快得多,输入数据后字段被清除,甚至在没有网格的情况下本地也存在一些问题 切换显示-正如我上面提到的-如果您在本地运行,这是一项有用的技术。目前,将其设置为在selenium网格节点上工作似乎是不可能的