2

フォームをテストしていますが、必要なデータを入力しないと、Web アプリで JavaScript アラートが表示され、不足しているデータを入力するようユーザーに指示されます。フォームに部分的に入力して送信しようとすると例外が発生するため、セレンではこれを処理できません

org.openqa.selenium.UnhandledAlertException: Modal dialog present

例外をキャッチすると、webdriver のアラートは表示されません。この問題を解決する解決策はありますか?フォームを送信してアラートをキャッチできるようにしたいと思います。Linux Mint、Firefox 18、および Selenium 2.28.0 を Java で使用しています よろしくお願いします UPDATE 私は自分のコードに従っています

somePage.fillName(sth); //only 1 of 2 required field are filled
somgePage.submit(); //here js alert is shown right after clicking submit
somePage.getCurrentAlert();
//here are code parts
public Alert getCurrentAlert(){
    return driver.switchTo().alert();
}
public AdminHome submit(){
        saveUrl();
        WebElement submit = driver.findElement(By.id("add_quiz_submit_button"));
        try{
            submit.click();
            if(urlChanged()){
                return new AdminHome(driver);
            }
        }
        catch(Exception e){
            e.printStackTrace();// exception 1
            return null;
        }
        return null;
    }
//Exception 1
org.openqa.selenium.UnhandledAlertException: Modal dialog present
//The test fails because of:
org.openqa.selenium.NoAlertPresentException: No alert is present (WARNING: The server did not provide any stacktrace information)

ただし、送信時に手動をクリックすると、期待どおりにテスト作業が行われます。前もって感謝します

4

3 に答える 3

1

アクションが完了したらすぐにアラートを処理する必要があり、アラートを処理する前に他のアクションを実行するべきではありません。

たとえば、コードは

 try{
        submit.click();
        if (alertPresent())
            getCurrentAlert();
        if(urlChanged()){
            return new AdminHome(driver);
        }
    }

これにより、アラートがチェックされ、アラートが受け入れられます。webdriver の操作は、ブラウザーで手動で操作する操作に似ています。そのため、送信をクリックするとアラートが表示され、それを受け入れるか拒否するまでアクションを実行できません。

ヴィシャール

于 2013-04-14T19:49:40.207 に答える
0

これは、UnhandledAlertException がスローされたときに、ドライバーがアラート自体を受け入れるためです。部分的に記入した場合、どのようにフォームを送信できますか?

可能であれば、その例外をキャッチし、catch ブロックに送信ボタンをクリックする行を記述します。

于 2013-03-05T09:14:11.263 に答える
-1

Robotクラス(Enterキーを押す)を使用してモーダルダイアログボックスを閉じます

 try {
        (new Robot()).keyPress(java.awt.event.KeyEvent.VK_ENTER);

         (new Robot()).keyRelease(java.awt.event.KeyEvent.VK_ENTER);
         } catch (AWTException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
于 2013-02-27T08:03:22.870 に答える