2017-09-15 72 views
0

显然,量角器无法在我的应用程序的菜单中找到此元素,上面的元素都可以。我的代码是:失败:元素不可见(量角器AngularJS)

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

你需要代码来等待元素可见(存在于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(); 
} 
+0

如果您能够解释如何/为何解决问题,这将是一个更好的答案。 –

+0

browser.wait(condition,timeout,timeout_message);用于在超时时间内等待某些条件为真,如果在超时之前条件不成立,则会抛出超时消息; EC.visibilityOf(元素)检测元素是可见的。 – yong

+0

有没有可能向下滚动?我怎么能这样做?在超时内条件不成立。 –

0

分析:
你的代码有错误的

if (prodLink.isPresent()) 

正如我们所知道的所有量角器API是异步和返回的承诺。当Javascript Enginee执行这一行时,Javascript得到的承诺对象不是布尔值,实际上这个IF语句总是为真,因为承诺对象不为空,并且量角器很可能没有检测到页面上的链接,因为所有与页面是异步。

解决方案:
正确的代码如下:

this.openMenu("toogleMenuButton") 
let prodLink = element(by.id("menu12")); 

prodLink.isPresent().then(function(present){ 
    if(present) { 
    prodLink.click(); 
    return true; 
    } 
    return false; 
}); 

我的代码只是想指出你的错误,在编码点击链接应该为“三社Paskova”方式的正确方法。

相关问题