【发布时间】:2018-07-17 21:39:37
【问题描述】:
我已经尝试了许多关于堆栈溢出的示例,用于使用 protractorjs 切换到 iframe,到目前为止,它们都没有为我工作。我希望其他人遇到过这个问题,可以给我一些见解。
我的问题:我可以填写 WorldPay iframe 上的所有字段并单击提交,但在切换回 Angular 应用程序时找不到任何元素。
请参阅下面的示例代码示例,该示例在代码的最后一行返回 No Element Found 异常...
browser.waitForAngular();
browser.ignoreSynchronization=true;
browser.switchTo().frame(element(by.tagName('iframe')).getWebElement());
element(by.css("input[data-worldpay='name']")).sendKeys("MR TEST ACCOUNT");
element(by.css("input[data-worldpay='number']")).sendKeys("5555555555554444");
element(by.css("input[data-worldpay='exp-month']")).sendKeys("02");
element(by.css("input[data-worldpay='exp-year']")).sendKeys("2022");
element(by.css("input[data-worldpay='cvc']")).sendKeys("123");
element(by.id("_el_button_save")).click();
browser.switchTo().defaultContent();
browser.waitForAngular();
browser.ignoreSynchronization=false;
element(by.id("button_confirm")).click();
我尝试过的其他方法
- 我也尝试过使用 browser.waitForAngularEnabled(false) 然后 browser.waitForAngularEnabled(true) 导致同样的问题
- 在等待重新启用 Angular/将 ignoreSynchronization 设置为 false 之后,我尝试切换到 defaultContent
- 而不是使用“browser.switchTo().defaultContent();”使用“browser.switchTo().frame(element(by.tagName('button_confirm')).getWebElement());”产生相同的结果
【问题讨论】:
-
this 可以帮到你。
-
@Murthi 当我尝试开始使用该解决方案时,我得到了这个异常“protractor.getInstance 不是函数”
-
如果你在脚本运行时观察浏览器,代表这个 iframe 的“对话框”真的消失了吗?只是想知道该测试帐户信息是否真的被接受。对于您传入的数据,应用程序实际上是否处于您期望的状态?
-
@BreaksSoftware 是的,确实如此,我已经调试过了,它应该点击的按钮完全可见,并且 iframe 确实消失了(因为它在最后一个屏幕上)
-
由于某种原因量角器在选择器的前面放了一个“\”。这可能是问题:“No element found using locator: By(css selector, *[id="\#button_confirm"])”
标签: javascript angular selenium iframe protractor