ファビコンを待つのが良い考えかどうかはわかりません。さまざまなアプリケーションがさまざまなテクノロジーとIMOを使用しており、すべてのWebアプリケーションに適用できる一般的な待機はあり得ません。以下は、「my」アプリケーションに使用するものです。これはあなたにアイデアを与えます。「自分の」アプリケーションに適したものを構築する必要があります。
public void my_generic_wait_for_page_load() {
final WebDriverWait wait = new WebDriverWait(this.getDriver(), 300);
final JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
final ExpectedCondition<Boolean> jQueryActive_toBeZero = new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
try {
return ((Long) jsExecutor
.executeScript("return jQuery.active") == 0) ? true
: false;
} catch (final WebDriverException e) {
log.warn("It looks like jQuery is not available on the page, skipping the jQuery wait, check stack trace for details",e);
return true; //skip the wait
}
}
};
final ExpectedCondition<Boolean> document_readyState_toBeComplete = new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
return jsExecutor.executeScript("return document.readyState")
.toString().equals("complete") ? true : false;
}
};
wait.until(jQueryActive_toBeZero);
wait.until(document_readyState_toBeComplete);
}