首页 > 后端开发 > C++ > 如何可靠地等待 Selenium C# WebDriver 中的元素?

如何可靠地等待 Selenium C# WebDriver 中的元素?

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# WebDriver 中的元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板