ページが Selenium に完全にロードされたかどうかを確認する汎用関数はありますか?
Web ページがロードされているかどうかを判断しようとしています。 Seleniumを使用したロードが完了しました。コードを使用しようとしましたが、ページの読み込み中であっても待機しません。特定の要素の可視性やクリック可能性を検査するソリューションではなく、一般的なソリューションを求めています。
答え:
いいえ、それを確認するための一般的な Selenium メソッドはありません。ウェブのフルロードpage.
説明:
コードを調べてみましょう:
new WebDriverWait(firefoxDriver, pageLoadTimeout).until( webDriver -> ((JavascriptExecutor) webDriver).executeScript("return document.readyState").equals("complete"));
このコードの pageLoadTimeout 変数は、実際には実際の pageLoadTimeout に対応しません。 () 関数。
ただし、ページが完全に読み込まれたかどうかを確認するユースケースでは、次のようにすることができます。 DesiredCapabilities クラスまたは ChromeOptions クラスのいずれかを使用して、pageLoadStrategy() を「normal」に設定して使用します (他の可能な値には「none」と「eager」が含まれます)。以下に例を示します。
DesiredCapabilities の使用:
DesiredCapabilities dcap = new DesiredCapabilities(); dcap.setCapability("pageLoadStrategy", "normal"); FirefoxOptions opt = new FirefoxOptions(); opt.merge(dcap); WebDriver driver = new FirefoxDriver(opt);
使用ChromeOptions:
ChromeOptions opt = new ChromeOptions(); opt.setPageLoadStrategy(PageLoadStrategy.NORMAL); WebDriver driver = new FirefoxDriver(opt);
考慮事項:
PageLoadStrategy を「normal」に設定すると、ブラウザ クライアントが「document.readyState」と等しい状態に確実に到達します。 "完了。"ただし、これはすべての JavaScript および Ajax 呼び出しが完了したことを保証するものではありません。
これに対処するには、関数を使用してすべての JavaScript および Ajax 呼び出しが完了するまで待機できます。
public void WaitForAjax2Complete() throws InterruptedException { while (true) { if ((Boolean) ((JavascriptExecutor)driver).executeScript("return jQuery.active == 0")){ break; } Thread.sleep(100); } }
あるいは、WebDriverWait を ExpectedConditions と組み合わせて使用して、特定のイベントまたは要素を待機することもできます。状態:
// Wait for a specific part of the page title new WebDriverWait(driver, 10).until(ExpectedConditions.titleContains("partial_title_of_application_under_test")); // Wait for a specific element to become visible WebElement ele = new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("xpath_of_the_desired_element")));
参照:
以上がWeb ページの読み込みが完了したかどうかを確認するための汎用 Selenium 関数はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。