首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回整个数组的XPath索引选择器,而不是索引处的元素

返回整个数组的XPath索引选择器,而不是索引处的元素
EN

Stack Overflow用户
提问于 2018-07-09 14:10:14
回答 3查看 488关注 0票数 0

出于某种原因,在XPath中放置索引将返回整个对象数组,而不是索引处的对象数组。

我正在处理的HTML如下所示:

代码语言:javascript
复制
<ul id="permission-list" style="padding-top:0px">

    <li id="10-list-item" data-model="{&quot;Id&quot;:10,&quot;Name&quot;:&quot;General&quot;,&quot;GroupName&quot;:&quot;&quot;,&quot;DescStr&quot;:&quot; &quot;,&quot;Type&quot;: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="{&quot;Id&quot;:10100,&quot;Name&quot;:&quot;System&quot;,&quot;GroupName&quot;:&quot;&quot;,&quot;DescStr&quot;:&quot;General System Permissions&quot;,&quot;Type&quot;: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="{&quot;Id&quot;:10500,&quot;Name&quot;:&quot;Printer&quot;,&quot;GroupName&quot;:&quot;&quot;,&quot;DescStr&quot;:&quot;Printer's permissions&quot;,&quot;Type&quot;: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="{&quot;Id&quot;:1050001,&quot;Name&quot;:&quot;Add New Printer&quot;,&quot;GroupName&quot;:&quot;&quot;,&quot;DescStr&quot;:&quot;Add Printer&quot;,&quot;Type&quot;: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="{&quot;Id&quot;:1050002,&quot;Name&quot;:&quot;Edit Printer&quot;,&quot;GroupName&quot;:&quot;&quot;,&quot;DescStr&quot;:&quot;Edit Printer&quot;,&quot;Type&quot;: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="{&quot;Id&quot;:1050003,&quot;Name&quot;:&quot;Delete Printer&quot;,&quot;GroupName&quot;:&quot;&quot;,&quot;DescStr&quot;:&quot;Delete Printer&quot;,&quot;Type&quot;: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="{&quot;Id&quot;:1050010,&quot;Name&quot;:&quot;Print&quot;,&quot;GroupName&quot;:&quot;&quot;,&quot;DescStr&quot;:&quot;it's value contains the list of levels which can use to print&quot;,&quot;Type&quot;: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="{&quot;Id&quot;:50,&quot;Name&quot;:&quot;POS&quot;,&quot;GroupName&quot;:&quot;&quot;,&quot;DescStr&quot;:&quot;&quot;,&quot;Type&quot;: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="{&quot;Id&quot;:50100,&quot;Name&quot;:&quot;General&quot;,&quot;GroupName&quot;:&quot;&quot;,&quot;DescStr&quot;:&quot;General POS Permissions&quot;,&quot;Type&quot;: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="{&quot;Id&quot;:5010010,&quot;Name&quot;:&quot;POS Login&quot;,&quot;GroupName&quot;:&quot;&quot;,&quot;DescStr&quot;:&quot;Login into pos&quot;,&quot;Type&quot;: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。特别是这一次:

代码语言:javascript
复制
<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选择器,在容器中包含我想要的,然后变成

代码语言:javascript
复制
id("checkboxOfInterest")/ancestor::li//ul[contains(concat(" ", @class, " "), " permission-item-list ")][1]

期望

我希望在开发人员控制台中返回:

代码语言:javascript
复制
ul#collapse-10500.permission-item-list.collapse.show

Reality

相反,我得到了以下Array:

代码语言:javascript
复制
[ul#collapse-10500.permission-item-list.collapse.show, ul#collapse-10.permission-item-list.collapse.show, ul#collapse-10100.collapse.permission-item-list]

对不起,这是长篇大论,但谁能引导我为什么要这样做,我的选择是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-09 15:30:10

您需要了解context positiondocument order在XPath Axis中的清晰概念,如下所示:

你可以从W3C XPATH规范上找到上面的笔记

要解决您的问题,可以尝试id("checkboxOfInterest")/ancestor::li[1]//ul

票数 1
EN

Stack Overflow用户

发布于 2018-07-09 14:46:42

你能试试-

代码语言:javascript
复制
id("checkboxOfInterest")/ancestor::li/ul[contains(@class, "permission-item-list ")][1]
票数 0
EN

Stack Overflow用户

发布于 2018-07-09 17:41:29

谓词1应用于表达式的最后一步,而不是整个表达式。例如,x/y[1]将返回每个x的第一个y子级。如果只希望表达式x/y的结果中的第一项,请使用括号:(x/y)[1]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51247612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档