Mit css Kind-Selektor in der ruby-selenium-webdriver element find_elements
Ich möchte vermeiden, mit Hilfe von XPath-wo möglich, bei der die Suche nach Elementen in webdriver, aber in der Lage sein, um die Referenz child-Elemente von bereits gefundenen Elemente z.B.
Für den folgenden html-Code:
<div id="myelement">
<table class="myclass">
<tbody>
<tr>
<td>something</td>
<td>
<table>
<tbody>
...
</tbody>
</table>
</td>
</tr>
<tr>
...
</tr>
</tbody>
</table>
</div>
Ich habe ein css-Ausdruck:
Treiber.find_elements('div#myelement Tabelle.myclass > tbody > tr')
Ich will brechen diese in die table-element und die Zeilen, die zimmerreserviereung, ohne das Sie verweisen zurück auf die Tabelle Ausdruck. z.B. für XPath:
table = driver.find_element(:xpath, "//div[@id='myelement']//table[@classname='myclass']")
rows = table.find_elements(:xpath, 'tbody/tr')
Habe ich versucht, das folgende, das funktioniert mit JQuery $('div#myelement Tabelle.myclass').find('> tbody > tr')
table = driver.find_element(:css, 'div#myelement table.myclass')
rows = table.find_elements(:css, '> tbody > tr')
Dies verursacht einen Fehler `assert_ok': Eine ungültige oder illegale Zeichenfolge angegeben wurde (Selenium::WebDriver::Error::UnknownError)
Entfernen des ersten '>' funktioniert natürlich, jedoch bedeutet decendant tbody s ausgewählt sind, und nicht nur die unmittelbaren Kinder.
Wie kann ich dies korrekt mit css?
- Dies tut
table.find_elements(:xpath, 'tbody/tr')
Arbeit? - Können Sie zeigen Sie Ihre endgültige Zweck der Prüfung?
- Wie oben erwähnt, es funktioniert, aber ich würde lieber nicht verwenden, um xpath-für einmalige Ausgaben.
- der einzige Zweck ist, so kann ich wickeln Sie die Tabelle in ein PageObject (oder zumindest ein widget), und die Objekt-handle das abrufen von Zeilen. Ich bin nicht wirklich mit webdriver als ein test, aber einen Roboter zu ziehen, Daten von einer website.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Sie nicht geben Sie die url der Seite,ich habe diese Chinesische Sprache.Jetzt habe ich versucht, herauszufinden, die Spalte der Tabelle die Werte für die zweite Zeile der ersten Tabelle mit
class
Namen"wikitable sortable
.Dem Weg Sie versucht
table.find_elements(:css, '> tbody > tr')
ist keine gültige css-syntax inselenium-webdriver
.Es solltetable.find_elements(:css, 'tbody > tr')
.Ich schlage vor, Sie schreiben das so:oder jsfiddle
driver.find_element(:css, 'div#myelement table.myclass>tbody')
undtable.find_elements(:css, 'tr')