会社のサイトを自動化するために Selenium WebDriver を使用しています。ある時点で、Web アプリケーションは次の方法で新しいウィンドウを開きます。
<a onclick="WindowController.openWindow('quote.action?quoteProcessName=Shortform',WindowController.WINDOW_IS_TRACKED);" tabindex="1">Express Quote</a>
これはカスタムだと思いますが、jQueryを使用しています。私はテスト チームに所属しており、サイトの開発は一切行っていません。とにかく、JavaScript を使用して新しいウィンドウを開きます。スクリプトがこのリンクをクリックした後、新しいウィンドウにアタッチする必要があります。
問題は、IE9 で実行しているときに WebDriver が新しいウィンドウを見つけられないように見えることです。新しいウィンドウに切り替えようとするために使用しているコードは次のとおりです。
public boolean switchTo(final WebRobot robot, final String pageTitle) {
boolean found = false;
int count = 0;
while (!found && count < 20) {
final Set<String> handles = robot.getDriver().getWindowHandles();
final Iterator<String> itr = handles.iterator();
while (itr.hasNext()) {
try {
final String current = itr.next();
robot.getDriver().switchTo().window(current);
if (robot.getDriver().getTitle().contains(pageTitle)) {
robot.getLogger().debug("Switching to " + pageTitle);
found = true;
}
} catch (final NoSuchWindowException e) {
count++;
try {
Thread.sleep(2000);
System.out.println("Handles: " + robot.getDriver().getWindowHandles().size());
} catch (final InterruptedException ignored) {
//Nothing to do here
}
}
}
}
return found;
}
(WebRobot は、WebDriver でブラウザーと実行モードを簡単に切り替えられるようにするために作成したクラスです。robot.getDriver() は、Selenium WebDriver オブジェクトを返します。)
新しいウィンドウが開いた後、robot.getDriver().getWindowHandles().size() は常に 1 です。新しいウィンドウを取得するために欠けているものはありますか?
このコードは、Firefox、Chrome、および IE8 では完全に機能しますが、IE9 では機能しません。IEDriverServer の 64 ビット版、バージョン 2.32.3.0 を使用しています。Selenium WebDriver 2.32 を使用しており、Windows 7 64 ビットで実行しています。