2016-08-03 52 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

相关问题