1

Web Driver で Selenium を使用しています。

ライト ボックスに入力するフォームがあります。今、「送信」をクリックすると。そのライト ボックスが閉じられ、ページの上部に簡単な通知が生成され、数秒後に消えます。

今私の質問は次のとおりです。

driver.findElement(By.xpath(".//*[@id='createCaseBtn']")).click(); // x-path of submit button

その通知メッセージが UI に表示されたかどうかを確認するにはどうすればよいですか。

なぜなら、私がするとき

driver.findElement(By.xpath(".//*[@id='easyNotification']")).getText(); // x-path of easyNotification message

その時点で通知メッセージがUIに表示されないため、論理的に正しいと思われる要素を見つけることができないことを示しています。メッセージが UI に表示されるのは、AJAX 要求 (フォームの送信用) が完了した後でのみです。

助けてください!!!!

ありがとう

4

2 に答える 2

3

明示的な待機を使用しました。それは私にとってはうまくいきました:

明示的な待機は、コード内で先に進む前に、特定の条件が発生するのを待機するように定義するコードです。これの最悪のケースは Thread.sleep() で、条件を正確な待機時間に設定します。必要な時間だけ待機するコードを作成するのに役立ついくつかの便利なメソッドが提供されています。WebDriverWait と ExpectedCondition の組み合わせは、これを実現する 1 つの方法です。

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(
    ExpectedConditions.visibilityOfElementLocated(By.id(".//*[@id='easyNotification']")));
于 2012-10-08T10:57:40.513 に答える
0

良い。AJAX を扱うときは、常に流暢な待機アプローチを使用します。送信ボタンをクリックした後に表示されるメッセージのロケーターがあるとします。

String xPathMessage= ".//*[@id='easyNotification']"; 

    public WebElement fluentWait(final By locator){
            Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
                    .withTimeout(30, TimeUnit.SECONDS)
                    .pollingEvery(5, TimeUnit.SECONDS)
                    .ignoring(NoSuchElementException.class);

            WebElement foo = wait.until(
    new Function<WebDriver, WebElement>() {
                public WebElement apply(WebDriver driver) {
                            return driver.findElement(locator);
                    }
                    }
    );
                               return  foo;              }     ;

//simply call the method:
String text=fluentWait(By.xpath(xPathMessage)).getText();

流暢な待機に関するドキュメントから: タイムアウトとポーリング間隔をその場で構成できる待機インターフェイスの実装。各 FluentWait インスタンスは、条件を待機する最大時間と、条件をチェックする頻度を定義します。さらに、ユーザーは、ページ上の要素を検索するときの NoSuchElementExceptions など、待機中に特定の種類の例外を無視するように待機を構成できます。

上記のアプローチは、isElementPresent と組み合わせても悪くありません。

public bool isElementPresent(By selector)
{
    return driver.FindElements(selector).Any();
}

またはその:

public bool isElementPresent(By selector)
{
    return driver.FindElements(selector).size()>0;
}

これがうまくいくことを願っています

于 2012-10-08T10:54:05.197 に答える