Seleniumはドキュメントの準備ができるまで待機します。質問する

Seleniumはドキュメントの準備ができるまで待機します。質問する

ページが完全に読み込まれるまで Selenium を待機させる方法を誰か教えてもらえませんか? 汎用的なものが欲しいのですが、WebDriverWait を構成して 'find' のようなものを呼び出して待機させることができることはわかっていますが、そこまではしません。ページが正常に読み込まれることをテストし、次のページに進んでテストするだけです。

.net で何かを見つけたのですが、Java では動作しませんでした...

IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00));
wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));

何かご意見はありますか?

ベストアンサー1

あなたが提案した解決策は、DOMreadyStateシグナルを発しますcomplete。しかし、Seleniumはデフォルトで、ページの読み込み時にこれらの(およびもう少しの)シグナルを待機しようとします。driver.get()そしてelement.click()メソッド。これらはすでにブロックされており、ページが完全に読み込まれるまで待機しており、正常に動作するはずです。

問題は、明らかに、AJAX リクエストと実行中のスクリプトによるリダイレクトです。これらは Selenium ではキャッチできず、完了するまで待機しません。また、確実にキャッチすることもできませんreadyState。少し待つことは便利ですが、completeすべての AJAX コンテンツがダウンロードされるずっと前に信号が送信されます。

どこでも、誰にでも通用する一般的な解決策は存在しません。だからこそ難しいことであり、誰もが少しずつ異なる方法を使用しているのです。

一般的なルールは、WebDriver に任せてその役割を担わせ、次に暗黙的な待機を使用し、次にページ上でアサートする要素に対して明示的な待機を使用することですが、実行できるテクニックは他にもたくさんあります。テストしたページで、自分のケースに最も適したもの (または複数の組み合わせ) を選択する必要があります。

詳細については、これに関する私の 2 つの回答を参照してください。

おすすめ記事