gpt4 book ai didi

ruby-on-rails-3 - click_on 和 click_link 的区别?

转载 作者:行者123 更新时间:2023-12-05 09:24:00 25 4
gpt4 key购买 nike

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

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

登录有一个闪现消息,向用户显示他已成功登录。当我使用 click_link 时,规范失败,因为 Capybara 找不到元素“虚拟终端”,但是当我使用 click_on 时,一切都通过了。 “虚拟终端”不是按钮,而是链接。

click_on 和 click_link 有什么区别。

最佳答案

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

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

来源:Capybara actions

这又将我们引向选择器 :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 selectors

如本源代码所示,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 源代码,我可以判断它是否属于。

关于ruby-on-rails-3 - click_on 和 click_link 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17563553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com