2013-04-12 82 views
3

我的應用程序使用與Selenium 2驅動程序貂皮。當我嘗試加載頁面時加載緩慢的一些資源(或根本不加載),應用程序會無限等待,直到加載所有內容爲止。我如何設置Selenium 2驅動程序的貂皮頁面加載超時?

因爲我在我的應用程序中有幾百次迭代 - 你可以想象腳本執行了多長時間。

問題:有沒有可能設置頁面加載超時?並在該期間沒有加載頁面時拋出一些異常?

在此先感謝!

回答

-1

要設置超時時間爲硒IDE中裝入的頁面請按照下列步驟操作:

1.打開硒IDE。

2.點擊選項菜單。

3.在一般標籤中更改記錄命令的defult超時值。 !

[硒點擊選項菜單後IDE圖像] [1]

硒2使用此功能

WebDriver driver = new FirefoxDriver(); 
driver.get("http://somedomain/url_that_delays_loading"); 
WebElement myDynamicElement = (new WebDriverWait(driver, 10)) 
    .until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement"))); 

試試這個

private $timeout = 60000; 


public function reload() 
    { 
     $this->browser 
      ->refresh() 
      ->waitForPageToLoad($this->timeout) 
     ; 
    } 
    [1]: h 

TTP: //i.stack.imgur.com/0NKoC.png

+0

謝謝,納文!但我不是在談論Selenium IDE。我使用Selenium WebDriver。 – Axarsu

+0

我是新來的硒,所以我現在不是那個時候的硒2。對不起.... :) –

+0

我希望這一次你得到你的答案。 –

-2

Behat documentation建議在您的上下文中使用自定義spin()函數。

下旋()函數,例如從貝哈特資料爲準:

public function spin ($lambda, $wait = 60) 
{ 
    for ($i = 0; $i < $wait; $i++) 
    { 
     try { 
      if ($lambda($this)) { 
       return true; 
      } 
     } catch (Exception $e) { 
      // do nothing 
     } 

     sleep(1); 
    } 

    $backtrace = debug_backtrace(); 

    throw new Exception(
     "Timeout thrown by " . $backtrace[1]['class'] . "::" . $backtrace[1]['function'] . "()\n" . 
     $backtrace[1]['file'] . ", line " . $backtrace[1]['line'] 
    ); 
} 

不幸的是我沒有一個工作示例如何將其整合到您的上下文。

+0

謝謝你,t3node :)但問題在這裏:$ this-> session = new \ Behat \ Mink \ Session($ driver); $ this-> session-> start(); $ this-> session-> visit('some URL') - 當訪問被執行時 - 在加載頁面之前,您無法執行任何操作。並且您建議的決定可以在頁面加載後應用。一些硬頁面(在弱服務器上)可以加載很長時間。我想控制這一點。 – Axarsu

-1

,請使用以下三種功能於你的Featurecontext.php

public function spin($lambda, $retries,$sleep) { 
do { 
$result = $lambda($this); 
} while (!$result && --$retries && sleep($sleep) !== false); 


} 
public function find($type, $locator, $retries = 20, $sleep = 1) { 
return $this->spin(function($context) use ($type,$locator) { 

$page = $context->getSession()->getPage(); 
if ($el = $page->find($type, $locator)) { 
    if ($el->isVisible()) { 
     return $el->isVisible(); 
    } 
} 
return null; 
}, $retries, $sleep); 

}

/** 
* Wait for a element till timeout completes 
* 
* @Then /^(?:|I)wait for "(?P<element>[^"]*)" element$/ 
*/ 
public function iWaitForSecondsForFieldToBeVisible($seconds,$element) { 

    //$this->iWaitSecondsForElement($this->timeoutDuration, $element); 
$this->find('xpath',$element); 
} 
1

根據this article你可以做這樣的:

$driver->setTimeouts(['page load' => 10000]); 

此超時是毫秒。

相關問題