【问题标题】:click on one Specific button using capybara in rails在 rails 中使用 capybara 单击一个特定按钮
【发布时间】:2012-04-09 09:33:13
【问题描述】:

我正在使用 rails 3,目前正在使用 selenium 驱动程序编写 capybara 测试, 我有以下问题

在一种形式中,我有 3 个按钮,分别名为“保存并添加另一个”、“保存并继续编辑”和“保存” 现在,如果我尝试通过 capybara 保存表单,如下所示

click_button 'Save'

然后这会引发名为“保存”按钮的错误,其中未找到 id、title 或 value 现在,如果我删除上面的 2 个按钮,然后我尝试一下,它就可以工作了

仅供参考,我的 3 按钮的 html 如下,

<input class="btn" type="submit" value="Save and add another" name="_addanother" data-disable-with="Save and add another">

<input class="btn" type="submit" value="Save and continue editing" name="_continue" data-disable-with="Save and continue editing">

<input class="btn" type="submit" value="Save" name="_save" data-disable-with="Save">

如果有人有想法,请告诉我。

【问题讨论】:

  • 试试 click_button "Save"(双引号)。您是否尝试过为每个按钮添加一个独特的 id 并使用它而不是 value?
  • Dans,是的,我尝试通过向按钮添加 id 来尝试,但这不起作用
  • 好的,我已经通过 id 再次尝试了,它可以工作 谢谢,但你知道有什么原因不能按按钮值工作吗?
  • 我认为问题在于所有值都匹配,因为它们都包含“保存”
  • 嗯,可能是,但这不应该发生,感谢 Dans 的回答和时间

标签: ruby-on-rails rspec click integration-testing capybara


【解决方案1】:

我认为问题在于所有值都返回匹配项,因为它们都包含“保存”。

尝试为每个人分配一个独特的 id 并改用它。

【讨论】:

    【解决方案2】:

    Matching With Exactness - 来自 GitHub 文档。与更改模板相比,使用精确性可能会产生较小的影响。

    click_button('Save', exact: true)

    这只会找到完全匹配并跳过“保存等等”操作。

    【讨论】:

    • 首选这个答案而不是接受的答案,因为它不涉及编辑您的标记。
    【解决方案3】:

    click_button 方法需要按钮的 id、名称、值。下面将起作用。

    click_button 'Save and add another'
    click_button 'Save and continue editing'
    

    最后一个按钮可以正常工作,因为它的值为“保存”

    click_button 'Save'
    

    【讨论】:

    • 我认为问题是最后一个只有在其他按钮被移除时才有效......
    • 谢谢,但是是的,我知道如果我写click_buttion 'Save',“保存”按钮应该可以工作,但目前它不起作用,它会抛出错误,正如我在我的问题中所说的那样......如果我删除我的上面 2 个按钮,那么只有这个 click_button 'Save' 有效
    • 不,这也不起作用..它会引发错误no button with value or id or text 'Save' found 但无论如何,我得到了解决方案,我已经为这些按钮添加了 ID,然后它工作正常,感谢您的回答和时间
    • 明确地说,需要一个 id、text 或值。它不会与 name 匹配。
    【解决方案4】:

    我想出了以下解决方案

    模块 ValidUserRequestHelper

    # for use in request specs
    def sign_in_as_a_valid_user
      before(:each) do
        user = FactoryGirl.create :user
        visit user_session_path
        fill_in 'user_email', :with => 'name@email.com'
        fill_in 'user_password', :with => 'foobar'
        click_button 'Einloggen'
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多