Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从iframe切换回Angular应用程序不是';他不为我工作_Javascript_Angular_Selenium_Iframe_Protractor - Fatal编程技术网

Javascript 从iframe切换回Angular应用程序不是';他不为我工作

Javascript 从iframe切换回Angular应用程序不是';他不为我工作,javascript,angular,selenium,iframe,protractor,Javascript,Angular,Selenium,Iframe,Protractor,我已经尝试了许多使用GragratorJS切换到iframe的堆栈溢出示例,到目前为止,没有一个对我有效。我希望其他人也遇到过这个问题,他们可能会给我一些见解 我的问题:我可以填写WorldPay iframe上的所有字段并单击提交,但在切换回angular应用程序时,我找不到任何元素 请参阅下面我的示例代码示例,该示例在代码的最后一行返回“未找到元素”异常 browser.waitForAngular(); browser.ignoreSynchronization=true; browser

我已经尝试了许多使用GragratorJS切换到iframe的堆栈溢出示例,到目前为止,没有一个对我有效。我希望其他人也遇到过这个问题,他们可能会给我一些见解

我的问题:我可以填写WorldPay iframe上的所有字段并单击提交,但在切换回angular应用程序时,我找不到任何元素

请参阅下面我的示例代码示例,该示例在代码的最后一行返回“未找到元素”异常

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(元素(按.tagName('button_confirm')))).getWebElement()”,这会产生相同的结果

通过等待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);
由于这篇文章的回答

试试看

browser.driver.switchTo().defaultContent();
而不是

browser.switchTo().defaultContent();

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

可能会对您有所帮助。@Murthi我在尝试开始使用该解决方案时遇到了一个异常“Gragrator.getInstance不是函数”。如果您在脚本运行时观察浏览器,表示此iframe的“对话框”是否真的消失了?只是想知道测试帐户信息是否被接受。应用程序与您传递的数据是否真的处于您期望的状态?@BreaksSoftware确实如此,我已经调试完毕,它应该单击的按钮处于完全可见状态,iframe确实消失了(因为它在最后一个屏幕上)由于某种原因,量角器在选择器的前面放了一个“\”。这可能是一个问题:“使用locator:By(css选择器,*[id=“\\按钮\确认”])找不到元素”