我正在使用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显然在代码中,但由于某种原因它没有被访问。我的功能是否正确实施?我已经尝试了不同的方法来找到我需要的输入,例如嵌套定位器,但没有任何工作。
非常感谢任何帮助!
答案 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.)基于索引而不是定位器切换帧上下文。