我的應用程序使用與Selenium 2驅動程序貂皮。當我嘗試加載頁面時加載緩慢的一些資源(或根本不加載),應用程序會無限等待,直到加載所有內容爲止。我如何設置Selenium 2驅動程序的貂皮頁面加載超時?
因爲我在我的應用程序中有幾百次迭代 - 你可以想象腳本執行了多長時間。
問題:有沒有可能設置頁面加載超時?並在該期間沒有加載頁面時拋出一些異常?
在此先感謝!
我的應用程序使用與Selenium 2驅動程序貂皮。當我嘗試加載頁面時加載緩慢的一些資源(或根本不加載),應用程序會無限等待,直到加載所有內容爲止。我如何設置Selenium 2驅動程序的貂皮頁面加載超時?
因爲我在我的應用程序中有幾百次迭代 - 你可以想象腳本執行了多長時間。
問題:有沒有可能設置頁面加載超時?並在該期間沒有加載頁面時拋出一些異常?
在此先感謝!
要設置超時時間爲硒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
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']
);
}
不幸的是我沒有一個工作示例如何將其整合到您的上下文。
謝謝你,t3node :)但問題在這裏:$ this-> session = new \ Behat \ Mink \ Session($ driver); $ this-> session-> start(); $ this-> session-> visit('some URL') - 當訪問被執行時 - 在加載頁面之前,您無法執行任何操作。並且您建議的決定可以在頁面加載後應用。一些硬頁面(在弱服務器上)可以加載很長時間。我想控制這一點。 – Axarsu
,請使用以下三種功能於你的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);
}
謝謝,納文!但我不是在談論Selenium IDE。我使用Selenium WebDriver。 – Axarsu
我是新來的硒,所以我現在不是那個時候的硒2。對不起.... :) –
我希望這一次你得到你的答案。 –