私のアプリケーションは、Mink と Selenium 2 ドライバーを使用しています。読み込みが遅い(またはまったく読み込まれない)リソースを含むページを読み込もうとすると、アプリケーションはすべてが読み込まれるまで無限に待機します。
私のアプリケーションには数百回の反復があるため、スクリプトが実行される時間を想像できます。
質問: ページの読み込みにタイムアウトを設定する可能性はありますか? その期間中にページがロードされない場合、例外をスローしますか?
前もって感謝します!
私のアプリケーションは、Mink と Selenium 2 ドライバーを使用しています。読み込みが遅い(またはまったく読み込まれない)リソースを含むページを読み込もうとすると、アプリケーションはすべてが読み込まれるまで無限に待機します。
私のアプリケーションには数百回の反復があるため、スクリプトが実行される時間を想像できます。
質問: ページの読み込みにタイムアウトを設定する可能性はありますか? その期間中にページがロードされない場合、例外をスローしますか?
前もって感謝します!
Selenium ideでページの読み込みのタイムアウトを設定するには、次の手順に従います。
1. Selenium ide を開きます。
2.オプションメニューをクリックします。
3.一般的に、記録されたコマンドのデフォルトのタイムアウト値をタブで変更します。
![オプション メニューをクリックした後の Selenium 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
Featurecontext.php で以下の 3 つの関数を使用してください。
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);
}
Behatのドキュメントでは、コンテキスト内でカスタム 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']
);
}
残念ながら、これをコンテキストに統合する方法の実例はありません。