2016-08-03 53 views
0

enter image description here我正在進行自動化測試。在我們的應用程序中,所有錯誤消息將在頁面頂部顯示爲「Flash消息」,它將顯示幾秒鐘。這些消息是在點擊頁面上的「下一步」按鈕或「提交」按鈕後發出的。如何識別頁面上顯示的「Flash消息」錯誤

要找到該元素,這是不可能的。因爲元素路徑將僅在那一刻顯示。我們無法驗證。

當顯示的錯誤,我複製錯誤的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,如何讓它等待一段時間,並基於你的測試的斷言框架,如何測試返回值是真還是假(我相信你知道的大部分,如果不是全部)。

+0

我很抱歉,我完全不理解你的答案。請你詳細解釋一下這個問題。 –

+0

我的另一個問題是,我們是否可以在硒webdriver angularjs? –

+0

對此的回答比評論還要長,我會編輯主帖 – Reza

相關問題