代码之家  ›  专栏  ›  技术社区  ›  Michael Jay

使用无固定id的nightwatch访问iframe

  •  1
  • Michael Jay  · 技术社区  · 8 年前

    我有

    <div class="ap-content" id="office-addon">
      <div class="ap-iframe-container iframe-init" id="office-addon__5e83ed1">
        <iframe id="office-addon__5e83ed1">
          <!-- As it appears in the dev console: -->
          #document
          <!DOCTYPE html>
            <html>
              <head></head>
              <body>
                <div id="addon"></div>
              </body>
            </html>
        </iframe>
      <div>
    <div>
    

    browser
      .waitForElementPresent('#office-addon', 20000);
      .frame('#office-addon iframe')
      .waitForElementPresent('#addon', 1000)
      .end();
    

    但它在等待#addon时超时,尽管#addon在浏览器中。我必须如何编写frame()参数?iframe id随每个页面生成而变化。

    3 回复  |  直到 8 年前
        1
  •  1
  •   Michael Jay    8 年前

    解决方案如下:

    browser.getAttribute('#office-addon iframe', 'id', id => {
      browser
        .frame(id.value)
    
        ...
    });
    

    它没有直接起作用。

        2
  •  1
  •   QualiT    8 年前

    如果您想按id选择它,您可能应该尝试以选择器开头,如:

    .frame("iframe[id^='office-addon']")
    

    如果它总是第n个iframe,您可以在其中建立索引

    // select the first iframe
    .frame(0)
    // go back to the original html content
    .frame()
    
        3
  •  -1
  •   ZeWebDev    8 年前

    iFrame是显示另一个页面的元素,除非您的浏览器不支持iFrame,否则它不会呈现其中编写的任何html。因此,id为#addon的div从一开始就不会被呈现。