【问题标题】:Switching back from iframe to Angular App isn't working for me从 iframe 切换回 Angular App 对我不起作用
【发布时间】: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


【解决方案1】:

通过等待 iframe 过时,问题得到解决。也许即使页面发生变化,iframe 仍然位于元素之上。无论如何,这段代码是修复...

// 4) Check for example with Protractor expectedConditions if the iframe is gone
var EC = protractor.ExpectedConditions;
// Waits for the ifram to be no longer present on the dom.
browser.wait(EC.stalenessOf($('iframe')), 5000);

由于这个帖子的答案而获得信用...Detecting Whether An Iframe Is Angular Or Not With Protractor

【讨论】:

    【解决方案2】:

    试试

    browser.driver.switchTo().defaultContent();
    

    而不是

    browser.switchTo().defaultContent();
    

    我认为您没有成功切换回默认内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-22
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      相关资源
      最近更新 更多