使用By.XPATH按双条件定位元素并点击其第二个兄弟元素问题排查
问题分析与修复
你的XPath表达式存在三个关键错误:
- 语法错误:
followingsibling应为following-sibling(XPath轴名称必须包含连字符) - 逻辑错误:同一个
<td>元素不可能同时包含"Renewal"和"1"两个文本值,这两个条件对应同一行<tr>下的不同单元格 - 语法错误:
@text()是错误写法,获取元素文本内容需用text()函数,而非属性调用
正确的XPath写法
根据表格结构,提供两种通用修复方案:
方案1:先定位符合条件的行,再找目标元素
先匹配同时包含"Renewal"和"1"的行,再在该行内定位目标兄弟元素:
driver.find_element(By.XPATH, "//tr[td[text()='Renewal'] and td[text()='1']]/td/following-sibling::td[2]/a").click()
方案2:从Type列单元格向上关联父行验证条件
先定位包含"Renewal"的单元格,再向上找到父行并验证该行存在Seq#为1的单元格,最后定位目标元素:
driver.find_element(By.XPATH, "//td[text()='Renewal']/parent::tr[td[text()='1']]/td/following-sibling::td[2]/a").click()
额外优化提示
如果单元格文本存在空格、换行等干扰字符,可使用normalize-space()处理,避免匹配失败:
driver.find_element(By.XPATH, "//tr[td[normalize-space(text())='Renewal'] and td[normalize-space(text())='1']]/td/following-sibling::td[2]/a").click()
内容的提问来源于stack exchange,提问作者Arthur Langlois
相关产品推荐
相关产品推荐

