2016-10-05 43 views
0

我正在用量角器編寫e2e測試,需要訪問Angular 2應用程序中的iframe元素。量角器iframe元素未找到/不可見

我相信我已經成功切換到iframe,但由於某種原因,我希望選擇的元素在我的測試中拋出一個錯誤:「沒有找到與CSS ID選擇器....」或「元素是不可見。」

這裏是我的代碼:

this.fillOutInfo = function(input){ 

this.selectBox.click().then(function(){ 
    browser.switchTo().frame(this.selectBox) 
    .then(function(){ 
     browser.findeElement(by.id('recurly-hosted-input-field')).sendKeys(input) 
     .then(function(){ 
      browser.switchTo().defaultContent(); 
      }) 
     }) 
     }) 
    } //selectBox references the iframe element within the DOM 

的ID上面是明顯存在的代碼時,我檢查元素,但由於某種原因它不被訪問。我的功能是否執行不正確?我已經嘗試了不同的方法來查找我需要的輸入,例如嵌套定位器,但沒有任何工作。

任何幫助非常感謝!

+0

在嵌套的'then'中有你的console.log嗎?如何解決量角器中的承諾? –

+0

你已經提到了'browser.findeElement'。這是一個錯字嗎? –

+0

@SudharsanSelvaraj是的,對不起,這是在stackoverflow錯字,而不是在實際的代碼 –

回答

0

一些更多的研究和實驗後,我到達爲我工作的解決方案。那就是:

this.fillOutInfo = function(input){ 

this.selectBox.click().then(function(){ 
    browser.ignoreSynchronization = true; 
    browser.switchTo().frame(0) 
    .then(function(){ 
     element(by.id('recurly-hosted-input-field')).sendKeys(input) 
     .then(function(){ 
      browser.switchTo().defaultContent(); 
      }) 
     }) 
     }) 
    } 

我覺得兩兩件事是:1)將ignoreSyncronization和2)基於索引的,而不是定位器開關框架背景。

1

如果沒有指出由sudharsan selvaraj一個錯字的錯誤,然後嘗試

element.all(by.id('recurly-hosted-input-field')).count().then(function(count) { 
console.log("Number of elements with same id: " + count);}); 

這會讓你知道很多元素如何在那裏用相同​​的ID。它也發生在我身上,因爲我正在使用具有相同定位屬性的錯誤元素。

希望它可以幫助

+0

感謝您的答覆在這裏。我應該在前面提到過,有多個iframe,但在每個iframe中,只有一個標籤具有上述id。我知道我選擇了正確的iframe,因爲在第一行我首先點擊它。 –