1

Firefox 11 + WebDriver 2.21.0 / WebDriver 2.22.0を使用しています(両方を試しました)。

私のシナリオでは、タブをクリックすると確認ボックスが開き、クリックするOKとサーバーから新しいタブの読み込みが開始されます。

したがって、私はこのシナリオを次のように処理しています。

driver.findElement(By.id("myTab")).click();
driver.switchTo().alert().accept();

ただし、「mytab」をクリックすると、ウィンドウが無期限にロードされるのを待ちます。そのためalert.accept()、ブラウザは新しいページをロードするための確認ダイアログを受け入れるのを待っているので、デッドロック状態になります。

このコードはInternetExplorerでうまく機能します。

助けてください、状況に対処する方法は?

4

1 に答える 1

0

Selenium WebDriver でバグ (または少なくとも矛盾) を発見した可能性があります。

以前に見つかったかどうかをここで確認し、そのようなバグがない場合は、気軽にファイルしてください。

それまでの間、 「不安定」なロード方法でロードFirefoxDriverを試してから、(それが十分でない場合) 可能性がありますdriver.manage().timeouts().pageLoadTimeout()(「不安定」設定の Firefox でのみ機能します)。

回避策として、JavaScript を使用してタブをクリックしてみてください。ただし、動作するかどうかはわかりません。

((JavascriptExecutor)driver).executeScript("document.getElementById('myTab').click()");


編集:

別の回避策(Selenium RCに触発された)としてできることは、確認ダイアログを一時的に無効にすることができます...

// assuming your driver can handle JS ;)
JavascriptExecutor js = (JavascriptExecutor)driver;

// stores the original confirm() function and replaces it
js.executeScript("window.originalConfirm = window.confirm;" 
        + "window.confirm = function(m) { return true; };");

driver.findElement(By.id("myTab")).click();
// it should not even fire the confirm and just proceed

// get the confirm back
js.executeScript("window.confirm = window.originalConfirm;");
于 2012-06-09T00:50:51.413 に答える