【问题标题】:Selecting nested iframe - selenium / javascript / node-js选择嵌套 iframe - selenium / javascript / node-js
【发布时间】:2013-12-05 13:33:11
【问题描述】:

我想使用 node-js 中的 selenium webdriver 模块在 iframe 中选择一个嵌套 iframe。

例如:

<iframe id="firstframe">
   <div id="firstdiv"></div>
   <iframe id="secondframe">
     <div id="seconddiv"></div>
   </iframe>
</iframe>

对于 node-js 部分:

driver.switchTo().defaultContent();
driver.switchTo().frame("firstframe");   // --> works
driver.switchTo().frame("secondframe");  // --> NoSuchFrameError


iframes = driver.findElements(webdriver.By.tagName('iframe')).then(function(elements){
            console.log(elements.length); // --> if I put this code before the switch to first frame output: 1, if I put it after output: 0)
            });

我尝试使用索引号,但也失败了。

编辑:

好的,我想通了,但由于某种原因,用户@casparOne 删除了我的答案。如果有人仍然想知道这里的问题是什么:

我上面的代码可以工作,只是不能在本地工作。 Chrome 的安全设置拒绝深入到本地文件的 iframe 中。因此它甚至没有显示 iframe 的源代码。

【问题讨论】:

  • 在切换到secondframe 之前尝试切换回默认内容。
  • 同时获得NoSuchFrameError

标签: javascript node.js iframe selenium


【解决方案1】:

我以前做过几次这种事情。尝试在切换帧之间暂停 1 秒。 (有时)您需要给 Selenium(或浏览器)足够的时间来加载框架 DOM,然后再尝试另一个切换。

【讨论】:

  • driver.switchTo().frame("firstframe"); setTimeout(function(){driver.switchTo().frame("secondframe");}, 5000); 仍然得到NoSuchFrameError。我还尝试在第一个之后使用.then()-promise。
  • 您可以通过使用 XPath 从 dom 匹配标签名称“iframe”中获取所有元素进行故障排除。
  • 怎么样:driver.switchTo().frame("firstframe"); driver.sleep("2000"); driver.switchTo().frame("第二帧"); Webdriver js 通过使用所谓的“控制流”来管理 selenium 承诺,基本上它是一个承诺管理器 (code.google.com/p/selenium/wiki/WebDriverJs#Control_Flows)。尝试使用“官方”服务员而不是 setTimeout。在这种情况下,driver.sleep 应该可以完成这项工作。
  • 我认为你所指的“控制流”是一个较旧的 Selenium 1.0 的东西?
  • 我也做过类似的事情,为此使用超时太奇怪了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 2021-01-24
相关资源
最近更新 更多