And*_*ndy 4 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>
Run Code Online (Sandbox Code Playgroud)
我有一个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')
Run Code Online (Sandbox Code Playgroud)
我尝试了以下,使用JQuery $('div#myelement table.myclass').find('> tbody> tr')
table = driver.find_element(:css, 'div#myelement table.myclass')
rows = table.find_elements(:css, '> tbody > tr')
Run Code Online (Sandbox Code Playgroud)
这会导致错误`assert_ok':指定了无效或非法的字符串(Selenium :: WebDriver :: Error :: UnknownError)
删除第一个'>'当然有效,但意味着选择了后代tbody,而不仅仅是直接的孩子.
我怎样才能正确使用css?
由于你没有提供页面网址,我使用了这种中文.现在我试图找出第一个具有class名称的表的第二行的表列值"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?"
Run Code Online (Sandbox Code Playgroud)
你尝试的方式table.find_elements(:css, '> tbody > tr')不是有效的css语法.selenium-webdriver它应该是table.find_elements(:css, 'tbody > tr').我建议你这样写:
table = driver.find_element(:css, 'div#myelement table.myclass>tbody')
rows = table.find_elements(:css, 'tr')
Run Code Online (Sandbox Code Playgroud)
table = driver.find_element(:css, 'div#myelement table.myclass')
rows = table.find_elements(:css, 'tbody:nth-of-type(1) > tr')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7004 次 |
| 最近记录: |