量角器:如何在第二个嵌套iframe上定位元素

时间:2017-05-18 22:24:38

标签: iframe modal-dialog protractor

将Protractor用于nonAngular页面我遇到了来自iframe的模态元素位置问题,iframe嵌套在另一个iframe中。我正在尝试找到元素,并且我总是得到Element not found错误。

页面来源:

<iframe ...
    ...
    <iframe frameborder="0" ...
        <html
            <head
                <body
                    <div id="viewport" style= ...
                        <div id="modal" class=" unit ...

页面对象:

this.layout = element(by.css('div[data-field="device"]'));
this.firstIframe = this.layout.element(by.tagName('iframe'));
this.content = element(by.tagName('body.desktop'));
this.secondIframe = element.all(by.tagName('iframe')).last();
this.modalUnit = element(by.id('modal'));

规格:

...
// waiting for first iframe to be visible
        browser.wait(EC.visibilityOf(page.firstIframe),10000).then(function() {

            // switch to first iframe
            browser.driver.switchTo().frame(page.firstIframe.getWebElement());

            // verify content is displayed
            expect(page.content.isDisplayed()).toBeTruthy();

            // switch to default content
            browser.switchTo().defaultContent();
        });

        // waiting for second iframe to be visible
        browser.wait(EC.visibilityOf(page.secondIframe),10000).then(function() {

            // switch to second iframe
            browser.driver.switchTo().frame(page.secondIframe.getWebElement());

            // waiting for modal to be visible
            browser.wait(EC.visibilityOf(page.modalUnit),10000).then(function() {
...

在第一个iframe中找到Content元素没有问题。但是找不到第二个iframe中的modalUnit元素,而找到第二个iframe。知道为什么吗?

1 个答案:

答案 0 :(得分:1)

Heureka !!!找到了我的问题的简单解决方案(https://groups.google.com/forum/#!topic/selenium-users/OkcX2vaZoek):

browser.switchTo().defaultContent();

在切换到第二个iframe之前,我必须删除{{1}}并且所有问题都已消失。