使用没有固定 id 的 nightwatch 访问 iframe

Accessing an iframe with nightwatch without a fixed id

我有

<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 随每个页面构建而变化。

iframe 是显示另一个页面的元素,除非您的浏览器不支持 iframe,否则它不会呈现其中写入的任何 html。因此,带有 id #addon 的 div 永远不会首先被渲染。

如果你想通过 id select 它,你可能应该尝试以 select 开头或类似:

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

如果它始终是您可以在

中编制索引的第 n 个 iframe
// select the first iframe
.frame(0)
// go back to the original html content
.frame()

解决方案如下:

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

    ...
});

直接没成功