如何识别" Flash消息"页面上显示错误

时间:2016-08-03 11:14:39

标签: selenium

enter image description here我正在进行自动化测试。在我们的应用程序中,所有错误消息都将显示为" Flash Messages"在页面顶部,它将显示几秒钟。点击“下一步”后会显示这些消息。按钮或'提交'页面上的按钮。

要找到该元素,这是不可能的。因为元素路径只会在那一刻显示出来。我们无法验证。

当显示错误时,我复制了错误的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

1 个答案:

答案 0 :(得分:0)

我想到的方法是使用browser.executeScript()函数来观察目标元素的范围(使用angular.element().scope()来获取范围)

一旦触发$ watch,您就知道是时候检查div的存在了。

**更新:**这是一个示例,演示了如何使用Selenium webdriver执行javascript片段:https://www.mkyong.com/selenium/how-to-execute-javascript-in-selenium-webdriver/

angularJs是一个javascript框架,因此,在上面的示例中,如果您转到具有角度的页面,则可以使用angular。

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下显示强元素,并将反映在该标志中。 所以,接下来你要做的就是使用selenium来执行一个应该显示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,如何使它等待一段时间,并根据测试的断言框架,如何测试返回值是真还是假(我相信你知道的最多,如果不是全部的话。