我知道我可能只是少数,但我必须在我的测试运行的同时使用我的机器。我总是遇到的问题是,当我使用Selenium RC运行测试用例时,浏览器窗口总是在窃取焦点。这使我无法在我退出之前的一天结束时每天多次运行我的测试。我试过Selenium Grid,但是我不能让它只监听localhost上的请求,而不是0.0.0.0(来自我的网络管理员的要求)。
我已经挖掘了Selenium文档和大量的Selenium网站,但我还没有找到明确的答案。在我的测试运行时,我可以阻止Selenium RC测试窃取窗口焦点吗?
我正在使用Firefox 3.6.13。
答案 0 :(得分:10)
在Linux上,您可以在不同的显示器上启动vncserver(例如:8或其他),然后让Selenium和您的Firefox实例使用该显示器。在我工作的地方工作得很好。
答案 1 :(得分:6)
在VM中运行它。具有在不同操作系统和浏览器下测试能力的额外好处。
据我所知,你无法避免在同一台机器上偷走焦点。
答案 2 :(得分:5)
你在运行linux吗? FirefoxProfile类的设置文档很少,加载了一个特殊的库以避免在linux上集中窃取 - 将其设置为true:
答案 3 :(得分:2)
我们通过在测试之间共享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()一次。
答案 4 :(得分:2)
<强>更新强>
我找到了解决Firefox窗口问题的解决方法。如果您像我一样运行Selenium作为独立服务器,那么您可以添加:
-browserSessionReuse
启动Selenium测试用例的ant任务。这样可以节省大量时间,因为在运行selenium测试时,我不必等待两个新的Firefox窗口打开。解决方法是,如果每个测试都是独立测试,则每次测试开始时都必须注销站点。我通过编辑登录方法来快速完成此操作以查找我的注销链接。如果存在注销链接,则我的测试会单击注销链接,并等待登录页面可用,然后继续测试。
答案 5 :(得分:1)
我们不能在同一台机器上做到这一点。要么我们需要VM,要么我们应该在控制器级别对它进行编程,这样我们的脚本就不会启动任何浏览器来运行脚本。
答案 6 :(得分:1)
使用chrome而不是firefox为我工作。只需在另一个工作区启动它就可以了。
答案 7 :(得分:0)
如果您在Linux上运行,则可以使用多个桌面并设置为浏览器以始终在特定桌面上打开,并在不同的桌面上打开IDE。 这就是我在Ubuntu中的表现,需要5分钟:https://askubuntu.com/a/90014