在 WebDriver 中,WebDriverWait 旨在暂停测试执行,直到满足特定条件。然而,在某些场景下,用户会遇到 WebDriverWait 看似忽略指定元素等待的令人困惑的问题。
谜题:
用户尝试让 WebDriver 等待元素在检索其文本之前出现。然而,当不加断点地运行代码时,等待被绕过,出现异常。
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); IWebElement message = wait.Until(driver => driver.FindElement(By.ClassName("block-ui-message"))); string messageText = message.Text;
解决方案洞察:
问题的症结所在关键在于所使用的定位器策略。单独使用 FindElement 可能并不总是足以确保元素可见性。要解决此问题,请考虑使用 ElementIsVisible 条件和更详细的定位器策略:
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(30)).Until(ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
NuGet 的替代方案:
如果通过 NuGet 安装 DotNetSeleniumExtras.WaitHelpers,您可以将语法简化为如下:
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
通过利用这些技术,您可以确保 WebDriver 有效地暂停执行,直到指定的元素明显存在并可检索。
以上是为什么我的 WebDriverWait 似乎忽略 Selenium WebDriver 中的元素等待?的详细内容。更多信息请关注PHP中文网其他相关文章!