2016-08-03 8 views
0

enter image description here Ich arbeite an Automatisierungstests. In unserer Anwendung werden alle Fehlermeldungen als "Flash-Nachrichten" oben auf der Seite angezeigt, sie werden für einige Sekunden angezeigt. Diese Nachrichten erscheinen, nachdem Sie auf "Weiter" oder "Senden" auf der Seite geklickt haben.So identifizieren Sie "Flash-Nachricht" Fehler auf der Seite angezeigt

Um dieses Element zu finden, ist es nicht möglich. weil der Elementpfad nur für diesen Moment angezeigt wird. Wir können es nicht verifizieren.

<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> 

Pfad wie wie unten sein Element wird:

Wenn dieser Fehler angezeigt wird, ich die html des Fehlers kopiert, wird der HTML-wie unten sein, das Bild sehen

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

Bitte angebracht.

Bitte helfen Sie mir, wie durch Selenium Script zu überprüfen, wird dieser Fehler angezeigt oder nicht.

Dank Sarada

Antwort

0

Die Art, kommt meiner Meinung nach die browser.executeScript() Funktion zu verwenden ist, den Umfang des Zielelements zu beobachten (angular.element().scope() verwenden, den Umfang zu erhalten)

einmal $ Uhr ausgelöst wird, Sie wissen, dass es Zeit ist, nach der Anwesenheit Ihres Div zu suchen.

** Update: ** hier sind ein Beispiel, das zeigt, wie ein Javascript-Schnipsel mit Selen WebDriver auszuführen: https://www.mkyong.com/selenium/how-to-execute-javascript-in-selenium-webdriver/

AngularJS ist eine JavaScript-Framework, so, in dem obigen Beispiel, wenn Sie auf einer Seite gehen das hat eckig, dann kannst du angular verwenden.

Dies fügt dem Bereich eine Überwachung hinzu, die ein Flag setzen würde, wenn sich der Inhalt ändert. Bei dieser Änderung wird entweder das starke Element unter dem Alert-Container div angezeigt oder nicht, und es wird in der Flagge angezeigt. so, das nächste, was zu tun ist Selen zu verwenden, um eine Aktion auszuführen, die die div angezeigt werden sollen, und lesen Sie die Flagge:

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

Hinweis ein paar Tricks:

  • ich setTimeout verwenden, damit der Div Zeit hat zu zeigen und der Digest-Zyklus abgeschlossen werden kann. Möglicherweise müssen Sie das Zeitintervall von 100 Millisekunden erhöhen.
  • Ich lösche die Oszilloskopuhr am Ende des Tests.
  • In unserem Test müssen wir darauf warten, dass sich alles beruhigt. Abhängig von der Sprache, die Sie verwenden, müssen Sie möglicherweise etwas anderes als driver.sleep() warten, bevor Sie das Flag überprüfen.

Ich hoffe, es zeigt Ihnen den Kern dessen, was getan werden kann. Suchen Sie ein wenig, um zu sehen, wie Sie das executeScript in webdriver für die von Ihnen verwendete Sprache ausführen, wie Sie es einige Zeit warten lassen und wie Sie auf der Grundlage des Assertion Framework testen, ob der Rückgabewert wahr oder falsch ist (Ich bin mir sicher, dass du das meiste weißt, wenn nicht alles.

+0

Es tut mir sehr leid, ich habe deine Antwort nicht vollständig verstanden.Kannst du das bitte im Detail erklären? –

+0

Meine andere Frage ist hier, ob wir anglinjs in selen webdriver können? –

+0

Antwort zu diesem ist länger als ein Kommentar, ich werde den Hauptbeitrag bearbeiten – Reza