隐式等待不等待指定时间导致测试失败
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);
我正在学习一个教程,我从那里学习了 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);
例如,要从您必须为 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);