5

我正在使用 Capybara 编写一些功能测试,用于涉及大量 javascript 刷新的页面(当用户单击“继续”按钮时,url 将保持不变,但会显示隐藏的内容,并且显示的内容将被隐藏,所以页面“上”的任何给定点都有大量文本/选择器/等,但对用户隐藏)。

为了测试这个功能,我希望 Capybara 的 ignore_hidden_​​elements 配置选项为真,因为这最能代表用户体验。

但是页面上也有一些 jQuery 插件使用精美的图形填充隐藏的基本 HTML 元素,我想使用 Capybara 为这些元素选择正确的值,而不是尝试使用 Javascript 手动模拟与元素交互的用户。

特别是,我正在尝试测试设置为 display:none 并在用户与它们交互时由 jQuery 插件填充的选择框。我很想能够做到这一点:

select('value', from: 'select_box')

但选择框是隐藏的。

所以我尝试了这个:

select('value', from: 'select_box', visible: false)

但这也没有用。我不愿意将 ignore_hidden_​​elements 设置为 false,因为这对用户的模拟效果更差,我必须返回并在许多测试行中添加“可见:真”。

知道怎么做吗?有没有更巧妙地取消ignore_hidden_​​elements的选项?

编辑——在安德烈的回应之后,我把 ignore_hidden_​​elements 变成了假,然后像以前一样做了同样的水豚选择测试:

select 'value', from: 'select_box_id'

而且,就像魔术一样,它奏效了。当我再次将 ignore_hidden_​​elements 更改为 true 并尝试此行时:

select 'value', from: 'select_box_id', visible: false

我收到此错误:

Failure/Error: select 'value', from: 'select_box_id', visible: false
     Capybara::ElementNotFound:
       Unable to find select box "select_box_id"

有可能这不是错误吗?我应该报告吗?

4

1 回答 1

1

这是 Capybara 2.0.x 中的一个错误。这是一个在 2.0.x 中可重现但在 2.1 中不可重现的测试用例。

但是 Capybara-Webkit 的维护者还没有发布 Capybara 2.1 兼容的版本。

为您提供可能的解决方案:

  • 使用 Capybara 2.1 兼容的驱动程序
  • 使用 github 上 master 分支的 Capybara-Webkit
  • 不要试图与不可见的元素交互(它在 Selenium 中不起作用,所以我相信交互的可能性应该被认为是 Capybara-Webkit 中的一个错误)
于 2013-05-13T21:08:33.630 回答