我正在进行自动化测试。在我们的应用程序中,所有错误消息都将显示为" 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
答案 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();
注意几个技巧:
driver.sleep()
以外的其他操作。我希望它向您展示可以做的事情的关键。搜索一下,看看如何在webdriver中为你正在使用的语言运行executeScript,如何使它等待一段时间,并根据测试的断言框架,如何测试返回值是真还是假(我相信你知道的最多,如果不是全部的话。