出于某种原因,在XPath中放置索引将返回整个对象数组,而不是索引处的对象数组。
我正在处理的HTML如下所示:
<ul id="permission-list" style="padding-top:0px">
<li id="10-list-item" data-model="{"Id":10,"Name":"General","GroupName":"","DescStr":" ","Type":0}" class="topLevel">
<i onclick="ExpandableIcon(this)" href="#collapse-10" data-toggle="collapse" class="fa permission-collapse clickable fa-minus-square-o" aria-hidden="true" aria-expanded="true"></i> -
<label class="custom-control custom-checkbox mb-2 mr-sm-2 mb-sm-0">
<input onchange="PermissionCheckOnChange(this,15)" type="checkbox" class="custom-control-input" value="">
<span class="custom-control-indicator"></span>
</label> General (
<span class="selected-permission">0</span> of 6 )
<blockquote class="blockquote permission-description">
<p class="mb-0" style=" color: #5d9cc3;">
</p>
</blockquote>
<ul class="permission-item-list collapse show" id="collapse-10" style="">
<li id="10100-list-item" data-model="{"Id":10100,"Name":"System","GroupName":"","DescStr":"General System Permissions","Type":0}">
<label class="custom-control custom-checkbox mb-2 mr-sm-2 mb-sm-0">
<input onchange="PermissionCheckOnChange(this,15)" type="checkbox" class="custom-control-input" value="">
<span class="custom-control-indicator"></span>
</label> System
<blockquote class="blockquote permission-description">
<p class="mb-0" style=" color: #5d9cc3;">
General System Permissions
</p>
</blockquote>
<ul class="collapse permission-item-list" id="collapse-10100">
</ul>
</li>
<li id="10500-list-item" data-model="{"Id":10500,"Name":"Printer","GroupName":"","DescStr":"Printer's permissions","Type":0}">
<i onclick="ExpandableIcon(this)" href="#collapse-10500" data-toggle="collapse" class="fa permission-collapse clickable fa-minus-square-o" aria-hidden="true" aria-expanded="true"></i> -
<label class="custom-control custom-checkbox mb-2 mr-sm-2 mb-sm-0" id="checkboxOfInterest">
<input onchange="PermissionCheckOnChange(this,15)" type="checkbox" class="custom-control-input" value="">
<span class="custom-control-indicator"></span>
</label> Printer (
<span class="selected-permission">0</span> of 4 )
<blockquote class="blockquote permission-description">
<p class="mb-0" style=" color: #5d9cc3;">
Printer's permissions
</p>
</blockquote>
<ul class="permission-item-list collapse show" id="collapse-10500" style="">
<li id="1050001-list-item" data-model="{"Id":1050001,"Name":"Add New Printer","GroupName":"","DescStr":"Add Printer","Type":0}">
<label class="custom-control custom-checkbox mb-2 mr-sm-2 mb-sm-0">
<input onchange="PermissionCheckOnChange(this,15)" type="checkbox" class="custom-control-input" value="">
<span class="custom-control-indicator"></span>
</label> Add New Printer
<blockquote class="blockquote permission-description">
<p class="mb-0" style=" color: #5d9cc3;">
Add Printer
</p>
</blockquote>
</li>
<li id="1050002-list-item" data-model="{"Id":1050002,"Name":"Edit Printer","GroupName":"","DescStr":"Edit Printer","Type":0}">
<label class="custom-control custom-checkbox mb-2 mr-sm-2 mb-sm-0">
<input onchange="PermissionCheckOnChange(this,15)" type="checkbox" class="custom-control-input" value="">
<span class="custom-control-indicator"></span>
</label> Edit Printer
<blockquote class="blockquote permission-description">
<p class="mb-0" style=" color: #5d9cc3;">
Edit Printer
</p>
</blockquote>
</li>
<li id="1050003-list-item" data-model="{"Id":1050003,"Name":"Delete Printer","GroupName":"","DescStr":"Delete Printer","Type":0}">
<label class="custom-control custom-checkbox mb-2 mr-sm-2 mb-sm-0">
<input onchange="PermissionCheckOnChange(this,15)" type="checkbox" class="custom-control-input" value="">
<span class="custom-control-indicator"></span>
</label> Delete Printer
<blockquote class="blockquote permission-description">
<p class="mb-0" style=" color: #5d9cc3;">
Delete Printer
</p>
</blockquote>
</li>
<li id="1050010-list-item" data-model="{"Id":1050010,"Name":"Print","GroupName":"","DescStr":"it's value contains the list of levels which can use to print","Type":0}">
<label class="custom-control custom-checkbox mb-2 mr-sm-2 mb-sm-0">
<input onchange="PermissionCheckOnChange(this,15)" type="checkbox" class="custom-control-input" value="">
<span class="custom-control-indicator"></span>
</label> Print
<blockquote class="blockquote permission-description">
<p class="mb-0" style=" color: #5d9cc3;">
it's value contains the list of levels which can use to print
</p>
</blockquote>
</li>
</ul>
</li>
</ul>
</li>
<li id="50-list-item" data-model="{"Id":50,"Name":"POS","GroupName":"","DescStr":"","Type":0}" class="topLevel">
<i onclick="ExpandableIcon(this)" href="#collapse-50" data-toggle="collapse" class="fa permission-collapse clickable fa-minus-square-o" aria-hidden="true" aria-expanded="true"></i> -
<label class="custom-control custom-checkbox mb-2 mr-sm-2 mb-sm-0">
<input onchange="PermissionCheckOnChange(this,15)" type="checkbox" class="custom-control-input" value="">
<span class="custom-control-indicator"></span>
</label> POS (
<span class="selected-permission">0</span> of 2 )
<blockquote class="blockquote permission-description">
<p class="mb-0" style=" color: #5d9cc3;">
</p>
</blockquote>
<ul class="permission-item-list collapse show" id="collapse-50" style="">
<li id="50100-list-item" data-model="{"Id":50100,"Name":"General","GroupName":"","DescStr":"General POS Permissions","Type":0}">
<i onclick="ExpandableIcon(this)" href="#collapse-50100" data-toggle="collapse" class="fa fa-plus-square-o permission-collapse clickable" aria-hidden="true"></i> -
<label class="custom-control custom-checkbox mb-2 mr-sm-2 mb-sm-0">
<input onchange="PermissionCheckOnChange(this,15)" type="checkbox" class="custom-control-input" value="">
<span class="custom-control-indicator"></span>
</label> General (
<span class="selected-permission">0</span> of 1 )
<blockquote class="blockquote permission-description">
<p class="mb-0" style=" color: #5d9cc3;">
General POS Permissions
</p>
</blockquote>
<ul class="collapse permission-item-list" id="collapse-50100">
<li id="5010010-list-item" data-model="{"Id":5010010,"Name":"POS Login","GroupName":"","DescStr":"Login into pos","Type":0}">
<label class="custom-control custom-checkbox mb-2 mr-sm-2 mb-sm-0">
<input onchange="PermissionCheckOnChange(this,15)" type="checkbox" class="custom-control-input" value="">
<span class="custom-control-indicator"></span>
</label> POS Login
<blockquote class="blockquote permission-description">
<p class="mb-0" style=" color: #5d9cc3;">
Login into pos
</p>
</blockquote>
</li>
</ul>
</li>
</ul>
</li>
</ul>的屏幕截图
这里有一个HTML的截图,简化了。

我想做什么,
我正在尝试针对复选框编写Selenium测试。选中叶复选框只应选中该叶复选框,而选中父复选框也应选中子复选框。
我的XPath选择器
在这段代码中,为了便于编写XPath选择器,我在开发人员控制台中在其中一个字段上放置了一个ID。特别是这一次:
<label class="custom-control custom-checkbox mb-2 mr-sm-2 mb-sm-0" id="checkboxOfInterest">
<input onchange="PermissionCheckOnChange(this,15)" type="checkbox" class="custom-control-input" value="">
<span class="custom-control-indicator"></span>
</label>我的完整的XPath选择器,在容器中包含我想要的,然后变成
id("checkboxOfInterest")/ancestor::li//ul[contains(concat(" ", @class, " "), " permission-item-list ")][1]期望
我希望在开发人员控制台中返回:
ul#collapse-10500.permission-item-list.collapse.showReality
相反,我得到了以下Array:
[ul#collapse-10500.permission-item-list.collapse.show, ul#collapse-10.permission-item-list.collapse.show, ul#collapse-10100.collapse.permission-item-list]对不起,这是长篇大论,但谁能引导我为什么要这样做,我的选择是什么?
发布于 2018-07-09 15:30:10
您需要了解context position和document order在XPath Axis中的清晰概念,如下所示:

你可以从W3C XPATH规范上找到上面的笔记
要解决您的问题,可以尝试id("checkboxOfInterest")/ancestor::li[1]//ul
发布于 2018-07-09 14:46:42
你能试试-
id("checkboxOfInterest")/ancestor::li/ul[contains(@class, "permission-item-list ")][1]发布于 2018-07-09 17:41:29
谓词1应用于表达式的最后一步,而不是整个表达式。例如,x/y[1]将返回每个x的第一个y子级。如果只希望表达式x/y的结果中的第一项,请使用括号:(x/y)[1]。
https://stackoverflow.com/questions/51247612
复制相似问题