【问题标题】:How do I prevent Selenium RC from stealing window focus while my tests are running?如何防止 Selenium RC 在我的测试运行时窃取窗口焦点?
【发布时间】:2011-08-03 07:45:33
【问题描述】:

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

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

我使用的是 Firefox 3.6.13。

【问题讨论】:

    标签: java firefox selenium focus acceptance-testing


    【解决方案1】:

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

    【讨论】:

    • 那当然是我的第一选择……我也喜欢你的创造力……要是我被允许运行linux就好了! +1 简洁的技巧。
    • 在 Windows 的虚拟机中运行 linux :D
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • "该死的程序员和他们缺乏文档!"有罪的一方大喊大叫;-) 我在一些项目上使用 Linux,在其他项目上使用 Windows,这肯定会有所帮助。
      【解决方案4】:

      我们通过在测试之间共享 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'ing 它:

      @RunWith(SpringJUnit4ClassRunner.class)
      @ContextConfiguration("classpath:selenium.xml")
      public class WebappIT {
      
          @Resource
          private Selenium selenium;
      
          ... test code ...
      
      }
      

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

      【讨论】:

        【解决方案5】:

        更新

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

        -browserSessionReuse
        

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                猜你喜欢
                • 2016-04-09
                • 1970-01-01
                • 1970-01-01
                • 2016-01-14
                • 2011-11-04
                • 2015-11-02
                • 2011-02-18
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多