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

11

我知道我可能是少数人,但我必须在测试运行时同时使用我的计算机。使用Selenium RC运行测试用例时,总是有一个问题,就是浏览器窗口总是抢占焦点。这使得我一天只能运行一次测试,在登出之前的最后一刻。我尝试过Selenium Grid,但我无法仅将其设置为侦听本地主机请求,而不是0.0.0.0(这是我的网络管理员的要求)。

我已经查阅了Selenium文档和大量的Selenium网站,但我还没有找到确定的答案。我能否防止Selenium RC在运行测试时抢占窗口焦点?

我正在使用Firefox 3.6.13。

8个回答

11
在Linux上,可以在不同的显示器上启动vncserver(例如::8),然后让Selenium和Firefox实例使用该显示器。这种方法在我们公司运行良好。

当然,那是我的第一选择...我也喜欢你的创意...如果我被允许运行Linux就好了!为一个巧妙的黑客点赞。 - bakoyaro
2
在 Windows 中的虚拟机中运行 Linux :D - mark-cs

7

虚拟机中运行它。这样做有一个额外的好处,可以在不同的操作系统和浏览器下进行测试。

据我所知,在同一台机器上无法避免窃取焦点。


5

1
“该死的程序员,他们总是缺乏文档!”罪犯大喊道;-) 我在一些项目中使用Linux,在另一些项目中使用Windows,这肯定会有所帮助。 - bakoyaro
这是一个损坏的链接。 - ar2015
修复并添加了一小段代码,以防链接再次中断——不知道这在2022年是否仍然相关! - Korny

3
我们通过在测试之间共享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实例,以便我们只需调用selenium.start()一次。


2

更新

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

-browserSessionReuse

针对启动您的Selenium测试用例的ant任务。这可以节省大量时间,因为在selenium测试运行时我不必等待两个新的Firefox窗口打开。解决方法是每次测试开始时都必须注销您的站点,如果每个测试都是独立的测试。我通过编辑我的登录方法快速实现了这一点,以查找我的注销链接。如果注销链接存在,则我的测试会单击注销链接,并等待登录页面可用,然后继续进行测试。


1

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


1

使用Chrome而不是Firefox对我起作用了。只需在另一个工作区启动它,它就会保持不变。


0

如果你正在使用Linux系统,你可以使用多个桌面并将浏览器设置为始终在特定的桌面打开,而将你的IDE放在另一个桌面上。这就是我在Ubuntu中所做的,只需要5分钟:https://askubuntu.com/a/90014


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接