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

我希望尽可能避免在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> tbody> 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(‘> tbody> tr’)

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

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

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

删除一个’>’当然是有效的,但是选择了后人tbody’s,而不仅仅是直接的孩子.

我怎样才能正确使用css?

解决方法

由于你没有提供页面网址,我拿了这个 Chinese language.Now我试图找出第一个表的第二行的表列值,类名为“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’)的方法在selenium-webdriver中不是有效的css语法.它应该是table.find_elements(:css,’tbody> tr’).我会的建议你这样写:

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

jsfiddle

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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...