10

我知道我可能属于少数人,但我必须在运行测试的同时使用我的机器。一直妨碍我的事情是,当我使用 Selenium RC 运行测试用例时,浏览器窗口总是在窃取焦点。这使我无法在一天结束时在我注销前一天多次运行我的测试。我尝试了 Selenium Grid,但我不能让它只监听本地主机上的请求,而不是 0.0.0.0(我的网络管理员的要求)。

我已经翻阅了 Selenium 文档和大量 Selenium 站点,但我无法找到明确的答案。我可以在我的测试运行时阻止 Selenium RC 测试窃取窗口焦点吗?

我正在使用 Firefox 3.6.13。

4

8 回答 8

11

在 Linux 上,您可以在不同的显示器(例如 :8 或其他)上启动 vncserver,然后让 Selenium 和您的 Firefox 实例使用该显示器。在我工作的地方很适合我们。

于 2011-04-11T18:58:57.610 回答
7

在VM中运行它。具有在不同操作系统和浏览器下进行测试的能力的额外好处。

我的理解是,您无法避免在同一台机器上窃取注意力。

于 2011-04-11T18:59:43.113 回答
5

你在运行linux吗?FirefoxProfile 类有一个记录不良的设置,它加载一个特殊的库以避免在 linux 上窃取焦点 - 将其设置为 true:

http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/firefox/FirefoxProfile.html#setAlwaysLoadNoFocusLib(boolean)

于 2013-09-23T00:40:23.353 回答
3

我们通过在测试之间共享 selenium 实例解决了这个问题。然后 selenium 在整个测试运行期间只尝试窃取一次焦点,这还不错。

如果您使用 JUnit 编写 Selenium 脚本,则可以使用 SpringSpringJUnit4ClassRunner将 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'ing 它:

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

    @Resource
    private Selenium selenium;

    ... test code ...

}

我已经稍微简化了这一点,在我们的实际代码中,我们将 selenium 实例包装在提供程序类中,以便我们只能调用 selenium.start() 一次。

于 2011-04-12T08:59:31.273 回答
2

更新

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

-browserSessionReuse

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

于 2012-01-20T16:47:38.367 回答
1

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

于 2011-04-12T08:14:00.857 回答
1

使用 chrome 而不是 firefox 对我有用。只需在另一个工作区中启动它,它就会保持原样。

于 2013-10-23T22:33:54.840 回答
0

如果您在 linux 上运行,您可以使用多个桌面并将浏览器设置为始终在特定桌面上打开,而您的 IDE 则在不同的桌面上。这就是我在 Ubuntu 中所做的,需要 5 分钟:https ://askubuntu.com/a/90014

于 2017-03-17T19:00:44.187 回答