我知道我可能是少数人,但是我必须在测试运行的同时使用我的机器。总是妨碍我的事情是,当我使用Selenium RC运行测试用例时,浏览器窗口总是窃取焦点。这使我无法一天运行测试超过一次,在一天结束时,就在我注销之前。我尝试了Selenium Grid,但我无法让它只侦听localhost上的请求,而不是0.0.0.0上的请求(这是网络管理员的要求)。
我已经深入研究了Selenium文档和大量的Selenium站点,但是我还没有找到一个明确的答案。我可以防止Selenium RC测试在我的测试运行时窃取窗口焦点吗?
我用的是火狐3.6.13.
8条答案
按热度按时间ycl3bljg1#
在Linux上,您可以在不同的显示器上启动vncserver(例如:8或其他),然后让Selenium和Firefox示例使用该显示器。
brjng4g32#
在VM中运行它。有一个额外的好处,能够在不同的操作系统和浏览器下测试。
我的理解是,在同一台机器上,您无法避免窃取焦点。
wmtdaxz33#
您是否正在运行linux?FirefoxProfile类有一个记录不完整的设置,该设置加载一个特殊的库以避免在linux上窃取焦点-将此设置为true:
//www.selenium.dev/selenium/docs/api/java/org/openqa/ selenium 元素/火狐/火狐配置文件。html #设置始终加载无焦点库(布尔值)
公共void设置始终加载无焦点库(布尔值加载无焦点库)
设置是否应始终在Linux上加载无焦点库。
参数:
loadNoFocusLib-是否总是加载无焦点库。
ehxuflar4#
我们通过在测试之间共享selenium示例来解决这个问题,这样selenium在整个测试运行期间只会尝试窃取焦点一次,这还不算太糟糕。
如果使用JUnit编写Selenium脚本,可以使用Spring的
SpringJUnit4ClassRunner
将selenium示例作为bean注入。为Spring
selenium.xml
定义一个测试上下文(如果您不熟悉如何设置Spring XML配置文件,请搜索它)并包含一个selenium示例:然后在测试中注入selenium示例,而不是对其执行
new
操作:我对此做了一些简化,在我们的实际代码中,我们将selenium示例 Package 在一个provider类中,这样我们就可以只调用selenium.start()一次。
iibxawm45#
我发现了一个解决我的焦点窃取Firefox窗口的方法。如果你像我一样把Selenium作为一个独立的服务器运行,那么你可以添加这个:
到启动Selenium测试用例的ant任务,这也节省了大量的时间,因为我不必在Selenium测试运行时等待两个新的Firefox窗口打开,解决方法是每次测试开始时都必须注销站点。如果你的每个测试都是独立的测试,我通过编辑我的登录方法来查找我的注销链接,从而快速地完成了这一点。如果存在注销链接,那么我的测试将单击注销链接,并等待登录页面可用,然后继续测试。
qoefvg9y6#
我们不能在同一台机器上这样做,要么我们需要虚拟机,要么我们应该在控制器级别编程,这样我们的脚本就不会启动任何浏览器来运行脚本。
sxissh067#
用chrome代替firefox对我很有效,只要在另一个工作区启动它,它就不会动。
pengsaosao8#
如果你运行在Linux上,你可以使用多个桌面,并设置为浏览器总是在特定的桌面打开,而你的IDE在不同的一个.这就是我在Ubuntu中做的,它需要5分钟:https://askubuntu.com/a/90014