在 Selenium 和 C# 中使用定时器 Class
Using the Timer Class with Selenium & C#
我正在使用 Selenium 登录网页并访问该网站的 "homepage." 在大多数情况下,我会调用:
IWebDriver driver = new FirefoxDriver;
driver is declared much earlier, but I have it here for reference.
diver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(<insert time here>);
通常,这就是我所需要的,然后代码将执行我希望它执行的操作。然而,在这种情况下,登录页面经历了几个不同的 "http://..." links 所以等待页面加载是不够的,因为它经历了很多。我知道我需要使用计时器 class 来等待最后一个 link,但不太确定如何正确使用它。有人可以解释如何正确使用 Timer() class 来获得我想要的结果吗?
我找到了一个我最初忽略的解决方案。我将它发布在这里,供将来可能 运行 遇到此问题并找到此线程的任何人使用。此代码有效,但它非常具体且不是最佳解决方案。
Thread.Sleep(TimeSpan.FromSeconds(30));
这将使 thread/script 从 运行ning 停止整整 30 秒。它适用于我的情况,因为我的互联网速度足够快,但它并不理想,因为页面可能需要超过 30 秒才能加载,从而导致代码崩溃。如果有人有建议,我仍然愿意接受建议。
您可以使用 WebDriverWait
对象测试单个操作的计时。
try
{
var wait = new WebDriverWait(YourWebDriverInstance, TimeSpan.FromSeconds(timeoutInSeconds));
return wait.Until(driver => driver.FindElement(By.Name("q")));
}
catch (WebDriverTimeoutException ex)
{
// handle timeout
}
我正在使用 Selenium 登录网页并访问该网站的 "homepage." 在大多数情况下,我会调用:
IWebDriver driver = new FirefoxDriver;
driver is declared much earlier, but I have it here for reference.
diver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(<insert time here>);
通常,这就是我所需要的,然后代码将执行我希望它执行的操作。然而,在这种情况下,登录页面经历了几个不同的 "http://..." links 所以等待页面加载是不够的,因为它经历了很多。我知道我需要使用计时器 class 来等待最后一个 link,但不太确定如何正确使用它。有人可以解释如何正确使用 Timer() class 来获得我想要的结果吗?
我找到了一个我最初忽略的解决方案。我将它发布在这里,供将来可能 运行 遇到此问题并找到此线程的任何人使用。此代码有效,但它非常具体且不是最佳解决方案。
Thread.Sleep(TimeSpan.FromSeconds(30));
这将使 thread/script 从 运行ning 停止整整 30 秒。它适用于我的情况,因为我的互联网速度足够快,但它并不理想,因为页面可能需要超过 30 秒才能加载,从而导致代码崩溃。如果有人有建议,我仍然愿意接受建议。
您可以使用 WebDriverWait
对象测试单个操作的计时。
try
{
var wait = new WebDriverWait(YourWebDriverInstance, TimeSpan.FromSeconds(timeoutInSeconds));
return wait.Until(driver => driver.FindElement(By.Name("q")));
}
catch (WebDriverTimeoutException ex)
{
// handle timeout
}