click_on和click_link之间的区别?(Difference between click

2019-10-18 08:33发布

我写请求的规格和我使用的骚灵-1.0.2和水豚-1.1.2。 我有以下代码:

    login_as @user, 'Test1234!'
    click_on 'Virtual Terminal'

登录有闪光灯消息显示了他是成功登录的用户。当我使用click_link,该规范是因为水豚找不到元素“虚拟终端”,但是当我使用click_on一切经过失败。 “虚拟终端”是不是一个按钮,它是一个链接。

是什么click_on和click_link之间的差异。

Answer 1:

点击链接使用取景器,它指定你正在寻找与您提供的定位器链接,然后就点击它这样:

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_or_button和定义如下:

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

来源: Capubara选择

在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

来源: Xpath的HTML

正如你可以看到按钮定位居然发现了很多不同的类型,你的链接可能属于下,如果我有HTML源代码,如果它确实与否,我可以告诉。



文章来源: Difference between click_on and click_link?