如何说服capybara点击<details>元素</details>

时间:2014-11-12 13:56:45

标签: ruby-on-rails cucumber capybara

我的标记看起来像:

<div class="alert">
  <details>
    <summary>
      This question is currently shared across
      <strong>2 surveys.</strong>
      Changes made to this question will be applied everywhere it's shared.
    </summary>
    <ol>
      <li><a href="/admin/surveys/1/questions"><i class="icon-share"></i> Test Survey <span class="badge">source</span></a>   </li>
      <li><a href="/admin/surveys/2/questions"><i class="icon-share"></i> New Survey 2014-11-11 22:14:47</a></li>
    </ol>
  </details>
</div>

如何说服水豚点击<details>

2 个答案:

答案 0 :(得分:2)

尝试使用find('.alert > details').click

使用上面的Capybara会尝试在div.alert中找到一个details元素(Capybara使用CSS作为默认选择器)。您可以将黄瓜步骤定义如下:

When(/^I click on details inside an alert$/) do
  find('.alert > details').click
end

答案 1 :(得分:0)

我认为这种解决方案是一种奇怪的方法,但它无论如何都可以提供帮助。

由于您需要JQuery,您必须更改驱动程序:

设定:

  1. 的Gemfile: gem&#39; capybara-webkit&#39;

  2. (系统)我在Debian,所以我必须: apt-get install qt4-qmake qt4-default

  3. 在您的spec文件中
  4. ,在require之后: Capybara.javascript_driver =:webkit

  5. 在上下文/ describe中: context&#39; ...&#39;,:js =&gt;是的

  6. 现在,这就是解决方案:

    visit some_path
    page.execute_script("$('#my_detail').attr('open', '')")
    expect(find('#my_detail')['open']).to eq('open')
    

    JQuery $(&#39;#my_detail&#39;)。attr(&#39; open&#39;,&#39;&#39;)匹配id = my_detail并添加属性&#39;开放&#39;值为空(它是你点击时会发生什么)。

    然后,为了测试它是否真的开放,我做到了期待。

    此测试为绿色。如果您评论&#39; page.execute&#39;,则测试将失败。