量角器:在Iframe

时间:2016-05-18 08:41:21

标签: javascript angularjs iframe protractor e2e-testing

我正在使用量角器版本3.3.0为我的非角度应用程序编写e2e测试。 我的应用程序在iframe中加载了另一个非Angular应用程序,并且我试图使用Protractor将测试编写到iframed-in。

我使用browser.driver.ignoreSynchronization = true:

尝试了上述操作

1

 var EC = protractor.ExpectedConditions;
 var button = $("div[automation-id='homescreen']")
 var isClickable = EC.elementToBeClickable(button);

 browser.wait(isClickable, 50000).then(function(){
      browser.driver.sleep(500);
      button.click();
 }) 

收到错误"失败:未知错误:元素在点(326,624)处无法点击..."

2

var loc = by.id('myFrame');
el = browser.driver.findElement(loc)
browser.driver.switchTo().frame(el);

收到错误"失败:没有这样的元素:无法找到元素:{"方法":" css选择器","选择器": " * [ID =" myFrame"]"}"

甚至认为el被成功检索出来..

3

browser.driver.switchTo().frame(0);

尝试使用索引1并收到"失败:没有这样的框架。"错误

4

browser.driver.getAllWindowHandles()

只收到一个窗口......

4 个答案:

答案 0 :(得分:0)

如果这是页面上唯一的iframe,则选项3看起来很有希望。在切换到它之前,我只是等待iframe出现:

// wait for the frame to be present
var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(element(by.tagName("iframe"))), 5000);

// switch to frame
browser.driver.switchTo().frame(0);

答案 1 :(得分:0)

切换到iframe

对于非角度页面

browser.driver.switchTo()defaultContent();

browser.driver.switchTo()。frame(" Frame id或classname");

答案 2 :(得分:0)

请尝试以下代码,iframe不属于角应用

browser.ignoreSynchronization = true;
return browser.switchTo().frame(iFrameEle.getWebElement())
            .then(function(){
                // in the iframe..

            })
            .then(function(){
                // restore sync for angular
                browser.ignoreSynchronization = false;
                return browser.switchTo().defaultContent();
            });

答案 3 :(得分:0)

var elem = element(by.xpath('.//div[contains(@id,\'contents\') and contains(@id,\'cke\')]/iframe'));
        browser.sleep(3000);
        elem.click();
        browser.switchTo().frame(elem.getWebElement());
        browser.sleep(3000);
        element(by.tagName('body')).sendKeys('test'); // entering text on iframe 
        browser.switchTo().defaultContent();
        browser.sleep(3000);

我在我的应用程序及其工作中使用了上述代码。希望它能帮到你。 我首先点击iframe,然后将焦点转移到它。

注意:当我给出睡眠时间时,只有它的工作。