0

コンソールが Apache Wicket 6 で開発された Web アプリケーション上で Selenium 2.41 との統合テストを実行しており、Selenium Firefox Web ドライバーのインスタンスを作成しました。

protected WebDriver seleniumDriver = new FirefoxDriver();

有名な Wicket ModalWindow を呼び出すページがあります。特に、ボタンをクリックすると、何かを編集または作成するための odal ウィンドウ ページが表示されます。モーダル ウィンドウには、2 つの入力テキスト フィールドと [保存] ボタンがあります。Selenium では、これらのテキスト フィールドに何かを入力しようとしていますが、モーダル ウィンドウにしかアクセスできません。

seleniumDriver.findElement(By.xpath("//a[contains(text(),'Create new item')]")).click();

次に、Selenium Webドライバーコントロールがメインページにスタックするため、(いくつかのインターネットの例に従って)開いているモーダルウィンドウでコントロールを「切り替える」ためにこのコードを書きました:

//Store the current window handle
        String parentWindow = seleniumDriver.getWindowHandle();

//   switch to configuration modal window
            for (String winHandle : seleniumDriver.getWindowHandles()) {
                seleniumDriver.switchTo().window(winHandle);
            }

            WebDriverWait webDriverWaitHalfMinModal = new WebDriverWait(seleniumDriver, 10L);

            webDriverWaitHalfMinModal.until(ExpectedConditions.presenceOfElementLocated(By.
                    xpath("//input[@name='key:textField']")));

            // do something in modal window

            //Close the new window, if that window no more required
            seleniumDriver.close();
           //Switch back to original browser (parent window)
            seleniumDriver.switchTo().window(parentWindow); 

私も試しました:

seleniumDriver.switchTo().activeElement();

seleniumDriver.switchTo().alert();

しかし、それを機能させる方法はありません。実際、ウィンドウ ハンドルのリストには、2 つの要素 (メイン ページとモーダル ページ) ではなく、メイン ページの 1 つの要素しかなく、モーダル ウィンドウでテキスト フィールドを見つける方法はありません。ボタンを押します。私のコードの残りの部分は機能していることを指摘します。私はモーダル ウィンドウでのみ作業することはできません。私の質問は次のとおりです。Selenium 2.41でAPACHE WICKET 6モーダルウィンドウを管理するにはどうすればよいですか? コントロールをメイン ページから APACHE WICKET 6 モーダル ウィンドウに切り替える方法はありますか?

4

3 に答える 3

3

Selenium には、モーダル ダイアログの処理に関するバグが存在します。ここを読んでください: https://code.google.com/p/selenium/issues/detail?id=284

ただし、回避策があります。クリック方法を以下に記述したものに置き換えます。

seleniumDriver.executeScript("var el=arguments[0]; setTimeout(function() { el.click(); }, 100);", seleniumDriver.findElement(By.xpath("//a[contains(text(),'Create new item')]")));

次に、既存のコードを使用してモーダル ウィンドウに切り替えます。それはうまくいくはずです。

于 2014-05-13T06:22:51.167 に答える
0

以下は私にとってはうまくいきましたが、Apache Wicket 1.4.x. Selenium WebDriverに関連: iFrames が完全にロードされるのを待つ方法は?

WebElement iFrame = wait.until(visibilityOfElementLocated(By.tagName("iframe")));
driver.switchTo().frame(iFrame);
于 2015-11-11T17:53:25.993 に答える
0

Apache Wicket モーダル ウィンドウはフレーム、特に jquery iframe であるため、次のものが必要でした。

seleniumDriver.switchTo().frame(seleniumDriver.findElement(By.className("wicket_modal")));

しかし、これでは十分ではありませんでした。実際には、Web ドライバー バックエンド (高レベル API) を使用し、Selenium Web ドライバー バックエンドを作成しました。

seleniumDriver = new FirefoxDriver();
    selenium = new WebDriverBackedSelenium(seleniumDriver, BASE_URL);

そして switchTo() と find() はうまくいきました。

于 2014-05-13T11:47:08.150 に答える