1
我有一個選擇框,它調用基於XMLHttpRequest的AJAX調用來填充另一個選擇框。 我希望硒等待選擇框填充。我必須等待XMLHttpRequest的readyState變量的值爲4,這意味着數據已填充。如何在selenium中使用基於XMLHttpRequest的AJAX調用來編寫wait_for_ajax調用?
我有一個選擇框,它調用基於XMLHttpRequest的AJAX調用來填充另一個選擇框。 我希望硒等待選擇框填充。我必須等待XMLHttpRequest的readyState變量的值爲4,這意味着數據已填充。如何在selenium中使用基於XMLHttpRequest的AJAX調用來編寫wait_for_ajax調用?
在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。你不知道哪一個是哪個。即使您點擊相關按鈕(例如)後立即檢查它,即使這可能會觸發多個請求。而且不知道哪個會先返回。
您的情況的另一種選擇可能是改爲等待select
框中的options
框。所以在上面的代碼中,你可能會更換
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
最小數,你可以測試與特定attribute
的option
是在List
。或類似的東西。