2017-11-08 2 views
0

HTMLXPath und CSSSelector scheint nicht flexibel bei :: vor und nach ::

<li>::before<a href="#county" class="eods-error">::before"County is required."::after</a></li> 

Basierend auf oben html Ich schrieb folgendes:

CSSSelector: #eods-error > div > div.eods-error-box > ul > li:nth-child(1)

xpath: //*[@id="eods-error"]/div/div[1]/ul/li[1]/a/text()

Ich benutze Selen-Webdriver und Java für die Automatisierung. Um ein Element basierend auf dem oben angegebenen HTML zu finden, habe ich oben diff. 2 Lokalisatoren. Aber anscheinend können diese Probleme verursachen, wenn neues Element/div innerhalb von HTML hinzugefügt wird.

Gibt es eine andere Möglichkeit, über Element mit etwas mehr Detail Xpath zu lokalisieren, so dass auch wenn zusätzliche DIV in HTML kommt, dann Xpath nicht get failed.

Screenshot von HTML-Abschnitt:

enter image description here

+0

Können Sie erklären, was meinst du mit zusätzlichen 'div'? Teile HTML sowohl für case mit * additional 'div' * als auch ohne es – Andersson

+0

@Andersson - Ich meine, was passiert, wenn ein neues Element dazwischen in html hinzugefügt wird, in diesem Fall könnte mein geschriebener xpath/cssseletor fehlschlagen. –

+0

Könnte? Es wird definitiv scheitern :) Hast du meine Antwort überprüft? – Andersson

Antwort

1

können Sie unten verwenden

  • XPath

    //a[@href="#county"] 
    
  • CSS-Selektor

    a[href="#county"] 
    

Anker

erforderlich übereinstimmen, wenn Sie Ihre aktuelle Selektoren wollen es von Zwischen div trotz der Anwesenheit/Abwesenheit übereinstimmen, dann könnten Sie unter Syntax

  • XPath verwenden . Ändern

    //*[@id="eods-error"]/div/div[1]/ul/li[1]/a/text() 
    

    zu

    //*[@id="eods-error"]//div[1]/ul/li[1]/a/text() 
    
  • CSS-Selektor.Ändern

    #eods-error > div > div.eods-error-box > ul > li:nth-child(1) 
    

    zu

    #eods-error div.eods-error-box > ul > li:nth-child(1) 
    

Beachten Sie, dass / in XPath und > in CSS-Selektor für den Pfad stehen zum sofortigen Kind-Knoten während // in XPath und Raum in CSS-Selektor - für den Pfad Nachkommen Knoten

Beachten Sie auch, dass XPath-Syntax .../text() nicht in Selenium funktioniert: statt Textknoten zu suchen, müssen Sie ld lokalisieren Eltern WebElement und rufen Sie dann getText() Methode

Verwandte Themen