我有以下不寻常的用例。我在下面详述
1)我在一个有角度的页面上&我在页面上执行了一些操作[它加载一个非角度的iFrame]
2)我切换到非角度iframe&与某些屏幕互动。
3)最终会导致重定向发生在角度页面上。
当我在第2步使用量角器时,我必须使用标志browser.ignoreSynchronization设置为false,因为它是非角度的。我需要一种方法来检查我与之交互的表单是否有角度,以帮助从步骤2)到3)的平滑过渡。
我知道您可以使用
在页面上自动检查角度功能browser.executeAsyncScript或browser.executeScript以及
!! window.angular(angular v1)
!! window.getAllAngularTestabilities(angular v2)
但是这并不适用于这个用例,因为无论您是否与非角度iframe交互,所有这些都将返回true。有人会有任何其他建议可能适用于这样的用例吗?非常感谢提前。
答案 0 :(得分:1)
当我需要自动化iframe时,我通常会执行以下操作
// 1) When you know the iframe is there
browser.switchTo().frame(0);
// 2 a) You don't need to disable the wait for anguler, just use vanila webdriver, it will work on both
browser.driver.findElement(by.css('.your-css-selector'));
// Do some more interaction
browser.driver.findElement(by.css('.input-css-selector')).sendKeys('type something');
browser.driver.findElement(by.css('.button-css-selector')).click());
// 2b) Or now just use the Protractor syntax,
// because you switched you should be able to use it now.
// 3) Switch back
browser.switchTo().defaultContent();
// 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.ignoreSynchronization = true;
我希望这会有所帮助