显然Protractor在我的应用程序的菜单中找不到这个元素,上面的元素都可以。我的代码是:
this.openMenu("toogleMenuButton")
let prodLink = element(by.id("menu12"));
if (prodLink.isPresent()) {
prodLink.click();
browser.sleep(500);
} else {
return false;
}
HTML代码为:
<a _ngcontent-c13=""
appaccordiontoggle=""
class="relative mat-ripple"
md-ripple=""
routerlinkactive="open"
style="margin-left: 47px"
ng-reflect-class-base="relative"
ng-reflect-router-link-active="open"
id="menu12">
<span _ngcontent-c13="">Produtos</span>
</a>
有人能帮帮我吗?
答案 0 :(得分:0)
您需要代码来等待元素可见(存在于DOM中并且也可见 - 高度和宽度大于0)。我等了30秒:
var EC = protractor.ExpectedConditions;
var prodlink = element(by.id('menu12'));
browser.wait(EC.visibilityOf(element(by.id('menu12'))), 30000, "prod link element is not visible").then(function() {
prodlink.click();
}
答案 1 :(得分:0)
分析:
if (prodLink.isPresent())
我们知道所有Protractor API都是异步并返回承诺。当Javascript Enginee执行此行时,Javascript获取promise对象而不是布尔值,实际上这个IF语句将始终为true,因为promise对象不为null,并且它很可能没有检测到页面中存在的链接,因为与页面的所有通信都是异步。
解决方案:
正确的代码如下:
this.openMenu("toogleMenuButton")
let prodLink = element(by.id("menu12"));
prodLink.isPresent().then(function(present){
if(present) {
prodLink.click();
return true;
}
return false;
});
我的代码只是为了指出你的错误,编码点击链接的正确方法应该是&#39; Sanja Paskova&#39;方式。