Selenium WebDriver - 如何使用C#设置页面加载超时

Kab*_*oft 36 c# selenium timeout webdriver wait

我正在使用Selenium 2.20 WebDriver使用C#创建和管理firefox浏览器.要访问页面,我使用以下代码,在访问URL之前设置驱动程序超时:

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5)); // Set implicit wait timeouts to 5 secs
driver.Manage().Timeouts().SetScriptTimeout(new TimeSpan(0, 0, 0, 5));  // Set script timeouts to 5 secs
driver.Navigate().GoToUrl(myUrl);   // Goto page url
Run Code Online (Sandbox Code Playgroud)

问题是有时页面需要永远加载,并且看起来使用selenium WebDriver加载页面的默认超时是30秒,这太长了.我不相信我设置的超时适用于使用GoToUrl()方法加载页面.

所以我试图弄清楚如何设置页面加载的超时,但是,我找不到任何实际工作的属性或方法.当我单击一个元素时,默认的30秒超时似乎也适用.

有没有办法将页面加载超时设置为特定值,以便当我调用GoToUrl()方法时,它只会等待我指定的时间才能继续?

Jos*_*osh 35

driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(5);
Run Code Online (Sandbox Code Playgroud)

注意:driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(5))现已弃用.


kta*_*m33 31

如果这有助于任何人仍在寻找答案,那么C#WebDriver API现在包含适当的方法.

driver.Manage().Timeouts().SetPageLoadTimeout(timespan)
Run Code Online (Sandbox Code Playgroud)

  • 从C#intellisense`ImplicitlyWait`是在页面上搜索元素的时间量,`SetPageLoadTimeout`是等待URL加载的时间量,`SetScriptTimeout`是等待异步JS加载的时间量. (9认同)
  • 我只是希望有人清楚地描述了页面加载超时与隐式等待的不同之处.什么时候页面加载但不是一个元素? (3认同)

Ame*_*mey 6

有了这个,您应该能够明确声明等待。

WebDriverWait wait = new WebDriverWait(browser, new TimeSpan(time in seconds));
wait.until(Your condition)
Run Code Online (Sandbox Code Playgroud)

您还可以更改隐式等待时间

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
Run Code Online (Sandbox Code Playgroud)

我认为这是 C# 中的语法。(不确定)

在红宝石中它是

@driver.manage.timeouts.implicit_wait = 30
@wait = Selenium::WebDriver::Wait.new(:timeout => 30)
Run Code Online (Sandbox Code Playgroud)

  • 所以你需要改变你的隐式等待时间 - `driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));` 将 5 秒减少到你想要的时间。这会影响您在 gotourl 上的等待时间。 (2认同)