7

これを無効にする方法を知っている人はいますか?または、自動的に受け入れられたアラートからテキストを取得する方法は?

このコードは機能する必要があり、

driver.findElement(By.xpath("//button[text() = \"Edit\"]")).click();//causes page to alert() something
Alert alert = driver.switchTo().alert();
alert.accept();
return alert.getText();

しかし、代わりにこのエラーが発生します

No alert is present (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 2.14 seconds

Selenium 2.32でFF 20を使用しています

4

5 に答える 5

2

accept() アラートを受け取る前に、テキストを取得する必要があります。あなたが今行っていることは、アラートを受け入れて (「OK」をクリックして)、アラート画面から消えた後にアラート テキストを取得しようとすることです。つまり、アラートは存在しません。

次のことを試してください。アラート テキストを取得し、代わりにその文字列を返す文字列を追加しました。

driver.findElement(By.xpath("//button[text() = \"Edit\"]")).click();//causes page to
Alert alert = driver.switchTo().alert();
String alertText = alert.getText();
alert.accept();
return alertText;
于 2013-05-08T19:02:11.053 に答える
1

Selenium webdriver は、アラートには対応していませんwait。そのため、存在しないアラートに切り替えようとするため、失敗します。

迅速であまり良くない修正を行うには、sleep.

より良い解決策は、アラートへの切り替えを試行する前に、独自のアラート待機メソッドを実装することです。

アップデート

こんな感じで、ここからコピペ

waitForAlert(WebDriver driver)
{
    int i=0;
   while(i++<5)
   {
        try
        {
            Alert alert3 = driver.switchTo().alert();
            break;
        }
        catch(NoAlertPresentException e)
        {
          Thread.sleep(1000)
          continue;
        }
   }
}
于 2013-05-08T19:31:29.150 に答える
1

同期オプションを使用した次の方法により、安定性が向上します

protected Alert getAlert(long wait) throws InterruptedException
{
    WebDriverWait waitTime = new WebDriverWait(driver, wait);

    try
    {
        synchronized(waitTime)
        {
            Alert alert = driver.switchTo().alert();
            // if present consume the alert
            alert.accept();

            return alert;
        }

    }
    catch (NoAlertPresentException ex)
    {
        // Alert not present
        return null;
    }

}
于 2013-08-28T05:55:05.687 に答える