未找到量角器iframe元素/不可见

时间:2016-10-05 01:37:51

标签: javascript angularjs iframe protractor

我正在使用Protractor编写e2e测试,该测试需要访问Angular 2应用程序中的iframe元素。

我相信我已成功切换到iframe,但出于某种原因,我希望选择的元素在我的测试中引发错误"没有找到css id selector的元素....&#34 ;或"元素不可见。"

这是我的代码:

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显然在代码中,但由于某种原因它没有被访问。我的功能是否正确实施?我已经尝试了不同的方法来找到我需要的输入,例如嵌套定位器,但没有任何工作。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分: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。它也发生在我身上,因为我正在使用具有相同定位属性的错误元素。

希望有所帮助

答案 1 :(得分: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.)基于索引而不是定位器切换帧上下文。