我正在使用Selenium2。已使用WebDriver类(位于软件包org.openqa.selenium中)中的Get命令加载了页面。我的问题是,Selenium的页面加载默认超时是多少?

评论

您是否要问硒加载页面通常需要多长时间?

是的,确切的说,页面加载的默认时间是多少?在Api中,说明了get方法被阻塞,直到加载完成,如果页面未加载,它不会引发任何异常

那不取决于页面上的内容吗? “ hello world”页面的加载速度将比其上包含1000个元素的页面的加载速度更快。
如果未在特定的时间限制内加载该页面,则应抛出一些异常,该页面的默认加载时间是什么?如果在默认时间内未加载该页面,则它将抛出任何异常,例如TimeoutException

#1 楼

超时的默认WebDriver设置为永不。 WebDriver将永远坐在那里等待页面加载。

以下超时可用:

  /**
   * An interface for managing timeout behavior for WebDriver instances.
   */
  interface Timeouts {

    /**
     * Specifies the amount of time the driver should wait when searching for an element if it is
     * not immediately present.
     * <p/>
     * When searching for a single element, the driver should poll the page until the element has
     * been found, or this timeout expires before throwing a {@link NoSuchElementException}. When
     * searching for multiple elements, the driver should poll the page until at least one element
     * has been found or this timeout has expired.
     * <p/>
     * Increasing the implicit wait timeout should be used judiciously as it will have an adverse
     * effect on test run time, especially when used with slower location strategies like XPath.
     * 
     * @param time The amount of time to wait.
     * @param unit The unit of measure for {@code time}.
     * @return A self reference.
     */
    Timeouts implicitlyWait(long time, TimeUnit unit);

    /**
     * Sets the amount of time to wait for an asynchronous script to finish execution before
     * throwing an error. If the timeout is negative, then the script will be allowed to run
     * indefinitely.
     * 
     * @param time The timeout value.
     * @param unit The unit of time.
     * @return A self reference.
     * @see JavascriptExecutor#executeAsyncScript(String, Object...)
     */
    Timeouts setScriptTimeout(long time, TimeUnit unit);

    /**
     * Sets the amount of time to wait for a page load to complete before throwing an error.
     * If the timeout is negative, page loads can be indefinite.
     *
     * @param time The timeout value.
     * @param unit The unit of time.
     * @return
     */
    Timeouts pageLoadTimeout(long time, TimeUnit unit);
  }


您可以通过设置来调整超时driver.manage().timeouts().pageLoadTimeout()

更多信息在这里:

Selenium Wiki

更新:更新了过时的Wiki URL

评论


有3种超时。页面加载超时!=隐式等待超时。默认情况下,页面加载超时是受限制的。我希望我可以对此答案投反对票

–安德烈·波塔洛夫(Andrei Botalov)
13年4月8日在12:13



您的权利,我已经隐式地将页面加载超时等了,这是更新答案的时间。

– Ardesco
13年4月8日在14:05

这个答案是不正确的。

– Corey Goldberg
15/12/27在15:22

#2 楼

显然有超时。它长30分钟。

SEVERE: Timed out waiting for page load.
Command duration or timeout: 1800.01 seconds
Build info: version: '2.40.0', revision: 'fbe29a9', time: '2014-02-19 20:55:11'
System info: host: 'PurpleMimosa.local', ip: '10.11.11.131', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.9.2', java.version: '1.7.0_51'
Session ID: 11e6b0f4-15f2-7d48-8dbc-2176def7e41f
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=MAC, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, browserConnectionEnabled=true, webStorageEnabled=true, nativeEvents=false, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=29.0.1}]


评论


欢迎来到Plastiq SQA!其他许多人说默认情况下没有超时,但是您可以设置一个。您能否详细说明如何制作此代码,以及如何显示未设置超时(因此是默认设置)?

–corsiKa♦
2014年5月22日在22:24

@corsiKa:显然其他人也被误导了……单击链接等待了30分钟以上的加载之后,我也获得了超时。如何产生这个?如何显示未设置超时?从全新安装开始,不要手动设置超时,而是尝试加载一个小时的页面。简单! :)

–达伦·林格(Darren Ringer)
2015年9月21日在19:27



#3 楼

欢迎来到赛克里希纳SQA。根据StackOverflow问题,超时为30秒。

评论


您可以使用以下Java代码修改该值:driver.manage()。timeouts()。implicitlyWait(10,TimeUnit.SECONDS);

–斯科特
2012年2月8日在20:05

默认的30秒超时是Selenium RC API,而不是WebDriver。

– Ardesco
2012年2月9日在12:20

#4 楼

正如其他人所说,没有超时。
但是,建议的ImplicitlyWait()实际上是要显示页面元素。对于页面加载,您想设置“页面加载”超时。然后,这将在几毫秒后中断get()调用。

如果使用Java,则使用setScriptTimeout()

如果使用PHP,我将此函数添加到WebDriver.php,它对我有用:

/**
 * Set wait for a page to load.
 * 
 * @param Number $waitTimeout Number of milliseconds to wait.
 */
public function setPageLoadTimeout($waitTimeout) {
    $request = $this->requestURL . "/timeouts";        
    $session = $this->curlInit($request);
    $args = array('type'=>'page load', 'ms' => $waitTimeout);
    $jsonData = json_encode($args);
    $this->preparePOST($session, $jsonData);
    curl_exec($session);        
}


参考:http://code.google.com/p/selenium/wiki/JsonWireProtocol#/session/:sessionId/超时

评论


对不起,编辑;根据您的建议修改了代码。

–巴拉特鬃毛
17年9月14日在8:40