Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Selenium网格上运行Firefox测试时在xvfb显示屏之间切换_Python_Firefox_Selenium_Xvfb - Fatal编程技术网

Python 在Selenium网格上运行Firefox测试时在xvfb显示屏之间切换

Python 在Selenium网格上运行Firefox测试时在xvfb显示屏之间切换,python,firefox,selenium,xvfb,Python,Firefox,Selenium,Xvfb,我一直在Selenium网格上运行测试,并且在使用相同的xvfb显示时遇到了一个问题—当我并行运行一批100个测试时,其中大多数是填写表单/单击按钮—一些测试在输入文本或单击按钮时被卡住。这不是一个“等到元素出现”的问题,我们已经做到了 一个单独问题的用户对上述问题有1个答案: 那里的解决方案用于使用FirefoxBinary运行本地Selenium测试。我正在Selenium网格上运行测试,这意味着我正在创建一个远程webdriver对象(在python中): 通过selenium grid

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

一个单独问题的用户对上述问题有1个答案:

那里的解决方案用于使用FirefoxBinary运行本地Selenium测试。我正在Selenium网格上运行测试,这意味着我正在创建一个远程webdriver对象(在python中):

通过selenium grid/hub/node进行的通信工作正常。我正在一个Jenkins slave上执行测试->测试创建远程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
   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网格节点上工作似乎是不可能的