Мы решили эту проблему, разделив экземпляр селена между тестами. Тогда селен пытается украсть фокус только один раз за весь тестовый запуск, что не так уж и плохо.
Если вы используете JUnit для сценария Selenium, вы можете использовать Spring * SpringJUnit4ClassRunner
, чтобы внедрить экземпляр селена в виде bean-компонента.
Определите тестовый контекст для Spring selenium.xml
(поищите его, если вы не знаете, как настроить файл конфигурации Spring XML) и включите экземпляр селена:
<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>
Затем в своем тесте вместо new
введите экземпляр селена:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:selenium.xml")
public class WebappIT {
@Resource
private Selenium selenium;
... test code ...
}
Я несколько упростил это, в нашем реальном коде мы оборачиваем экземпляр selenium в классе провайдера, чтобы мы могли вызывать selenium.start () только один раз.