Selenium C# WebDriver:强大的元素等待技术
在 Selenium 中与 Web 元素进行有效交互需要在尝试任何操作之前确保它们的存在。 这可以防止由于元素未及时加载而导致的常见错误。 让我们使用 WebDriverWait
和 ExpectedConditions
探索有效的等待策略。
标准方法使用 WebDriverWait
和 ExpectedConditions.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中文网其他相关文章!