如何识别页面上显示的“Flash消息”错误
我正在进行自动化测试。在我们的应用程序中,所有错误消息将在页面顶部显示为“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
是在我脑海中是使用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,如何让它等待一段时间,并基于你的测试的断言框架,如何测试返回值是真还是假(我相信你知道的大部分,如果不是全部)。
我很抱歉,我完全不理解你的答案。请你详细解释一下这个问题。 –
我的另一个问题是,我们是否可以在硒webdriver angularjs? –
对此的回答比评论还要长,我会编辑主帖 – Reza