我有一个选择框,它调用基于 XMLHttpRequest 的 AJAX 调用来填充另一个选择框。我希望硒等到填充选择框。我必须等待 XMLHttpRequest 的 readyState 变量的值为 4,这意味着数据已填充。
问问题
1546 次
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。你不会知道哪个是哪个。即使您在单击相关按钮(例如)后立即检查它,即使这可能会触发多个请求。并且不知道哪个会先返回。
在您的情况下,另一个选择可能是等待框中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
带有特定的 anattribute
是否在List
. 或类似的东西。
于 2013-05-21T16:34:17.180 回答