我有一个选择框,它调用基于XMLHttpRequest的AJAX调用来填充另一个选择框。 我希望selenium等到填充选择框。我必须等待XMLHttpRequest的readyState变量具有值4,这意味着填充了数据。
答案 0 :(得分:4)
在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。你不会知道哪一个是哪个。即使您在单击相关按钮(例如)之后立即检查它,即使这可能会触发多个请求。并且没有人知道哪个会先返回。
您的情况中的另一个选项可能是等待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
。或类似的东西。