首頁 > 後端開發 > C++ > 如何可靠地等待Selenium C#Web驅動器中的元素?

如何可靠地等待Selenium C#Web驅動器中的元素?

Patricia Arquette
發布: 2025-01-25 18:46:12
原創
271 人瀏覽過

How to Reliably Wait for an Element in Selenium C# WebDriver?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板