Java Xpath和cssselector在::before和::after的情况下似乎不灵活

Java Xpath和cssselector在::before和::after的情况下似乎不灵活,java,xpath,selenium-webdriver,Java,Xpath,Selenium Webdriver,HTML <li>::before<a href="#county" class="eods-error">::before"County is required."::after</a></li> ::之前 基于上述html,我编写了以下内容: css选择器:#eods error>div>div.eods-error-box>ul>li:n子项(1) xpath:/*[@id=“eods error”]/div/div[1]/ul/li[1

HTML

<li>::before<a href="#county" class="eods-error">::before"County is required."::after</a></li>
  • ::之前
  • 基于上述html,我编写了以下内容:

    css选择器
    #eods error>div>div.eods-error-box>ul>li:n子项(1)

    xpath
    /*[@id=“eods error”]/div/div[1]/ul/li[1]/a/text()

    我使用SeleniumWebDriver和java实现自动化。要基于上述给定的HTML定位元素,我使用了上述不同的2个定位器。但如果在html中添加新元素/div,似乎会产生问题

    是否有其他方法可以使用更详细的xpath来定位上述元素,这样即使附加的DIV以html形式出现,xpath也不会失败

    html部分的屏幕截图:

    您可以在下面使用

    • XPath

      //a[@href="#county"]
      
    • CSS选择器

      a[href="#county"]
      
    匹配所需的锚

    如果您希望当前选择器与之匹配,而不管是否存在临时
    div
    ,则可以使用以下语法

    • XPath。改变

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

    • CSS选择器。改变

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

    请注意,XPath中的
    /
    和CSS选择器中的
    表示直接子节点的路径,而XPath中的
    /
    和CSS选择器中的空格表示子节点的路径


    还要注意,XPath语法
    ../text()
    在Selenium中不起作用:您不应该定位文本节点,而是应该定位父WebElement,然后调用
    getText()
    method

    您能解释一下额外的
    div
    是什么意思吗?在有附加
    div
    和无附加
    的情况下共享HTMLit@Andersson-我的意思是,如果在html中添加新元素,那么我编写的xpath/cssseletor可能会失败。可能吗?它肯定会失败:)你检查我的答案了吗?是的,它能工作。谢谢:)
    
    #eods-error > div > div.eods-error-box > ul > li:nth-child(1)
    
    #eods-error div.eods-error-box > ul > li:nth-child(1)