为什么这个xpath工作但是css选择没有为UL找到[locator not]

时间:2013-05-01 20:03:05

标签: css ruby xpath selenium rspec

我正在努力尽可能为我的选择器从xpath切换到css。

这适用于xpath:

//ul[contains(@id,'district-switcher')]

但我认为在css中是等价的:

css=ul#district_switcher

只是找不到定位器。我没有使用css的包含,因为我认为我不需要

我正在使用firefox selenium IDE

HTML:

<ul id="district-switcher" class="nav nav-pills" style="background-color:
transparent;"><li class="dropdown open"><a class="dropdown-toggle" href="#">
Change district
<b class="caret"></b></a><ul class="dropdown-menu"><li>...

我对css = selector方法做错了什么?

3 个答案:

答案 0 :(得分:2)

简单拼写错误:#district_switcher#district-switcher不同。

答案 1 :(得分:1)

我不确定css=部分,但你写了district_switcher。它曾经是district-switcher。更准确地说,它将是ul[id*=district-switcher]

答案 2 :(得分:1)

相当于//ul[contains(@id,'district-switcher')]的CSS是:

ul#district-switcher

例如:

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<ul id="district-switcher" class="nav nav-pills" style="background-color:
transparent;"><li class="dropdown open"><a class="dropdown-toggle" href="#">
Change district
<b class="caret"></b></a><ul class="dropdown-menu"><li>
EOT

doc.at('ul#district-switcher')['class'] # => "nav nav-pills"
doc.at('ul#district-switcher a').text # => "\nChange district\n"

Nokogiri支持jQuery's CSS selectors,这使得它成为浏览HTML AND XML文档的一种非常强大的方式。