1

我正在关注一个教程,并从那里获取 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);
4

1 回答 1

1

ImplicitWait在与动态元素交互时不是那么有效。相反,您需要用显式等待替换式等待

例如,要从元素中检索文本,您必须诱导WebDriverWait并且ElementIsVisible()您可以使用以下任一 Locator Strategies

  • Id

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

    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);
    
于 2020-12-28T12:50:51.473 回答