html
<span id="banner">Rolling in 10.00...</span>
我的代码
public void waitroller()
{
Console.WriteLine("waiting roller");
WebDriverWait wait = new WebDriverWait(PropertiesCollection.driver, TimeSpan.FromDays(2));
wait.Until<IWebElement>((d) =>
{
IWebElement element = PropertiesCollection.driver.FindElement(By.Id("banner"));
if (element.Text == "Rolling in 20.00...")
{
return element;
}
return null;
});
}
或
public void waitroller()
{
new WebDriverWait(PropertiesCollection.driver, TimeSpan.FromMinutes(1.5)).Until(ExpectedConditions.TextToBePresentInElementLocated(By.Id("banner") , "Rolling in 20.00..."));
}
我坚持使用这个innertext,因为html中的innertext总是在变化,我想制作一个webdriverwait,等待直到span横幅中的innertext为&#34;滚动在20.00&#34; 。有没有办法制作自定义预期条件,因为我不了解自定义预期条件。
我需要的是这样的东西
new WebDriverWait(PropertiesCollection.driver,TimeSpan.FromMinutes(1.5))。until(ExpectedConditions.TextToBePresentInElement(PropertiesCollection.driver.FindElement(By.Id(&#34; banner&#34;),&#34; Rolling in 20.00 ...&#34);
但这不起作用,因为我认为id =&#34; banner&#34;是innerText
有一种方法可行,但不能长时间工作,因为我认为这是错误的做法。我多次循环元素横幅并检查innerText是否等于&#34;滚动在20.00 ......&#34;但也有错误
答案 0 :(得分:0)
我不知道你的意思是“innertext”,但是使用Selenium的WebDriverWait,你可以等待你想要的任何东西。您不必使用ExpectedConditions,它们只是为了程序员的舒适。
示例:
new WebDriverWait(...).Until(driver => driver.FindElement(...).Text.Equals(...));
另一方面,您的问题可能完全不同。你的“滚筒”是一个倒计时,文字变化非常快吗?在这种情况下,您可能永远不会达到预期的条件。我认为Selenium会每500毫秒检查一次预期的情况,所以它甚至都没有注意到“滚动在20.00”只是让我们说50毫秒,然后在Selenium下次检查时已经改为“滚动在19.95”
答案 1 :(得分:0)
public void waitroller()
{
Console.WriteLine("waiting roller");
WebDriverWait wait = new WebDriverWait(PropertiesCollection.driver, TimeSpan.FromDays(2));
IWebElement bannerElement = PropertiesCollection.driver.FindElement(By.Id("banner"));
wait.Until((d) =>{ return bannerElement.Text.Contains("Rolling in 20.00"); });
}