Selenium XPATH找到了子div标签,如何转到包含text参数的父标签

时间:2016-03-06 17:15:41

标签: python-2.7 selenium xpath selenium-webdriver

我有一个带有一些嵌套div标签的html页面。标签有ID,但不是固定值。当用户在页面上添加和删除项目时,它会发生变化。 找到我要找的元素的最佳方法是通过文字。

每个父级都有“清洁”文本 - 无法从此处找到,因为它不是唯一的。 每个父母都有一个孩子,孩子文本的末尾部分是不同的 例如。文字是“Clean feed crm”或“Clean feed escr”等等

E.g。家长“干净” - >孩子“清洁饲料crm” 家长“干净” - >孩子“清洁饲料escr”

我想在子标签“Clean feed escr”中找到父标记文本“Clean” 从下面的html示例中,它的当前ID是id =“operations_edit_process_list_task_4 但是这个ID会改变,所以我不能使用ID来获取这个元素。

我可以使用XPATH找到孩子“Clean feed escr”。我不知道如何通过标签来获取“清洁”文本

我的XPATH是:

//span[contains(text(), "Clean feed escr")]

HTML示例是(我删除了一些div标签,否则粘贴太长了)

<div id="operations_edit_process_list_task_3">
    <span>
        <span class="myinlineblock" title="Clean" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;width:100%;">Clean</span>
    </span>
    <span/>
    <span>
</div>
// Few More div tags

<div id="operations_edit_process_list_task_3_1">
    <span>
        <span class="myinlineblock" title="Clean feed escr" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;width:100%;margin-right:-14px;">Clean feed escr</span>
    </span>
    <span>
</div>
// Few More div tags

<div id="operations_edit_process_list_task_4">
    <span>
        <span class="myinlineblock" title="Clean" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;width:100%;">Clean</span>
    </span>
    <span/>
    <span>
</div>
// Few More div tags

<div id="operations_edit_process_list_task_4_1">
    <span>
        <span class="myinlineblock" title="Clean feed orchard" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;width:100%;margin-right:-14px;">Clean feed orchard</span>
    </span>
</div>

我认为祖先可以用到它的直接父标签,但我不知道它的语法。 我尝试过以下方法:

//span[contains(text(), "Clean feed escr")]//ancestor::div[contains(text(), "Clean")]

谢谢, 里亚兹

4 个答案:

答案 0 :(得分:1)

在我看来,这将是一个更清洁的方法:

"//div[.//span/text()='Clean feed escr']/following::div[.//span/text()='Clean'][1]"

答案 1 :(得分:1)

通过过滤span子项来获得下一个div兄弟:

"//span[@title='Clean feed escr']/ancestor::div[1]/following-sibling::div[.//span[@title='Clean']][1]"

答案 2 :(得分:1)

借助以下建议,我设法使用Preceding轴找到元素。之前是因为我想把树上到它的父母那里。不是&#39;以下&#39;轴。下面是树下到它的孩子们。 Xpath是:

//div[.//span/text()='Clean feed escr']/ancestor::div[1]/preceding::div[1]//span[@title="Clean"]

答案 3 :(得分:0)

This视频肯定会帮助你,因为它已经正确定义了XPath的所有方法,如父级,后级兄弟,兄弟之前以及其他方法。