Selenium C# WebDriver: 堅牢な要素待機テクニック
Selenium で Web 要素と効率的に対話するには、アクションを試みる前に Web 要素の存在を確認する必要があります。 これにより、要素が時間内にロードされないことによって発生する一般的なエラーが防止されます。 WebDriverWait
と ExpectedConditions
を使用して効果的な待機戦略を探ってみましょう。
標準的なアプローチでは、WebDriverWait
と ExpectedConditions.ElementIsVisible
を使用します。
<code class="language-csharp">WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5)); wait.Until(ExpectedConditions.ElementIsVisible(By.Id("login")));</code>
このコードは、ID「login」の要素が表示されるまで最大 5 秒待機します。 簡潔にするために、ラムダ式を使用できます。
<code class="language-csharp">wait.Until(d => d.FindElement(By.Id("login")).Displayed);</code>
ただし、暗黙的な待機のみに依存すると、パフォーマンスに悪影響を及ぼす可能性があります。より制御されたアプローチには、FindElement
:
<code class="language-csharp">public static class WebDriverExtensions { public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds) { if (timeoutInSeconds > 0) { var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds)); return wait.Until(drv => drv.FindElement(by)); } return driver.FindElement(by); } }</code>
この拡張メソッドを使用すると、タイムアウトを指定できます。 使用法:
<code class="language-csharp">var btn = driver.FindElement(By.CssSelector("#login_button"), 10); btn.Click();</code>
このメソッドは、CSS セレクター「#login_button」を持つ要素を 10 秒以内に検索しようとします。 タイムアウト内に要素が見つからない場合は、NoSuchElementException
がスローされます。これにより、要素の待機を処理するためのより正確かつ効率的な方法が提供され、Selenium テストの全体的な堅牢性が向上します。
以上がSelenium C#WebDriverの要素の存在を効率的に待つ方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。