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