XMLHttpRequest ベースの AJAX 呼び出しを呼び出して別の選択ボックスに入力する選択ボックスがあります。選択ボックスにデータが入力されるまでセレンを待機させたい。XMLHttpRequest の readyState 変数の値が 4 になるまで待つ必要があります。これは、データが入力されたことを意味します。
ajax - Web ページが XMLHttpRequest ベースの AJAX 呼び出しを使用する場合、selenium で wait_for_ajax 呼び出しを作成するにはどうすればよいですか?
質問する
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();
}
準備完了状態を探す際の問題の 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 に答える