2016-08-03 7 views
0

enter image description here私は自動化テストを行っています。私たちのアプリケーションでは、すべてのエラーメッセージはページの上に「フラッシュメッセージ」として表示され、数秒間表示されます。これらのメッセージは、「次へ」ボタンまたは「送信」ボタンをクリックした後に表示されます。ページに表示される "Flash Message"エラーを確認する方法

その要素を見つけることはできません。要素パスはその瞬間にのみ表示されるからです。確認できません。そのエラーが表示さ

、私はエラーのHTMLをコピーし、HTMLは以下のようになります:

<document> 
    <html class="no-js" dir="ltr"> 
    <!--<![endif]--> 
    <head> 
    <body class="alert-open alert-with-am-fade-and-slide-top"> 
     <div class="page-wrapper"> 
      <spinner-overlay> 
      <navbar-panel class="ng-scope"> 
      <div class="container-main"> 
       <alerts-container class="alert-container"> 
       <div class="alert ng-scope top am-fade-and-slide-top alert-danger" ng-class="[type ? 'alert-' + type : null]" style="display: block;"> 
       <!-- ngIf: dismissable --> 
       <!-- ngIf: content | isArray:false --> 
       <div class="ng-scope" ng-if="content | isArray:false"> 
         <strong class="ng-binding" ng-bind="::title">Error[![enter image description here][1]][1]</strong> 
         <span class="ng-binding" ng-bind-html="content"/> 
       </div> 
       <!-- end ngIf: content | isArray:false --> 
      <!-- ngIf: content | isArray --> 
      </div> 
      </alerts-container> 
       <!-- /page wrapper --> 
     </div> 

要素パスは以下のようにのようになります。

html/body/div[1]/alerts-container/div/div 

は画像をご覧下さい添付。

このエラーが表示されるかどうかは、Selenium Scriptで確認する方法を教えてください。私の心に来る Sarada

答えて

0

の方法は、ターゲット要素の範囲を見るためにbrowser.executeScript()機能を使用することです

おかげで(スコープを取得するためにangular.element().scope()を使用)

$ウォッチがトリガされると、あなたはあなたのdivの存在を確認する時間だと知っています。

**更新:**ここセレンwebdriverをして​​JavaScriptのスニペットを実行する方法を示している例です。https://www.mkyong.com/selenium/how-to-execute-javascript-in-selenium-webdriver/

angularJsページに行けば、上記の例では、JavaScriptのフレームワークですので、角度がある場合は、角度を使用できます。

driver.executeScript('var element = document.querySelector(".page-wrapper .alert-container"); \ 
    var scope = angular.element(element).scope(); \ 
    window.MyDivIsShown = false; \ 
    window.MyDivWatch = scope.$watch(content,function(n,o){ \ 
     window.setTimeout(function(){ \ 
      if(n) \ 
      window.MyDivIsShown = !!document.querySelector(".alert-container strong") \ 
    },100);'); 

これにより、コンテンツが変更されたときにフラグを設定する時計がスコープに追加されます。その変更はalert-container divの下の強い要素を表示するか、フラグに反映されます。 ので、あなたは、次のものがdiv要素を表示し、フラグを読むべきアクションを実行するために、セレンを使用することです:

performActionThatshouldDisplayAlert(); 
driver.sleep(2000); //couple of seconds 
var returnValue = driver.executeScript("window.MyDivWatch(); \ 
    return window.MyDivIsShown;"); 
expect(returnValue).to.beTruthy(); 

注トリックのカップル:

  • 私はsetTimeoutメソッドを使用して、 divが表示され、ダイジェストサイクルが完了するようになります。 100ミリ秒の時間間隔を長くする必要があります。
  • テスト終了時にスコープウォッチをクリアします。
  • 私たちのテストでは、すべてが落ち着くのを待つ必要があります。使用している言語に基づいて、フラグを調べる前に待機するには、driver.sleep()以外の操作が必要な場合があります。

私はそれがあなたに何ができるのかを示してくれることを願っています。少し調べて、使用している言語のwebdriverでexecuteScriptを実行する方法、しばらく待つ方法、テストのアサーションフレームワークに基づいて、戻り値がtrueまたはfalseであるかどうかをテストする方法私はあなたがそのすべてではないにしてもほとんどを知っていると確信しています)。

+0

非常に申し訳ありませんが、私はあなたの答えを完全に理解できませんでした。詳しく説明してください。 –

+0

ここでもう一つ質問したいのは、セレンのwebdriverでanglejを使うことができるかどうかです。 –

+0

これはコメントよりも長いです、私はメインの投稿を編集します – Reza

関連する問題