WebDriverWait が期待どおりに待機しない
要素からテキストを取得しようとすると、要素が表示される前に待機が実装されます。検索。ただし、コードがブレークポイントなしで実行されると待機がバイパスされ、例外が発生するように見えます。
問題の説明
提供されたコード スニペットは、次の FindElement メソッドを使用しています。 WebDriverWait クラス。指定されたタイムアウト期間 (この場合は 30 秒) 内に要素が見つからない場合に例外を発生させます。この即時性は、待機期間が終了するまでに要素が表示されない、または読み込まれないことが原因である可能性があります。
解決策
代わりに、次の ElementIsVisible 条件を使用できます。 ExpectedConditions クラスと WebDriverWait の組み合わせ。このアプローチでは、要素が条件を満たす (この場合は表示される) まで待機することになります。さらに、GetAttribute メソッドを利用して、Text プロパティの代わりに要素の innerHTML を取得できます。
ElementIsVisible 条件を使用した例を次に示します:
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
DotNetSeleniumExtras.WaitHelpers Option
雇用している場合NuGet を介して SeleniumExtras.WaitHelpers を使用すると、次のように ExpectedConditions クラスの ElementIsVisible 条件を利用できます。
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
以上がブレークポイントなしで実行すると WebDriverWait が待機に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。