selenium网络驱动程序等待innerText的计时器

本文关键字:计时器 innerText 等待 网络 驱动程序 selenium | 更新日期: 2023-09-27 18:30:11

嗨,我在编写这段代码时遇到了问题,需要帮助。html代码是

<span id="banner">Rolling in 10.00...</span>

这个"在10.00中滚动…"是一个innerText,10.00是一个计时器,意味着它将一直运行到0。我有兴趣尝试在计时器为20.00时运行代码。示例

<span id="banner">Rolling in 20.00...</span>

但是我遇到了很多麻烦。这是一些可以工作但有套接字异常错误的代码(http://puu.sh/mubug/c33d8501bf.png)

public void waitroller2()
    {
        Console.WriteLine("start roller timer");
        WebDriverWait wait = new WebDriverWait(PropertiesCollection.driver, TimeSpan.FromSeconds(1000));
        Stopwatch watch = new Stopwatch();
        IWebElement banner = wait.Until(ExpectedConditions.ElementIsVisible(By.Id("banner")));
        watch.Start();
        do
        {
            if (banner.Text.Equals("Rolling in 20.00..."))
            {
                Console.WriteLine("roller ended");
                return;
            }
        } while (watch.Elapsed.Seconds < 1000);
        throw new NoSuchElementException();
    }

这种方法根本不适用于

public void waitroller1()
    {
        Console.WriteLine("waitroller");
        new WebDriverWait(PropertiesCollection.driver, TimeSpan.FromMinutes(1.5)).Until(ExpectedConditions.TextToBePresentInElement(rolling,"Rolling in 20.00..."));
        Console.WriteLine("roller end");
    }

我认为主要的问题是当我长时间使用这个webdriverwait时,它不工作了,出现了套接字问题。我需要帮助,任何人都可以教我怎么做

selenium网络驱动程序等待innerText的计时器

试试这个。

try
{
    string timeToWait = new String(driver.FindElement(By.Id("banner")).Text.ToCharArray().Where(c => Char.IsDigit(c)).ToArray()).Substring(0,2);
    int ttw = Convert.ToInt32(timeToWait);
    System.Threading.Thread.Sleep(ttw * 1000);
}
catch(Exception ex)
{}

这正是您所需要的。

        IWebElement banner = driver.FindElement(By.Id("banner")).Text;
        bool status = false;
        int tryTimes = 15;
        do
        {
            if (banner.Text.Equals("Rolling in 20.00..."))
            {
                Console.WriteLine("roller ended");
                status = true;
            }
            else
            {
                System.Threading.Thread.Sleep(1000);
                banner = driver.FindElement(By.Id("banner")).Text;
                tryTimes--;
            }
        } while (!status && tryTimes > 0);