2011-01-03 8 views
1

Ich habe den folgenden HTML-Code und den Code, den ich verwende, um die Klasse <td> abzurufen.Wie kann ich die Klasse des TD im folgenden HTML mit Selenium/XPath abrufen?

<td class='dataValueRead RV2' style=''>Constant</td> 

**

driver.findElement(
    By.xpath("//td[contains(normalize-space(.),'Constant')]") 
).getAttribute("class") 

Es gibt mir einen leeren Wert als Ausgabe. Irgendwelche Hinweise, wo ich falsch liege?

+1

Die XPath ist in Ordnung. Was beinhaltet die Abfrage von nur '// td' und' // td [enthält (normalize-space(), 'Constant')] 'return? – Tomalak

+0

@ user561337: Dieser XPath Ausdruck sollte das 'td' Element auswählen –

Antwort

0

Warum verwenden XPath nicht nur direkt das Attribut zuzugreifen (td/@class)?

+0

Danke es funktioniert – user561337

3

Nur verwenden:

//td[contains(normalize-space(.),'Constant')]/@class 

Sie beachten Sie, dass der obige Ausdruck mehr als einen Knoten auswählen kann.

, um nur die N-ten Knoten aus diesen zu wählen, einen XPath-Ausdruck dieser Art verwenden (N = 1):

(//td[contains(normalize-space(.),'Constant')]/@class)[1] 

Wenn keine von diesen sind, kann der Grund jeder Knotenauswählverfahren sein:

  1. //td[contains(normalize-space(.),'Constant')] keine Knoten auswählt, weil es keine td ist, dessen String-Wert enthält die Zeichenfolge 'Constant'. Sind Sie sicher, dass Sie die genaue Großschreibung verwenden? XPath ist Groß-und Kleinschreibung und 'constant' ist nicht gleich 'Constant'.

  2. //td[contains(normalize-space(.),'Constant')] wählt keinen Knoten, weil es ein Standard-Namespace ist. In diesem Fall müssen Sie einen Namespace registrieren und seinen Präfix im XPath-Ausdruck verwenden (es gibt eine Menge von Fragen und Antworten zu dieser - sie liest): //x:td[contains(normalize-space(.),'Constant')]

+0

+1. Erschöpfend. – Flack

Verwandte Themen