Java Xpath和cssselector在::before和::after的情况下似乎不灵活
HTMLJava 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
<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)
/
和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)