Ruby on rails 3 单击和单击链接之间的区别?

Ruby on rails 3 单击和单击链接之间的区别?,ruby-on-rails-3,capybara,poltergeist,Ruby On Rails 3,Capybara,Poltergeist,我正在编写请求规范,我正在使用poltergeist-1.0.2和capybara-1.1.2。我有以下代码: login_as @user, 'Test1234!' click_on 'Virtual Terminal' 以@user'Test1234!'的身份登录 单击“虚拟终端” 登录时会显示一条闪光消息,向用户显示他已成功登录。当我使用click_链接时,规范失败了,因为水豚找不到元素“virtualterminal”,但当我使用click_时,一切都通过了“虚拟终端”不是按钮,

我正在编写请求规范,我正在使用poltergeist-1.0.2和capybara-1.1.2。我有以下代码:

login_as @user, 'Test1234!' click_on 'Virtual Terminal' 以@user'Test1234!'的身份登录 单击“虚拟终端” 登录时会显示一条闪光消息,向用户显示他已成功登录。当我使用click_链接时,规范失败了,因为水豚找不到元素“virtualterminal”,但当我使用click_时,一切都通过了“虚拟终端”不是按钮,而是链接


单击和单击链接之间有什么区别。

单击链接使用一个查找器,该查找器指定您正在使用提供的定位器查找链接,然后单击它:

def click_link(locator, options={})
  find(:link, locator, options).click
end
单击使用一个查找器,指定它应该是链接或按钮,如下所示:

def click_link_or_button(locator, options={})
  find(:link_or_button, locator, options).click
end
alias_method :click_on, :click_link_or_button
资料来源:

这将引导我们依次进入选择器:link和:link_或_按钮,其定义如下:

Capybara.add_selector(:link_or_button) do
  label "link or button"
  xpath { |locator| XPath::HTML.link_or_button(locator) }
  filter(:disabled, :default => false) { |node, value| node.tag_name == "a" or not(value ^ node.disabled?) }
end

Capybara.add_selector(:link) do
  xpath { |locator| XPath::HTML.link(locator) }
  filter(:href) do |node, href|
    node.first(:xpath, XPath.axis(:self)[XPath.attr(:href).equals(href.to_s)])
  end
end
资料来源:

Xpath定位器仅在搜索链接或链接和按钮方面有所不同,如以下源代码所示:

def link_or_button(locator)
  link(locator) + button(locator)
end

def link(locator)
  link = descendant(:a)[attr(:href)]
  link[attr(:id).equals(locator) | string.n.contains(locator) |  attr(:title).contains(locator) | descendant(:img)[attr(:alt).contains(locator)]]
end

def button(locator)
  button = descendant(:input)[attr(:type).one_of('submit', 'reset', 'image', 'button')][attr(:id).equals(locator) | attr(:value).contains(locator) | attr(:title).contains(locator)]
  button += descendant(:button)[attr(:id).equals(locator) | attr(:value).contains(locator) | string.n.contains(locator) | attr(:title).contains(locator)]
  button += descendant(:input)[attr(:type).equals('image')][attr(:alt).contains(locator)]
end
资料来源:


正如你所看到的,按钮定位器实际上找到了许多不同类型的链接,如果我有html源代码,我可以判断它是否有。你能给出你正在测试的页面的html代码吗?因此,即使在今天,
单击
也将始终使用默认的最大等待时间(不仅仅是
page.has_content?(“我的内容”)