使用无固定id的nightwatch访问iframe

使用无固定id的nightwatch访问iframe,iframe,frame,nightwatch.js,Iframe,Frame,Nightwatch.js,我有 但它在等待“插件”时超时,尽管“插件”在浏览器中。如何编写frame()参数?iframe id会随着每个页面生成而更改。iframe是显示另一个页面的元素,除非您的浏览器不支持iframe,否则它不会呈现其中写入的任何html。因此,id为#addon的div从一开始就不会被呈现。如果您想按id选择它,您可能应该尝试使用如下选择器开始: browser .waitForElementPresent('#office-addon', 20000); .frame('#office-

我有


但它在等待“插件”时超时,尽管“插件”在浏览器中。如何编写frame()参数?iframe id会随着每个页面生成而更改。

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

如果您想按id选择它,您可能应该尝试使用如下选择器开始:

browser
  .waitForElementPresent('#office-addon', 20000);
  .frame('#office-addon iframe')
  .waitForElementPresent('#addon', 1000)
  .end();
如果它总是第n个iframe,那么您可以在其中建立索引

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

解决方案如下:

// select the first iframe
.frame(0)
// go back to the original html content
.frame()

它没有直接起作用。

当然。但我指的是iframe中显示的实际网页。现在我把它写得更详细了一点。哦,对不起,很难说谁知道这里的基本html。那也许这对你有帮助。可能是您的iframe尚未加载。因此,添加暂停可能会有所帮助。iframe没有id“office addon”。您提供的HTML表明它有,因此请更新您的HTML示例。我刚刚给了您“starts with”选择器。不管您的iframe是什么。frame(“iframe[id^='foo-bar'])应该可以工作。
// 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)

    ...
});