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();
    }

寻找就绪状态的一个问题是,页面可能发出多个 XMLHttpRequest。你不会知道哪个是哪个。即使您在单击相关按钮(例如)后立即检查它,即使这可能会触发多个请求。并且不知道哪个会先返回。

在您的情况下,另一个选择可能是等待框中optionsselect更改。所以在上面的代码中,你可以替换

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带有特定的 anattribute是否在List. 或类似的东西。

于 2013-05-21T16:34:17.180 回答