テスト間でセレンインスタンスを共有することで、この問題を解決しました。次に、セレンはテスト実行全体で1回だけフォーカスを奪おうとしますが、これはそれほど悪くはありません。
JUnitを使用してSeleniumのスクリプトを作成している場合は、Springを使用してSeleniumSpringJUnit4ClassRunner
インスタンスを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>
次に、テストで、セレンインスタンスをnew
'ingする代わりに注入します。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:selenium.xml")
public class WebappIT {
@Resource
private Selenium selenium;
... test code ...
}
これをいくらか単純化しました。実際のコードでは、selenium.start()を1回だけ呼び出すことができるように、seleniumインスタンスをプロバイダークラスでラップしています。