You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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">=&nbsp;6</p>
<p data-inp="3+3" title="3+3" class="l">3+3</p>
</li>

<li>
<p title="4" class="r">=&nbsp;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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:05:41