ページのリロードを待つ方法はありますか? たとえば、私がページにlocalhost:9000/web
いて、webdriver にlocalhost:9000/web
. 一部の要素を待機してリロードを示したくない、または示すことができません。
5 に答える
Selenium WebDriver では、次のコード スニペットを使用して、waitForPageToLoad を実装できます。
public void waitForPageToLoad(WebDriver driver) {
ExpectedCondition < Boolean > pageLoad = new
ExpectedCondition < Boolean > () {
public Boolean apply(WebDriver driver) {
return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete");
}
};
Wait < WebDriver > wait = new WebDriverWait(driver, 60);
try {
wait.until(pageLoad);
} catch (Throwable pageLoadWaitError) {
assertFalse("Timeout during page load", true);
}
}
これは古いですが、これに対する解決策も欲しかったので、この質問に出くわしました。
投稿された回答のおかげで、予想される html の古さの状態とwaitForPageToLoad
@mfsi_sitamj 投稿の関数を組み合わせて、独自のソリューションを作成しました。
このようなもの:
@CacheLookup
@FindBy(tagName = "html")
private WebElement __document;
public void waitForReload() {
Wait<WebDriver> wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.stalenessOf(this.__document));
wait.until((ExpectedCondition<Boolean>) wd ->
((JavascriptExecutor) wd).executeScript("return document.readyState").equals("complete"));
}
get()、navigate.to()、navigate.refresh()、navigate.forward()、navigate.backward() などの Webdriver メソッドは、次のページが完全に読み込まれるまで自動的に待機します。
Selenium RC では、
new Selenium().waitForPagetoLoad()
Selenium RC を使用している場合は、それがwaitForPageToLoad()
メソッドです。
selenium.waitForPagetoLoad() // it might be waitForLoad() - can't remember.
Selenium WebDriver を使用している場合、すべてのナビゲーションは API によって処理され、ブラウザーがナビゲートを完了するまで暗黙的に待機します。
driver.navigate().to().url("http://localhost:9000/web");
また、先頭に「http://」を付けていることを確認してください。Selenium が「localhost:9000」を解決していない可能性があります