Selenium c#为innerText定制预期条件

时间:2016-01-13 11:38:18

标签: c# selenium

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;但也有错误

2 个答案:

答案 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"); });

}