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中文网其他相关文章!