失败:元素不可见(Protractor AngularJS)

时间:2017-09-15 19:02:50

标签: html angularjs protractor

显然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>

有人能帮帮我吗?

2 个答案:

答案 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;方式。