2013-02-08 25 views
5

Ich beginne gerade mit Selen und jetzt braucht dieses Element zu wählen:Wie kann ich dieses Span-Element auswählen?

<span class=" close">Matrices</span> 

Diese Codezeile Null-Elemente gibt, so dass ich denke, es ist nicht die richtige :-)

ReadOnlyCollection<IWebElement> matrixLink = driver.FindElements(By.PartialLinkText("Matrices")); 

Aber neben dem Xpath konnte ich keinen anderen passend finden, aber das sieht so aus (//*[@id=\"Navigation\"]/div[2]/div[2]/ul/li[7]/span), und das scheint mir etwas fragil?

EDIT: die Spannweite hat die Klasse 'schließen'. Es ist Teil eines Menüs, in dem es 19 Spanne der mit der Klasse sind ‚schließen‘, so dass es leider kein Einzel Selektor ist ....

+0

so hat der Bereich eine leere Klasse? –

+0

Ah, gut, es hat NICHT, es hat nur keine Klasse, wenn Sie darauf klicken, ich werde die Frage bearbeiten. Es ist jedoch ein Menüpunkt, und ich habe es überprüft: Ich habe 19 Spanne (Menüpunkte) mit der Klasse "Schließen" und das angeklickte Element hat die Klasse "Schließen" entfernt. – Michel

+0

Ist '// * [@ id = \" Navigation \ "]/Nachkommen :: span [text() = 'Matrizen']' Arbeit? – Arran

Antwort

8

Dies funktioniert:

//*[@id=\"Navigation\"]/descendant::span[text()='Matrices'] 

Beachten Sie, wenn Sie können, spezifisch in Ihren XPath-Abfragen, in erster Linie auf Hilfe Lesbarkeit und Leistung zu verbessern ... das ist die * in Ihrer Abfrage Abfrage alle Elemente auf der Seite. Ich weiß nicht, welche Art von Element der Navigation Element ist, aber Sie sollten setzen sie genau Elements eingeben, zum Beispiel, wenn es ein div ist, es machen:

//div[@id=\"Navigation\"]/descendant::span[text()='Matrices'] 

Eine leichte Erklärung für diese XPath ist dass es das Navigation Element ergreift, und schauen Sie einfach irgendwo darin, um ein span Element zu finden, das den Text Matrices hat. Ohne das Bit descendant im XPath würde es nur nach direkten Kindern suchen. Das bedeutet Elemente, die ein Kind von Navigation, nichts anderes - also, wenn ein Element ein Kind von TestDiv ist, die ein Kind von Navigation ist, würde descendant es fangen, ohne es werden Sie keine Ergebnisse zurückgeben.

Warum By.PartialLinkText nicht funktionieren würde, würde dies nur nach Anker-Links suchen. Es ist üblich, wie Sie gesehen haben, dass Anker Links ein span Element in ihnen haben oder manchmal ist es nur ein span für sich.

By.PartialLinkText und ähnlich By.LinkText würde dieses Element nicht "sehen", da es kein Ankerelement ist.

2

Mein Lieblingsproblemlöser für diese Fälle:

  • installieren Selenium IDE
  • Klicken Sie auf den Link, den Sie
  • im "Ziel" in Selenium IDE benötigen Sie die verschiedenen Möglichkeiten XPath

Aber ich würde verwenden sehen Ansatz, dass sein N-te Element mit „close“ Klasse (//span[7] oder so ähnlich)

+1

Ja, der XPath mit dem 7. Element funktioniert, aber das scheint so zerbrechlich, wenn das Menü einen zusätzlichen Eintrag bekommt, ist es nicht mehr der 7. Eintrag ... – Michel

+0

Einverstanden. In meinen Fällen funktioniert es perfekt, weil die Änderungen in der Web GUI nicht so oft sind oder dass invasive –

2

Sie können verwenden // span [text() = 'Matrizen'] Es wird Ihr Element auswählen.

Verwandte Themen