【问题标题】:Protractor: How to locate elements on the second nested iframe量角器:如何在第二个嵌套 iframe 上定位元素
【发布时间】:2017-05-20 04:52:01
【问题描述】:

将量角器用于非 Angular 页面我遇到了来自 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 中找到内容元素没有问题。但是没有找到来自第二个 iframe 的 modalUnit 元素,而找到了第二个 iframe。知道为什么吗?

【问题讨论】:

  • 当您搜索“模态单元”元素时,您确定您处于正确框架的上下文中吗?意思是,确定last() 会给你你认为你需要的框架?..
  • @alecxe:是的,因为如果我搜索页面上的所有 iframe 标记名,我会得到两个结果。

标签: iframe modal-dialog protractor


【解决方案1】:

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

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

在切换到第二个 iframe 之前,我必须删除 browser.switchTo().defaultContent();,所有麻烦都消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2015-09-12
    • 2017-03-06
    • 2016-05-13
    • 1970-01-01
    • 2021-01-29
    相关资源
    最近更新 更多