【问题标题】:How do I click this button using Ruby Capybara?如何使用 Ruby Capybara 单击此按钮?
【发布时间】:2017-02-03 16:50:06
【问题描述】:

我正在尝试单击一个按钮,但出现以下错误:

找不到链接或按钮“我的任务”(Capybara::ElementNotFound)

这是我在 Chrome 上检查时得到的结果:

<a class="btn btn-lg btn-success" href="/tasks" role="button">My Tasks</a>

这是我的代码(我的 steps.rb):

 # go to my tasks page
    def visitTasksPage
      page.has_content?('Signed in succesfully') do
        clicK_link 'My Tasks'
      end
      self
    end

我是 Ruby Capybara 的新手,谁能帮帮我?

【问题讨论】:

  • 当您的问题询问按钮时,您使用的是click_link。请改用click_button
  • 您使用的是什么驱动程序?是否有 CSS 更改链接中“我的任务”文本的大小写?在调用 click_link 之前查看page.html 并查看链接是否真的在页面上(并且你在你认为的页面上)

标签: ruby google-chrome capybara


【解决方案1】:

问题可能在于它实际上是您尝试单击的链接(&lt;a href="/some-link"&gt;Some Text&lt;/a&gt; 标记)而不是按钮(&lt;button type="button"&gt;Some text&lt;/button&gt; 标记)。为了不出现这个问题,我建议您使用以下method

click_on('My Tasks') # clicks on either links or buttons

或者可能是链接或按钮在 Capybara 超时之前没有出现在页面上。 Capybara 默认会在超时前等待 2 秒,但您可以使用

Capybara.default_max_wait_time = 9

您可以做的另一件事来调试此问题是在单击链接/按钮之前添加对binding.pry 的调用,并检查该按钮是否确实存在以及您期望它具有的文本:

page.has_content?('Signed in succesfully') do
  binding.pry # at this point you can test if the link is really there with page.has_content?('My Tasks')
  click_link 'My Tasks'
end

请注意,您需要将 install pry 添加到您的 Gemfile 或 gem install pry

【讨论】:

  • click_link 被实现为 find_link(...).click 这样不会有任何区别(因此 click_link 具有相同的等待行为以匹配链接出现) - 和 find_button没有找到 元素,所以这不会在这里工作
  • 你是对的@ThomasWalpole。感谢您发表评论,而不是简单地投反对票。我将尝试使用更多方法来解决 OP 的问题来编辑我的答案。
猜你喜欢
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
相关资源
最近更新 更多