2016-10-05 41 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,因为在第一行我首先点击它。 –