4

会社のサイトを自動化するために 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 ビットで実行しています。

4

2 に答える 2

0

互換モードをオンにすると、問題が修正されました。

于 2014-10-10T19:33:58.030 に答える
0

http://grokbase.com/t/gg/webdriver/128hgbmcw0/getwindowhandles-return-only-1-window-in-ie

newSet.removeAll(oldSet); newWindow = newSet.toArray()[0];

于 2013-05-22T10:11:53.467 に答える