如何找到Capybara的灯箱/ fancybox

时间:2012-12-04 16:28:34

标签: html ruby fancybox cucumber capybara

我没有找到一个明确的答案来查找和操纵我的fancybox模态载荷webapp中的元素。

within("div#fancybox-wrap.fancybox-desktop.fancybox-type-iframe.fancybox-opened") do
    page.find_by_id('blah container').click
end

这是一个更大的背景请求

<div class="fancybox-wrap fancybox-desktop fancybox-type-iframe fancybox-opened" style="width: 415px; height: auto; display: block; position: fixed; top: 20px; left: 467px; opacity: 1; overflow: visible;">
<div class="fancybox-skin" style="padding: 15px;">
    <div class="fancybox-outer">
        <div class="fancybox-inner" style="width: 385px; height: 229px; overflow: hidden;">
            <iframe class="fancybox-iframe" name="fancybox-frame" frameborder="0" hspace="0" scrolling="auto" src="index.php?module=Yadda&amp;action=[where I wan to be]&amp;popup=Y&amp;id=[unique]&amp;width=1010&amp;height=600">
                [the stuff I want to access]
            </iframe>
        </div>
    </div>
<div title="Close" class="fancybox-item fancybox-close">

这会产生以下拒绝...

  Unable to find css "div#fancybox-wrap.fancybox-desktop.fancybox-type-iframe.fancybox-opened" (Capybara::ElementNotFound)

我需要添加/减去什么吗?

2 个答案:

答案 0 :(得分:1)

css定位器不正确。

div#fancybox-wrap

表示id为“fancybox-wrap”的div。基于html,“fancybox-wrap”是一个类。因此,您实际上想要(注意“#”更改为“。”):

within("div.fancybox-wrap.fancybox-desktop.fancybox-type-iframe.fancybox-opened") do
    page.find_by_id('blah container').click
end

答案 1 :(得分:0)

找到了一个受这个答案启发的更好答案

Temporarily set js_errors to false in Poltergeist

但只有在使用使用水豚与幽灵的poltergist时才会起作用

# think about it. this is what you do in real life
# Try to click thing you actually want. get caught by the the overlay then click to dismiss it away
tried_before = false
  if page.has_css?('#autostart')
    begin
      click_link "Insurance", match: :first 
    rescue Capybara::Poltergeist::MouseEventFailed
      # close the fancy box
      if tried_before
        raise e
      end 
      find('#fancybox-close').click
      retry
    end 
  end 
end

它做了什么?

  1. 尝试点击我们真正想要的东西
  2. 如果现在我们不知道叠加是否在路上
  3. 我们现在可以点击