我希望尽可能避免在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>
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')
table = driver.find_element(:css,'div#myelement table.myclass') rows = table.find_elements(:css,'tbody:nth-of-type(1) > tr')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。