如何用Selenium Java从<ul><li>标签定位title=6的元素并断言结果?
问题描述
在https://web2.0calc.com/上执行两次计算(2+2和3+3)并断言结果时,首次计算2+2的断言通过,但执行3+3时,原XPath表达式/html/body/div[3]/div[3]/ul/li[1]/p[1]仍返回结果4,无法定位到title="6"的元素。页面相关HTML结构如下:
<ul> <li> <p title="6" class="r">= 6</p> <p data-inp="3+3" title="3+3" class="l">3+3</p> </li> <li> <p title="4" class="r">= 4</p> <p data-inp="2+2" title="2+2" class="l">2+2</p> </li> </ul>
解决方案
原XPath依赖固定节点索引,页面中最新计算结果会排在列表顶部,多次计算后索引定位会失效。以下是几种更可靠的定位方式:
1. 直接通过title属性定位目标结果
精准匹配title="6"的元素:
WebElement resultElement = driver.findElement(By.xpath("//p[@title='6']")); String resultTitle = resultElement.getAttribute("title"); System.out.println(resultTitle); Assert.assertEquals(resultTitle, "6");
2. 关联输入表达式定位对应结果
根据计算式动态匹配关联结果,适合需要按输入匹配的场景:
// 定位输入为3+3的元素 WebElement inputElement = driver.findElement(By.xpath("//p[@data-inp='3+3']")); // 定位同层级的结果元素 WebElement resultElement = inputElement.findElement(By.xpath("./../p[@class='r']")); String resultTitle = resultElement.getAttribute("title"); System.out.println(resultTitle); Assert.assertEquals(resultTitle, "6");
3. 定位最新计算结果
页面会将最新计算放在列表最上方,直接取第一个结果元素即可:
WebElement latestResultElement = driver.findElement(By.xpath("//ul/li[1]/p[@class='r']")); String latestResultTitle = latestResultElement.getAttribute("title"); System.out.println(latestResultTitle); Assert.assertEquals(latestResultTitle, "6");
注意事项
- 避免使用绝对XPath,这类定位极易受页面结构变更影响,维护成本高;
- 优先使用属性匹配(如
@title、@data-inp)或类名进行相对定位,提升脚本稳定性。
内容的提问来源于stack exchange,提问作者Karolina Rybak
相关产品推荐
相关产品推荐

