我的应用程序使用Mink和Selenium 2驱动程序。当我尝试加载一些加载缓慢(或根本不加载)的资源的页面时,应用程序会无限期地等待,直到所有内容都被加载。
因为我在我的应用程序中有几百次迭代 - 你可以想象脚本执行了多长时间。
问题:是否有可能设置加载页面的超时?如果在此期间未加载页面,则抛出一些异常?
提前感谢!
答案 0 :(得分:1)
答案 1 :(得分:-1)
要为 selenium ide 中的页面加载设置超时,请按以下步骤操作:
1。打开selenium ide。
2. 点击选项菜单。
3. 在常规标签中,更改记录命令的defult超时值。
![点击选项菜单后的Selenium ide图像] [1]
在 selenium 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
答案 2 :(得分:-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);
}
答案 3 :(得分:-2)
Behat documentation建议在您的上下文中使用自定义spin()函数。
以下spin()函数示例取自behat文档:
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']
);
}
不幸的是,我没有一个工作示例如何将其集成到您的上下文中。