在ruby selenium-webdriver元素find_elements中使用css子选择器

时间:2013-08-25 14:00:46

标签: css ruby selenium webdriver

我希望尽可能避免在webdriver中查找元素时使用XPath,但是能够引用已经找到的元素中的子元素,例如。

对于以下html:

<div id="myelement">
    <table class="myclass">
       <tbody>
           <tr>
               <td>something</td>
               <td>
                   <table>
                       <tbody>
                           ...
                       </tbody>
                   </table>
               </td>
           </tr>
           <tr>
               ...
           </tr>
       </tbody>
    </table>
</div>

我有一个css表达式:

driver.find_elements('div#myelement table.myclass&gt; tbody&gt; tr')

我想将其分解为表元素和行,而不必返回表表达式。例如对于XPath:

table = driver.find_element(:xpath, "//div[@id='myelement']//table[@classname='myclass']")

rows = table.find_elements(:xpath, 'tbody/tr')

我尝试了以下内容,它使用JQuery $('div#myelement table.myclass')。find('&gt; tbody&gt; tr')

table = driver.find_element(:css, 'div#myelement table.myclass')

rows = table.find_elements(:css, '> tbody > tr')

这会导致错误`assert_ok':指定了无效或非法的字符串(Selenium :: WebDriver :: Error :: UnknownError)

删除第一个'&gt;'当然是有效的,但意味着选择了后人,而不仅仅是直接的孩子。

如何只使用css正确执行此操作?

1 个答案:

答案 0 :(得分:5)

由于你没有给出页面网址,我接受了这个Chinese language。现在我试图找出第一个表格第class名{{1}的第二行的表格列值}}

"wikitable sortable

您尝试require 'selenium-webdriver' driver = Selenium::WebDriver.for :firefox driver.navigate.to "http://en.wikipedia.org/wiki/Chinese_language" table = driver.find_element(:css,"table.wikitable") # !> assigned but unused variable - table tb_col = driver.find_elements(:css,"tr:nth-of-type(2)>td") tb_col[0..5].each{|e| p e.text} # >> "汉语/漢語 or 中文\nHànyǔ or Zhōngwén" # >> "汉语" # >> "中文" # >> "Wu\nNotes: includes Shanghainese" # >> "Wu; 吴/吳" # >> "Wúyǔ" 的方式不是table.find_elements(:css, '> tbody > tr')中的有效css语法。它应该是selenium-webdriver。我建议您这样写:

table.find_elements(:css, 'tbody > tr')

jsfiddle

table = driver.find_element(:css, 'div#myelement table.myclass>tbody')
rows = table.find_elements(:css, 'tr')