当前位置: 首页 > 知识库问答 >
问题:

使用Xpath Contains函数查找包含文本的元素

归鹤龄
2023-03-14

我一直在为selenium Xpath定位器使用Contains函数。到目前为止,这个功能一直有效。它目前不适用于表中的TD元素。我正在向函数发送正确的文本,所以我不明白为什么。

在Chrome上,转到此处:https://rcpsc.releasecandidate-community360qa.net/login.aspx?action=enablelogin

登录:mj4/test

向下滚动至“计划学习计划”选项卡

对象检查表示过渡到纪律(4)的行。您将看到这个元素是一个带有innerText的“向纪律过渡”的TD元素。

现在,在开发人员工具的元素选项卡中按Ctrl F按字符串、选择器或Xpath查找。键入以下内容以尝试通过Xpath查找://td[包含(text(),'纪律')]它找不到该元素。这是为什么呢?

现在键入//*[contains(text(),'production')]它会找到一个包含此文本的DIV元素,但这不是我想要/需要的元素。

如何找到td元素。请注意,我需要使用文本查找此元素。

以下是查找元素的代码:

string xpath = string.Format("//td[contains(text(),'{0}')]", "Discipline");
IWebElement elemToExpandOrCollapse = PrgLrnPlanTbl.FindElement(By.XPath(xpath));

以下是超文本标记语言:

<tbody ng-repeat="stage in vm.Stages.PortfolioEPAStages" class="ng-scope">
    <tr>
        <td class="text-left ng-binding" colspan="2">
            <!-- ngIf: stage.EPACount --><span ng-if="stage.EPACount" class="ng-scope"><span role="button" ng-hide="vm.isStageExpand==true &amp;&amp; stage.StageId==vm.selectedStageId" ng-click="vm.toggleStages(stage.StageId)" tabindex="0" cbd-enter="" first-tab="" class="ng-hide"><img class="" src="/cbd/Content/images/icons/icon.expand.png" alt="Expand"></span> <span role="button" ng-show="vm.isStageExpand==true &amp;&amp; stage.StageId==vm.selectedStageId" ng-click="vm.toggleStages()" tabindex="0" cbd-enter="" first-tab="" class=""><img class="" src="/cbd/Content/images/icons/icon.collapse.png" alt="Collapse"> </span> </span><!-- end ngIf: stage.EPACount --><!-- ngIf: stage.EPACount <=0 -->Transition to Discipline (4)
        </td>
    </tr>
    <!-- ngIf: stage.StageId==vm.selectedStageId --><tr ng-if="stage.StageId==vm.selectedStageId" class="ng-scope">
        <!-- ngIf: stage.EPACount>0 --><td colspan="2" ng-if="stage.EPACount>0" style="padding:0px;" class="ng-scope">
            <!--<div class=" row">
            <div class="col-md-12">
                -->

共有2个答案

钱浩荡
2023-03-14

请试试这个:

//td[@class='text-left ng-binding' and ./span[contains(.,'Discipline')]]

//td[@class='text-left ng-binding' and ./span/text()='Transition to Discipline (4)']
钮兴安
2023-03-14

XPath不起作用,因为字符串“规程”不出现在td元素的第一个文本节点子节点中,而是出现在随后的文本节点中。您使用的是XPath 1.0处理器(天知道为什么Selenium没有发展到更现代的版本),在XPath 1.0中,规则是包含(X,Y),当X是一组节点时,只考虑该组中的第一个节点,而忽略其他节点。

我认为最符合您所述要求的是类似于//td[包含(,“规程”)]

 类似资料:
  • 问题内容: 如果我搜索单个字符串,则效果很好: 但是我可以在下面的示例中有一个 or 语句吗? 问题答案: 在两个函数调用之间说 或使用函数使xpath不区分大小写

  • 该页面包含一个多选下拉列表(类似于下面的一个) html代码如下所示: 在firefox开发工具中进行测试后,我终于能够找出获取某个标签的文本所需的xPath。。。 下面的XPath语句将返回文本“Phone” 标签元素中包含多个文本项(尽管在查看UI时似乎只有一个文本对象)。每个标签元素中实际上有两个文本元素。第一个总是空的,第二个包含实际的文本(如下图所示,当通过火狐开发者工具的控制台窗口观察

  • 我正在寻求有关XPath选择器的帮助。我已经学习了XPath的基础知识,但是我很难将它们结合起来解决这个问题。 所以我有一个HTML格式的网格,包含大约30行,每行(从左到右)都有一个复选框和员工姓名。以下是行组成的一个片段: 我的目标是找到:div class=“ui grid row ng scope”data row num=“21” 到目前为止,我得到的是: 有人能帮我指一下正确的方向吗?

  • 我想找到一个标题包含字符串的锚 这就是我所拥有的: 我需要抓住这些锚。我只知道他们的书名里有Permalink这个词。标题的其余部分各不相同。 我试过这个: 我希望得到元素,但什么也得不到。

  • 问题内容: 我正在尝试获取HTML文档中包含以下文本模式的元素:#\ S {11} 因此,前者将通过使用以下内容进行匹配: 结果将是这样的: 我可以获取所有匹配的文本(请参见上面的行)。但是我希望文本的父元素匹配,因此我可以将其用作遍历文档树的起点。在这种情况下,我希望所有h2元素都返回,而不是文本匹配。 有想法吗? 问题答案: 印刷品:

  • 我正在尝试解决这个算法问题: https://dunjudge.me/analysis/problems/469/ 为了方便起见,我总结了下面的问题陈述。 给定一个长度为 ( 多数元素定义为发生的元素 时限:1.5s 例如: 如果给定的数组是[1,2,1,2,3,2], 答案是5,因为从位置1到5 (0索引)的长度为5的子数组[2,1,2,3,2]具有出现为3的数字2 首先想到的是一个明显的强力(