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

时间:2015-08-10 17:59:06

标签: ruby xpath capybara

我在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')]"

红宝石/水豚

elements = all(:xpath, myXPathQuery)documentation

elements.CountCapybara::Resultelements.count返回0,我希望为1。

2 个答案:

答案 0 :(得分:0)

尝试:

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

答案 1 :(得分:0)

您需要将特定原因作为XPath吗? Capybara支持CSS选择器,它更容易为类名编写。

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

此外,当使用all时,它默认立即返回,因为它假定没有元素是有效的结果。如果您的页面是动态变化的,并且您知道至少需要一个元素,那么

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旨在模拟真实用户,因此找到隐形元素通常不是一件好事,因为真正的用户无法看到它或与之交互。通常更好的做法是执行任何可以使该元素可见的动作,然后检查其存在/与之交互。