2017-09-15 49 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」方式的正確方法。

相關問題