使用量角器检测iframe是否有角度

时间:2017-05-29 12:18:10

标签: javascript angularjs iframe protractor

我有以下不寻常的用例。我在下面详述

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。有人会有任何其他建议可能适用于这样的用例吗?非常感谢提前。

1 个答案:

答案 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;

我希望这会有所帮助