私はこのページを経由して行くいくつかのユーザーフローを自動化しましたhttp://www.efinancialcareers.co.uk/search。 左側のリファインレールを使用して検索を絞り込むと、ユーザーが検索結果が返されるまで待たなければならないオーバーレイが表示されます。このメソッドはオーバーレイが表示されるのを待ち、それが消えるのを待ちます。Webdriver FluentWaitは例外を無視しません
public void waitForSRPOverlayToComplete() {
Wait<WebDriver> wait = new FluentWait<WebDriver>(getDriver())
.withTimeout(5, TimeUnit.SECONDS)
.pollingEvery(1, TimeUnit.NANOSECONDS)
.ignoring(NoSuchElementException.class)
.ignoring(TimeoutException.class);
**// Error occurs here**
WebElement blockedOverlay = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.className("blockOverlay"));
}
});
Wait<WebDriver> wait2 = new FluentWait<WebDriver>(getDriver())
.withTimeout(5, TimeUnit.SECONDS)
.pollingEvery(1, TimeUnit.NANOSECONDS)
.ignoring(NoSuchElementException.class)
.ignoring(TimeoutException.class);
wait2.until(ExpectedConditions.stalenessOf(blockedOverlay));
}
時には、要素(blockOverlay)が見つからないためタイムアウト例外が発生することがあります。私はこれが発生し、オーバーレイが表示されたときにページを観察したが、私は時には検索が非常に高速であると思う。 私は技術的なエラーをなぜ私は理解していない私は彼らを無視するために流暢な待っていると言いました。
これは、オーバーレイを作るためのコードですが表示されます。
$('body').block({
message: $('#loaderEl'),
css: {
backgroundColor: 'transparent',
border: "none",
color: '#333333',
fontWeight: 'bolder',
top: ($(window).height() - $('#loaderEl').height())/2 + $(window).scrollTop() + "px"
},
overlayCSS: {
backgroundColor: '#f8f8f8'
},
centerY: false
});
し、それを
$('body').unblock();
を削除する。これは、エラーである私が受け取る:
Caused by: org.openqa.selenium.TimeoutException: Timed out after 5 seconds waiting for [email protected]
Build info: version: '2.35.0', revision: '8df0c6bedf70ff9f22c647788f9fe9c8d22210e2', time: '2013-08-17 12:46:41'
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.6.0_26'
Driver info: driver.version: unknown
... 33 more
Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"class name","selector":"blockOverlay"}
任意のヘルプまたは提案をいただければ幸いです。
コードがどのように「複雑」なのかよく分かりません。 timeoutが評価されると( 'if(!clock.isNowBefore(end))')、timeoutが期限切れになった場合、 'timeoutException()'という名前のクラス内の別のメソッドから返された値である 'TimeoutException'を投げます。 。このメソッドは、前の例外処理ブロックでキャッチされた実際の例外を引数として取り込みます。このコードブロックはtry-catchの外にあり、指定された型の例外を無視するコードの影響を受けないことに注意してください。 – JimEvans
@ JimEvans - ありがとう。あまりにも早く反応した。私は静かにしてコードをすばやくスキャンし、自分の答えを編集しました。コードは私が思ったほど難解ではありません。 – testerjoe2