Skip to content
Tags

Pitaliumでページ読み込み完了まで待つには?

by : 2015/12/01

Seleniumを使ったテストの中で厄介なのが画面遷移を伴う操作で、画面の読み込み完了判定を行う時ではないでしょうか。StackOverflowでも同様の質問があがっており、その際に解答に上がっていたのは、

IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00));
wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));

のようにJavaScriptを実行してreadyStateを監視するというものでした。

Pitaliumでは専用のメソッドを提供しています。それがPtlWebDriverのuntilLoadです。使い方は以下の通りです。

driver.get(url);
PtlWebDriverWait wait = new PtlWebDriverWait(driver, 30);
// ロードするまで待つ 
wait.untilLoad();
// ロードが完了してからスクリーンショットを取得する
assertionView.assertView("load_complete");

untilLoadの実際のコードは次のようになっています。

/**
 * ページのLoadイベント終了まで待機します。
 */
public void untilLoad() {
    final int sleepMillis = 100;
    try {
        Thread.sleep(sleepMillis);
        String beforeURL = getURL();
        try {
            addElement(DUMMY_TAG_ID);
            // このタイミングでページが切り替わるとタイムアウトを待つため、時間がかかる。
            until(FIND_DUMMY_TAG_CONDITION);
            deleteElement(DUMMY_TAG_ID);
        } catch (Exception ex) {
            String afterURL = getURL();
            if (!beforeURL.equals(afterURL)) {
                LOG.warn("wait前と後でページが切り替わっているため、waitを継続します");
                // URLが違う場合、切り替わっていないため、もう一度実行する。
                untilLoad();
            } else {
                throw new TestRuntimeException(ex);
            }
        }
    } catch (InterruptedException e) {
            throw new TestRuntimeException(e);
    }
}

このようにダミーのDOMを追加して、その状態を見て読み込み状態を判別するようになっています。

簡単に使えますのでぜひ試してみてください。

PtlWebDriverWait

From → テスト, Pitalium

現在コメントは受け付けていません。

%d人のブロガーが「いいね」をつけました。