1

您好我正在检查元素中的文本以确保其显示预期的文本..

测试失败,因为它说它返回“”,但是当我在调试中运行它时,它会得到正确的文本。我已经添加了一个 thread.sleep(5000) 并且这修复了测试(我不确定为什么?)并获取显示的文本但是有没有更好的方法来做它,因为 id 如果可能的话不喜欢使用睡眠。

IWebElement panel = _driver.FindElement(By.Id(currentPanel));
panel.FindElement(By.Id("middlepanel-showbtn")).Click();
displayedBody = panel.FindElement(By.Id("middlepanel-body"));
Thread.Sleep(5000);
displayedBodyText = displayedBody.Text;
4

2 回答 2

1

您必须诱导WebDriverWait并且ElementIsVisible()您可以使用以下Locator Strategy

displayedBodyText = new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementIsVisible(By.Id("middlepanel-body"))).Text;
于 2020-06-30T15:33:48.870 回答
1

我的猜测是元素在那里,但文本由一些后台进程填充,因此不会立即出现。如果您知道预期的文本应该是什么,则可以添加 aWebDriverWait并等待预期的文本。

IWebElement panel = _driver.FindElement(By.Id(currentPanel));
panel.FindElement(By.Id("middlepanel-showbtn")).Click();
new WebDriverWait(_driver, TimeSpan.FromSeconds(30)).Until(d => panel.FindElement(By.Id("middlepanel-body")).Text == "The desired string");
// if you get here, the expected text is present

如果您不确定预期的文本将是什么,您可以将最后一行换成下面等待文本不为空的行。

new WebDriverWait(_driver, TimeSpan.FromSeconds(30)).Until(d => panel.FindElement(By.Id("findMe")).Text != "");
于 2020-06-30T15:37:07.787 回答