Selenium Web驱动程序c#正在等待文本出现
本文关键字:文本 在等待 Web 驱动程序 Selenium | 更新日期: 2023-09-27 18:24:05
我希望实现
wait.until(ExpectedConditions.textToBePresentInElementLocated(By.xpath("//div[@id='timeLeft']"), "Time left: 7 seconds"));
函数,以等待文本出现。但是,textToBePresentInElementLocated()
仅在java中可用。有没有一种简单的方法可以在c#中实现这一点,等待文本出现在页面上?
我能够通过以下方式解决此问题:
element = driver.FindElement(By.Xpath("//div[@id='timeLeft']")));
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.TextToBePresentInElement(name, "Time left: 7 seconds"));
Selenium是开源的,所以看看它的作用:
https://github.com/SeleniumHQ/selenium/blob/master/java/client/src/org/openqa/selenium/support/ui/ExpectedConditions.java#L305
然而,你有LINQ的功能,所以它会更简单一点,伪:
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.IgnoreExceptionTypes(typeof(StaleReferenceException)); // ignore stale exception issues
wait.Until(d => d.FindElement(By.XPath("//div[@id='timeLeft']")).Text.Contains("Time left: 7 seconds"));
最后一行将等待,直到从d.FindElement(By.XPath("//div[@id='timeLeft']")).Text
返回的文本包含Time left: 7 seconds
。
我有Java版本的方法,用于等待文本出现在元素中。也许它会对你有所帮助。
public void waitForText(WebDriver driver, String text, By selector) {
try {
WebDriverWait waitElem = new WebDriverWait(driver, WAIT_TIME);
waitElem.until(ExpectedConditions.textToBePresentInElementLocated(selector, text));
}catch (TimeoutException e){
logger.error(e.toString());
}
}
方法获取webdriver的实例,String到mach文本,Element以By Class格式声明。WAIT_TIME是以秒为单位的等待时间常数。
等待文本出现
do
{
Thread.Sleep(2000);
}
while(!driver.FindElement(ByXpath("//The Xpath of the TEXT//")).Displayed);
{
}