如何从Capybara / Poltergeist中的另一个帧中切换到一个帧?

时间:2016-07-23 20:12:06

标签: ruby-on-rails capybara poltergeist

我是Ruby on Rails的新手,我正在开发一个目录网站,它包含两个框架:第一个包含产品系列,第二个框架动态显示这些系列中的机器列表。第一帧。这是因为表单目标是该帧的名称:

我已经检查了this answer但是有一个重要的区别:我想通过工作“within_frame('families_frame')”迭代地点击第一帧中的产品系列链接,并获取机器列表第二帧。但是“switch_to_frame”和类似的解决方案不起作用,我收到以下错误: switch_to_window不应该从withinwithin_frame'或'within_window's'块中调用。 (水豚:: ScopeError)

因为我的迭代器是从“within_frame”运行的。如何切换到生成的帧,到达内容然后切换回工作帧? HTML结构是:

<HTML>
<FRAME NAME="families_frame" SRC=".../productfamily.jsp">
<FRAME NAME="machines_frame" SRC=".../blank.jsp">
</HTML>

非常感谢你。

1 个答案:

答案 0 :(得分:0)

使用您发布的html结构,您需要在within_frame之外进行迭代,所以这样的事情

families = []
within_frame 'families_frame' do
  families = page.all('the selector for the items to iterate on')
end

families.each do |family|
  within_frame 'families_frame' do
    family.click
  end

  within_frame 'machines_frame' do
    # whatever you need to do in the machines frame
  end
end

注意:这只有在系列框架没有更新的情况下才有效 - 如果您需要保留索引位置并在每次进入families_frame时查询它而不是能够迭代通过选择器的结果,或者你最终会得到过时的元素引用