首页 > 后端开发 > C++ > 如何有效地等待Selenium C#Web驱动器中的元素存在?

如何有效地等待Selenium C#Web驱动器中的元素存在?

Linda Hamilton
发布: 2025-01-25 19:01:11
原创
944 人浏览过

How to Efficiently Wait for Element Presence in Selenium C# WebDriver?

Selenium C# WebDriver:强大的元素等待技术

在 Selenium 中与 Web 元素进行有效交互需要在尝试任何操作之前确保它们的存在。 这可以防止由于元素未及时加载而导致的常见错误。 让我们使用 WebDriverWaitExpectedConditions 探索有效的等待策略。

标准方法使用 WebDriverWaitExpectedConditions.ElementIsVisible

<code class="language-csharp">WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
wait.Until(ExpectedConditions.ElementIsVisible(By.Id("login")));</code>
登录后复制

此代码最多等待 5 秒,以便 ID 为“login”的元素变得可见。 为了简洁起见,可以使用 lambda 表达式:

<code class="language-csharp">wait.Until(d => d.FindElement(By.Id("login")).Displayed);</code>
登录后复制

但是,仅依赖隐式等待可能会对性能产生负面影响。更受控制的方法涉及 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(drv => drv.FindElement(by));
        }
        return driver.FindElement(by);
    }
}</code>
登录后复制

此扩展方法允许您指定超时。 用法:

<code class="language-csharp">var btn = driver.FindElement(By.CssSelector("#login_button"), 10);
btn.Click();</code>
登录后复制

此方法尝试在 10 秒内使用 CSS 选择器“#login_button”查找元素。 如果在超时时间内没有找到该元素,则会抛出NoSuchElementException。这提供了一种更精确、更有效的方法来处理元素等待,从而提高 Selenium 测试的整体稳健性。

以上是如何有效地等待Selenium C#Web驱动器中的元素存在?的详细内容。更多信息请关注PHP中文网其他相关文章!

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