I want to avoid using XPath, where possible, when searching for elements in webdriver, but to be able to refer to child elements from already found elements, for example.
For the following html:
<div id="myelement"> <table class="myclass"> <tbody> <tr> <td>something</td> <td> <table> <tbody> ... </tbody> </table> </td> </tr> <tr> ... </tr> </tbody> </table> </div>
I have a css expression:
driver.find_elements ('div # myelement table.myclass> tbody> tr')
I want to break this down into a table and row element, without referring to the table expression. for example for XPath:
table = driver.find_element(:xpath, "//div[@id='myelement']//table[@classname='myclass']") rows = table.find_elements(:xpath, 'tbody/tr')
I tried the following, which works using jQuery $ ('div # myelement table.myclass'). find ('> tbody> tr')
table = driver.find_element(:css, 'div#myelement table.myclass') rows = table.find_elements(:css, '> tbody > tr')
This causes an `assert_ok 'error: an invalid or illegal string is specified (Selenium :: WebDriver :: Error :: UnknownError)
Removing the first ">", of course, works, however, it means that a selective tbody is selected, and not just the nearest children.
How can I do this correctly using only css?