2016-09-22 26 views
0

私は以下のアラートを持っています。問題は、wait.until(ExpectedConditions.alertIsPresent())行のエラーがUnhandledAlertExceptionから返されていることです。ただし、画面上でトリガーされたアラートが表示されています。 UnhandledAlertExceptionを削除すると、UnhandledAlertExceptionというエラーが表示されます。これに対する解決策を提供してください、そして、何が起こったのか分かりますか? `アラートを処理する際の支援が必要です - アラートが存在するのを待っています&未処理のアラート例外

//Alert 
    Alert getAlert() { 
     try{ 
     Alert alert = driver.switchTo().alert(); 
     String alertCheck = alert.getText(); 
     this.bcase = true; 
     System.out.println(alertCheck); 
     if(alertCheck.equals("Define higher than 0 quantity for all products")){ 
      m.print("Correct error message appeared! User cannot advance further!"); 
     } else if(alertCheck.equals("Invalid Payment Document Number")){ 
      m.print("Correct error message appeared! User cannot advance further!"); 
     }else if (alertCheck.equals("Define rates for all products")){ 
      m.print("Correct error message appeared! User cannot advance further!"); 
     } else if (alertCheck.equals("Define delivery dates for all products")){ 
      m.print("Correct error message appeared! User cannot advance further!"); 
     } else if(alertCheck.equals("NOT IMPLEMENTED YET - WAITING DELIVERY DOC INPUT")){ 
      m.print("Correct error message appeared! User cannot advance further!"); 
     }else if (alertCheck.equals("You must upload an invoice file!")){ 
      m.print("Correct error message appeared! User cannot advance further!"); 
     } else if (alertCheck.equals("You must upload a payment order file!")){ 
      m.print("Correct error message appeared! User cannot advance further!"); 
     } else if (alertCheck.equals("Invalid Payment Document Date")){ 
      m.print("Correct error message appeared! User cannot advance further!"); 
     } else if (alertCheck.equals("Invalid Payment Document Number")){ 
      m.print("Correct error message appeared! User cannot advance further!");} 
     else if (alertCheck.equals("Invalid Payment Document Date")){ 
      m.print("Correct error message appeared! User cannot advance further!");} 
     else if(driver.findElement(By.xpath("//*[@class='btn pull-left btn-default input-sm'][text()='Open Order Request']")).isDisplayed()){ 
      this.bcase = false; 
      m.print("(FAIL!!!) The user can advance with unselected/wrongly completed fields, even though an error message is present! (FAIL!!!)"); 
     } else {m.print("(FAIL!!!) The user cannot advance, but there is no pop-up message informing him of the problem! (FAIL!!!)");} 
     driver.switchTo().alert().accept(); 
     return alert; 
     } catch (NoAlertPresentException e){ 
      m.print("(FAIL!!!) The user can advance with wrongly completed fields, without any error popup to inform them! (FAIL!!!)"); 
      this.bcase = false; 
      return null; 
     } catch (UnhandledAlertException f){ 
      wait.until(ExpectedConditions.alertIsPresent()); 
      Alert alert = driver.switchTo().alert(); 
      String alertCheck = alert.getText(); 
      if (alertCheck.equals("You must upload an invoice file! You must upload a payment order file!")){ 
       m.print("Correct error message appeared! User cannot advance further!"); 
      } else if(driver.findElement(By.xpath("//*[@class='btn pull-left btn-default input-sm'][text()='Open Order Request']")).isDisplayed()){ 
       this.bcase = false; 
       m.print("(FAIL!!!) The user can advance with unselected/wrongly completed fields, even though an error message is present! (FAIL!!!)"); 
      }driver.switchTo().alert().accept();return null; 
     } 
    } 

`

+0

をテストし 'switch'代わりに大きな'場合/他if'ブロックの使用を検討してください。これにより、コードをはるかに読みやすく保守しやすくなります。 また、これは定型的なコード 'm.print("正しいエラーメッセージが表示されました。ユーザーはさらに進めません! ");'文章の前に 'String message'オブジェクトを作成し、' m.print ); '。 – JDelorean

+0

そして、このテストではどうなるのですか?else if(driver.findElement(By.xpath( "* * [@ class = 'btnプル - 左btn-デフォルト入力-sm'] [text()= 'Open Order Request' ] "))。isDisplayed()){ this.bcase = false; m.print( "(FAIL !!!)エラーメッセージが表示されているにもかかわらず、未選択/間違って完了したフィールドで進めることができます(FAIL !!!)"); '?私はalertCheckの後に切り替えるので、それはalertCheckステートメントではありません。また、例外を「ケース」シナリオにどのように統合するのですか? – Tudor

+0

alertcheck以外の部分を 'switch'文のdefaultセクションの下に置くことができます。例外はうまくいきますが、彼らは現在と同じように 'switch 'とまったく同じように動作するはずです。 – JDelorean

答えて

0

私は警告を処理するためのより良いアプローチは、最初に表示されるように警告を待って、そしてそれを扱うよりも、あると思います。あなたは、この二つの方法で、これを行うことができます:セレンと

public boolean checkNativeAlert() { 
    boolean exist = false; 

    try { 
     WebDriverWait wait = new WebDriverWait(webDriver, 3); 
     if(!(wait.until(ExpectedConditions.alertIsPresent()) == null)) { 
      exist = true; 
     } 
    } 
    catch (Exception ignore) {} 

    return exist; 
} 

public String getNativeTextAlert(boolean close) { 
    String text = null; 
    try { 
     Alert alert = webDriver.switchTo().alert(); 
     text = alert.getText(); 
     if (close) { 
      alert.accept(); 
     } 
    } 
    catch (Exception ignore) {} 

    return text; 
} 

ハンドルアラート私の視点から、少しトリッキーです。この二つの他のオプションを使用優れている:ダイアログをモーダル

  • 変更アラート(デバッグ/テストモードで少なくとも)
  • 使用のAutoItはセレンでアラートを処理する
+0

上記の例では、どこでも初期化されているとは限りませんが、closeのみがnull値を持つと思います。 – Tudor

+0

close関数のパラメータです – vbail

関連する問題