隐式等待不等待指定时间导致测试失败

Implicit wait doesn't wait for the specified time causing the test to fail

我正在学习一个教程,我从那里学习了 URL 来尝试学习隐式等待。 我编写了以下代码来单击页面上的按钮,然后等待 30 秒让新元素可见,然后从元素中获取文本并使用 Assert 进行确认。 当我调试时代码工作正常,但 运行 测试结果失败并且测试也仅在 6.8 秒内完成。

driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/dynamic_loading/1");
driver.FindElement(By.XPath("//*[@id='start']/button")).Click();
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
string text = driver.FindElement(By.Id("finish")).Text;
Assert.AreEqual("Hello World!", text);

is not that effective when interacting with dynamic elements. Instead you need to replace with explicit wait.

例如,要从您必须为 ElementIsVisible() 引入 WebDriverWait 的元素中检索文本,您可以使用以下任一方法 :

  • Id:

    string text = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible(By.Id("finish"))).Text;
    Assert.AreEqual("Hello World!", text);
    
  • CssSelector:

    string text = new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementIsVisible(By.CssSelector("div#finish"))).Text;
    Assert.AreEqual("Hello World!", text);
    
  • XPath:

    string text = new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementIsVisible(By.XPath("//div[@id='div#finish']"))).Text;
    Assert.AreEqual("Hello World!", text);