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

时间:2017-11-08 16:38:47

标签: java xpath selenium-webdriver

HTML

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

基于上面的html,我写了以下内容:

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()

我使用selenium webdriver和java进行自动化。要根据上面给出的 HTML 找到一个元素,我在上面使用了diff。 2个定位器。但是,如果在html中添加了新的元素/ div,那么这些可能会产生问题。

有没有其他方法可以使用更详细的xpath找到上面的元素,所以即使其他 DIV 出现在html中,xpath也不会失败。

html部分的屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以在下面使用

  • 的XPath

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

    a[href="#county"]
    

匹配所需的锚

如果您希望当前选择器匹配它,尽管存在/不存在临时div,那么您可以使用以下语法

  • 的XPath。变化

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

    //*[@id="eods-error"]//div[1]/ul/li[1]/a/text()
    
  • CSS选择器。改变

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

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

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

另请注意,XPath语法.../text()在Selenium中不起作用:您应该找到父WebElement,然后调用getText()方法

,而不是查找文本节点