1

XMLHttpRequest ベースの AJAX 呼び出しを呼び出して別の選択ボックスに入力する選択ボックスがあります。選択ボックスにデータが入力されるまでセレンを待機させたい。XMLHttpRequest の readyState 変数の値が 4 になるまで待つ必要があります。これは、データが入力されたことを意味します。

4

1 に答える 1

5

Java の場合: 次のように readyState の変更を待つことができます。

    int tryCount = 0;
    boolean desiredResponseReceived = false;
    while (desiredResponseReceived == false && tryCount < 20) {
        String readyState = (String) js.executeScript("return xhr.readyState;");
        if (readyState.equals("4")) {
            desiredResponseReceived = true;
        }
        else {
            Thread.sleep(250);
            tryCount++;
        }
    }

    if (desiredResponseReceived == false) {
        driver.quit();
    }

準備完了状態を探す際の問題の 1 つは、ページが複数の XMLHttpRequest を作成している可能性があることです。そしてどれがどれだかわからなくなります。関連するボタンをクリックした直後に確認しても (たとえば)、複数のリクエストが発生する可能性があります。そして、どちらが最初に戻るかはわかりません。

optionsあなたの場合の別のオプションは、代わりにselectボックス内が変更されるのを待つことです。したがって、上記のコードでは、

String readyState = (String) js.executeScript("return xhr.readyState;");
     if (readyState.equals("4")) {

List<WebElement> options = driver.findElements(By.tagName("option"));
     if (options.size() > 1) {

optionsまたは、予想される の最小数がわからない場合はoption、特定のattributeが にあることをテストできますList。またはそのようなもの。

于 2013-05-21T16:34:17.180 に答える