选择器无法在页面上找到 ins

Selector fails to find ins on page

我在 html 页面上有一个奇怪的元素,我无法使用 XPath 查询选择它。我正在使用 Capybara,但我希望这是一个 XPath 问题。可能 - 字符需要转义或错误查询?

HTML 元素

<ins class="iCheck-helper" style="position: absolute; top: 0%; left: 0%; display: block; width: 100%; height: 100%; margin: 0px; padding: 0px; border: 0px; opacity: 0; background: rgb(255, 255, 255);"></ins>

XPath

"//*[contains(@class, 'iCheck-helper')]"

Ruby/Capybara

elements = all(:xpath, myXPathQuery) (documentation)

elements.Count 是一个 Capybara::Resultelements.count returns 0,我预计 1。

尝试:

myXPathQuery = '//ins[@class="iCheck-helper"]'
elements = all(:xpath, myXPathQuery) 

是否有特定原因需要将此作为 XPath 执行? Capybara 支持 CSS 选择器,这些选择器更容易为 class 名称编写。

elements=all(:css, '.iCheck-helper')

此外,当默认情况下立即使用它 returns 时,因为它假定没有元素是有效结果。如果您的页面是动态变化的,并且您知道您至少需要一个元素,那么您应该这样做

elements=all(:css, '.iCheck-helper', minimum: 1)

这将等待 Capybara.default_wait_time 秒以等待至少一个匹配元素出现。你也可以传递 count: 1 (而不是最小值)如果你确定你只想要一个元素并且超过那个应该是一个错误,尽管在那种情况下#find 可能更有意义

我刚刚注意到你的 CSS 向右滚动,不透明:0 - 在任何真正的浏览器驱动程序中(selenium、capybara-webkit、poltergeist 等 - 基本上除了 racktest ) 这将使元素不可见,因此默认情况下不会找到它。要找到该元素,您可以执行

elements=all(:css, '.iCheck-helper', minimum: 1, visible: :all)

请注意,由于 Capybara 旨在模拟真实用户,因此找到不可见元素通常不是一件好事,因为真实用户无法看到它或与之交互。执行任何使该元素可见的操作然后检查它的 existence/interact 通常是一个更好的主意。