Selenium C# WebDriver 中的可靠元素等待
在 Selenium C# 中與 Web 元素進行有效交互需要在嘗試任何操作之前確保它們的存在。 這可以防止由於元素未及時加載而導致的常見錯誤。 以下是實現此目的的兩種可靠方法:
方法 1:將 WebDriverWait 與 Lambda 表達式結合使用
此方法使用 WebDriverWait
顯式等待元素。 lambda 表達式簡潔地檢查元素是否存在。
<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#Web驅動器中的元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!