Selenium C# WebDriver: 要素の待機を効率的に処理する
堅牢なテスト自動化では、要素と対話する前に要素が存在することを確認する必要があります。 WebDriverWait
は、Selenium C# でこれを実現するための鍵です。この記事では、一般的な課題に対処し、要素の存在を確認するように WebDriverWait
を構成するための最適なソリューションを提供します。
一般的な問題: 不完全な待機状態
待機条件の不適切な定義に関連するエラーが頻繁に発生します。 次の不完全な例を考えてみましょう:
<code class="language-csharp">WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0, 0, 5)); wait.Until(By.Id("login")); // Incorrect: Missing wait condition</code>
このコード スニペットには、要素の存在を検証する重要な匿名関数が欠けています。
効果的な解決策
1. ExpectedConditions
:
最も簡単で推奨されるアプローチは、ExpectedConditions
を使用して待機条件を明示的に定義します。
<code class="language-csharp">wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.Id("login")));</code>
これにより、ロケーター (By.Id("login")
) に一致するすべての要素がページ上に存在するまで待機が続行されます。
2. タイムアウトのカスタム拡張メソッド:
コードの可読性と再利用性を高めるために、IWebDriver
:
<code class="language-csharp">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>
このメソッドは、標準の FindElement
メソッドにタイムアウト パラメーターを追加します。 使用法:
<code class="language-csharp">IWebElement btn = driver.FindElement(By.CssSelector("#login_button"), 10); // 10-second timeout</code>
パフォーマンスの最適化:
暗黙的な待機は、FindElement
呼び出しごとに不要な遅延を引き起こし、全体的なテストのパフォーマンスに影響を与えるため、使用を避けてください。上で示したように、明示的な待機により正確な制御が提供され、これらのパフォーマンスのボトルネックが防止されます。 必要な場合にのみ待機するため、効率が向上します。
以上がSelenium C# で要素の存在のために WebDriverWait を適切に構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。