java 如何防止Selenium RC在测试运行时窃取窗口焦点?

cs7cruho  于 2023-01-24  发布在  Java
关注(0)|答案(8)|浏览(130)

我知道我可能是少数人,但是我必须在测试运行的同时使用我的机器。总是妨碍我的事情是,当我使用Selenium RC运行测试用例时,浏览器窗口总是窃取焦点。这使我无法一天运行测试超过一次,在一天结束时,就在我注销之前。我尝试了Selenium Grid,但我无法让它只侦听localhost上的请求,而不是0.0.0.0上的请求(这是网络管理员的要求)。
我已经深入研究了Selenium文档和大量的Selenium站点,但是我还没有找到一个明确的答案。我可以防止Selenium RC测试在我的测试运行时窃取窗口焦点吗?
我用的是火狐3.6.13.

ycl3bljg

ycl3bljg1#

在Linux上,您可以在不同的显示器上启动vncserver(例如:8或其他),然后让Selenium和Firefox示例使用该显示器。

brjng4g3

brjng4g32#

VM中运行它。有一个额外的好处,能够在不同的操作系统和浏览器下测试。
我的理解是,在同一台机器上,您无法避免窃取焦点。

wmtdaxz3

wmtdaxz33#

您是否正在运行linux?FirefoxProfile类有一个记录不完整的设置,该设置加载一个特殊的库以避免在linux上窃取焦点-将此设置为true:
//www.selenium.dev/selenium/docs/api/java/org/openqa/ selenium 元素/火狐/火狐配置文件。html #设置始终加载无焦点库(布尔值)
公共void设置始终加载无焦点库(布尔值加载无焦点库)
设置是否应始终在Linux上加载无焦点库。
参数:
loadNoFocusLib-是否总是加载无焦点库。

ehxuflar

ehxuflar4#

我们通过在测试之间共享selenium示例来解决这个问题,这样selenium在整个测试运行期间只会尝试窃取焦点一次,这还不算太糟糕。
如果使用JUnit编写Selenium脚本,可以使用Spring的SpringJUnit4ClassRunner将selenium示例作为bean注入。
为Spring selenium.xml定义一个测试上下文(如果您不熟悉如何设置Spring XML配置文件,请搜索它)并包含一个selenium示例:

<bean class="com.thoughtworks.selenium.DefaultSelenium" name="selenium">
    <constructor-arg index="0">
        <value>localhost</value>
    </constructor-arg>
    <constructor-arg index="1">
        <value>4444</value>
    </constructor-arg>
    <constructor-arg index="2">
        <value>*firefox</value>
    </constructor-arg>
    <constructor-arg index="3">
        <value>http://localhost:8080/webapp/</value>
    </constructor-arg>
</bean>

然后在测试中注入selenium示例,而不是对其执行new操作:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:selenium.xml")
public class WebappIT {

    @Resource
    private Selenium selenium;

    ... test code ...

}

我对此做了一些简化,在我们的实际代码中,我们将selenium示例 Package 在一个provider类中,这样我们就可以只调用selenium.start()一次。

iibxawm4

iibxawm45#

    • 更新**

我发现了一个解决我的焦点窃取Firefox窗口的方法。如果你像我一样把Selenium作为一个独立的服务器运行,那么你可以添加这个:

-browserSessionReuse

到启动Selenium测试用例的ant任务,这也节省了大量的时间,因为我不必在Selenium测试运行时等待两个新的Firefox窗口打开,解决方法是每次测试开始时都必须注销站点。如果你的每个测试都是独立的测试,我通过编辑我的登录方法来查找我的注销链接,从而快速地完成了这一点。如果存在注销链接,那么我的测试将单击注销链接,并等待登录页面可用,然后继续测试。

qoefvg9y

qoefvg9y6#

我们不能在同一台机器上这样做,要么我们需要虚拟机,要么我们应该在控制器级别编程,这样我们的脚本就不会启动任何浏览器来运行脚本。

sxissh06

sxissh067#

用chrome代替firefox对我很有效,只要在另一个工作区启动它,它就不会动。

pengsaosao

pengsaosao8#

如果你运行在Linux上,你可以使用多个桌面,并设置为浏览器总是在特定的桌面打开,而你的IDE在不同的一个.这就是我在Ubuntu中做的,它需要5分钟:https://askubuntu.com/a/90014

相关问题