请求编写符合多条件的XPATH以定位并点击复选框
定位满足多条件的表格行复选框
需求说明
需要定位并点击满足以下三个条件的表格行对应的复选框:
- 请求者姓名为Linda Jane Anderson的DIV
- 休假类型为CAN - Personal的DIV
- 休假状态包含Pending Approval的DIV
提供的HTML源码
<div class="oxd-table-card" data-v-f2168256="" style=""> <div class="oxd-table-row oxd-table-row--with-border" role="row" data-v-0d5ef602="" data-v-f2168256="" style=""> <div class="oxd-table-cell oxd-padding-cell" role="cell" style=""> <div class="oxd-table-card-cell-checkbox"> <div class="oxd-checkbox-wrapper" data-v-6179b72a="" style=""> <label class="" data-v-6179b72a=""> <!----> <input type="checkbox" value="0" data-v-6179b72a=""/> <span class="oxd-checkbox-input oxd-checkbox-input--active --label-right oxd-checkbox-input" data-v-6179b72a=""> <i class="oxd-icon bi-check oxd-checkbox-input-icon" data-v-bddebfba="" data-v-6179b72a=""/> </span> </label> </div> </div> </div> <div class="oxd-table-cell oxd-padding-cell" role="cell" style="flex: 1 1 0%;"> <div data-v-6c07a142="">25-07-2022 (09:00 - 13:00) Half Day </div> </div> <div class="oxd-table-cell oxd-padding-cell" role="cell" style="flex: 1 1 0%;"> <div data-v-6c07a142="">Anthony Nolan </div> </div> <div class="oxd-table-cell oxd-padding-cell" role="cell" style="flex: 1 1 0%;"> <div data-v-6c07a142="">CAN - Personal </div> </div> <div class="oxd-table-cell oxd-padding-cell" role="cell" style="flex: 1 1 0%;"> <div data-v-6c07a142="">12.50 </div> </div> <div class="oxd-table-cell oxd-padding-cell" role="cell" style="flex: 1 1 0%;"> <div data-v-6c07a142="">0.50 </div> </div> <div class="oxd-table-cell oxd-padding-cell" role="cell" style="flex: 1 1 0%;"> <div data-v-6c07a142="">Pending Approval (0.50) </div> </div> <div class="oxd-table-cell oxd-padding-cell" role="cell" style="flex: 1 1 5%;"> <div data-v-6c07a142=""/> </div> <div class="oxd-table-cell oxd-padding-cell" role="cell" style="flex: 1 1 20%;"> <div class="oxd-table-cell-actions" data-v-c423d1fa=""> <button type="button" class="oxd-button oxd-button--medium oxd-button--label-success oxd-table-cell-action-space" data-v-10d463b7="" data-v-c423d1fa=""> <!----> Approve <!----> </button> <button type="button" class="oxd-button oxd-button--medium oxd-button--label-danger oxd-table-cell-action-space" data-v-10d463b7="" data-v-c423d1fa=""> <!----> Reject <!----> </button> <li class="oxd-table-dropdown oxd-table-cell-action-space" disabled="false" data-v-429cfcf3="" data-v-1d22ad12="" data-v-c423d1fa="" style="margin-left: auto;"> <button class="oxd-icon-button" type="button" data-v-f5c763eb="" data-v-1d22ad12=""> <i class="oxd-icon bi-three-dots-vertical" data-v-bddebfba="" data-v-f5c763eb=""> </i> </button> <!----> </li> </div> </div> </div> </div>
尝试的无效XPath
//div[contains(text(), "Linda Jane Anderson")] /following::div[contains(text(), "CAN - Personal")] /following::div[contains(text(),"Pending")] /../preceding-sibling::div//input[@type="checkbox"]
解决方案
正确的XPath写法
写法一:基于父行的多条件匹配
//div[@role='row' and .//div[contains(text(), 'Linda Jane Anderson')] and .//div[contains(text(), 'CAN - Personal')] and .//div[contains(text(), 'Pending Approval')]]//input[@type='checkbox']
写法二:分步筛选行(逻辑更清晰)
//div[@role='row'] [.//div[contains(text(), 'Linda Jane Anderson')]] [.//div[contains(text(), 'CAN - Personal')]] [.//div[contains(text(), 'Pending Approval')]] //input[@type='checkbox']
思路说明
之前的XPath错误在于使用following::div会跨多个行匹配元素,无法确保三个条件都属于同一行。正确的思路是:
- 先定位同时满足三个条件的表格行(即
div[@role='row']元素) - 再在该行内查找目标复选框元素
这样就能保证所有筛选条件都属于同一数据行,不会匹配到其他行的元素。
内容的提问来源于stack exchange,提问作者Farhan Soomro
相关产品推荐
相关产品推荐

