Selenium C# WebDriver で信頼できる要素が待機します
Selenium C# で Web 要素と効率的に対話するには、アクションを試みる前に Web 要素の存在を確認する必要があります。 これにより、要素が時間内にロードされないことによって発生する一般的なエラーが防止されます。 これを実装するための 2 つの強力な方法を次に示します。
方法 1: ラムダ式で WebDriverWait を使用する
このアプローチでは、WebDriverWait
を使用して要素を明示的に待機します。 ラムダ式は要素の存在を簡潔にチェックします。
<code class="language-csharp">WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5)); IWebElement element = wait.Until(d => d.FindElement(By.Id("login")));</code>
このコードは、ID が「login」の要素を最大 5 秒待機します。 要素が見つかった場合は、element
変数に割り当てられます。 タイムアウト内に見つからない場合は、TimeoutException
がスローされます。
方法 2: IWebDriver
パフォーマンスを向上させ、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(d => d.FindElement(by)); } return driver.FindElement(by); // No wait if timeout is 0 } }</code>
この拡張メソッドは、タイムアウトを受け入れる FindElement
オーバーロードを追加します。 timeoutInSeconds
が 0 より大きい場合は、WebDriverWait
が使用されます。それ以外の場合は、直接 FindElement
呼び出しを実行します。
使用例:
<code class="language-csharp">var driver = new FirefoxDriver(); driver.FindElement(By.CssSelector("#login_button"), 10).Click(); // Waits 10 seconds var employeeLabel = driver.FindElement(By.CssSelector("#VCC_VSL"), 10); Assert.AreEqual("Employee", employeeLabel.Text);</code>
この例では、拡張メソッドを使用して CSS セレクターで要素を待機する方法を示し、Selenium テストで要素の読み込み遅延を処理する明確かつ効率的な方法を提供します。 適切なタイムアウト値を選択することは、応答性のバランスをとり、不必要な遅延を回避するために重要です。
以上がSelenium C# WebDriver で要素を確実に待機する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。