在Selenium中使用Timer类c#

本文关键字:Timer Selenium | 更新日期: 2023-09-27 17:53:45

我使用Selenium登录到一个网页,并得到什么将是该网站的"主页"。在大多数情况下,我使用调用:

IWebDriver driver = new FirefoxDriver;

driver很早就声明过了,但是我把它放在这里作为参考。

diver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(<insert time here>);

通常,这将是我所需要的,然后代码将做我想要它做的事情。但是,在这种情况下,登录页面要经过几个不同的"http://..."链接,因此等待页面加载是不够的,因为它要经过许多链接。我知道我需要使用Timer类来等待最后一个链接,但不太确定如何正确使用它。有人能解释如何正确使用定时器()类来获得我想要的结果吗?

在Selenium中使用Timer类c#

您可以使用WebDriverWait对象测试单个操作的计时。

try
{
    var wait = new WebDriverWait(YourWebDriverInstance, TimeSpan.FromSeconds(timeoutInSeconds));
    return wait.Until(driver => driver.FindElement(By.Name("q")));
}
catch (WebDriverTimeoutException ex)
{
    // handle timeout
}

我发现了一个我最初忽略的解决方案。我在这里张贴它的任何人谁也可能会遇到这个问题在未来,并找到这个线程。这段代码可以工作,但它非常具体,不是最好的解决方案。

Thread.Sleep(TimeSpan.FromSeconds(30));

这将使线程/脚本停止运行30秒。在我的情况下,它可以工作,因为我的互联网速度足够快,但它不是理想的,因为页面可能需要超过30秒的加载时间,导致代码崩溃。如果有人有建议,我仍然愿意接受。