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

量角器:如何在第二个嵌套iframe上定位元素,iframe,modal-dialog,protractor,Iframe,Modal Dialog,Protractor,使用非矩形页面的量角器时,我遇到了一个iframe中模态元素位置的问题,该iframe嵌套在另一个iframe中。我正在尝试定位元素,但总是出现元素未找到错误 页面来源: <iframe ... ... <iframe frameborder="0" ... <html <head <body <div id="viewport" s

使用非矩形页面的量角器时,我遇到了一个iframe中模态元素位置的问题,该iframe嵌套在另一个iframe中。我正在尝试定位元素,但总是出现元素未找到错误

页面来源:

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


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

Heureka!!!找到了我的问题的简单解决方案():


我不得不删除
browser.switchTo().defaultContent()在我切换到第二个iframe之前,所有问题都解决了。

在搜索“模态单位”元素时,您确定您处于正确的帧上下文中吗?意思是,确保
last()
会给你你认为需要的框架?。@alecxe:是的,因为如果我搜索页面上的所有iframe标记名,我会得到两个结果。
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() {
...
...
// 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();
        });

        // 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() {
...