xpath的Selenium WebDriver:在子元素中按文本搜索

时间:2017-04-14 12:30:35

标签: selenium xpath

我正在使用Selenium WebDriver。 (Java,如果重要的话)。

我需要找到一个元素,除其他外,搜索下属元素下的文本。我目前通过循环遍历元素列表并将getText()与我想要的值进行比较来实现它,但我怀疑让浏览器通过xpath执行它会更好。

例如,这是我想要找到的元素:

<span role="button" class="mblToolBarButton mblToolBarButtonHasLeftArrow" tabindex="0" id="dojox_mobile_ToolBarButton_3" dir="ltr" widgetid="dojox_mobile_ToolBarButton_3"><span class="mblToolBarButtonArrow mblToolBarButtonLeftArrow mblColorDefault mblColorDefault45"></span><span class="mblToolBarButtonBody mblColorDefault"><table cellpadding="0" cellspacing="0" border="0" role="presentation" class="mblToolBarButtonText"><tbody><tr><td class="mblToolBarButtonIcon"></td><td class="mblToolBarButtonLabel">Back</td></tr></tbody></table></span></span>

在线搜索后,我尝试了以下选择器:

//*[contains(@class,'mblToolBarButtonHasLeftArrow') and text()[contains(.,'Back')]]

但它没有用。

理想情况下,我想搜索整个文本,而不是子字符串,以便找到带有“Back”文本的元素,但找不到另一个带有“Backup”文本的类似元素。我不需要在不同的子元素中连接文本。

我应该写什么选择器?谢谢!

2 个答案:

答案 0 :(得分:2)

你可以使用这样的结构:

//*[contains(@class,'mblToolBarButtonHasLeftArrow') and .//*[text()='Back']]

查找父元素,其中包含具有指定文本的子元素。通过这种方式,元素与文本&#39; Back&#39;将被找到,但元素与&#39;备份&#39;不会。

顺便说一下:提供可读的html片段而不是长线更礼貌。例如:

<span role="button" class="mblToolBarButton mblToolBarButtonHasLeftArrow" tabindex="0" id="dojox_mobile_ToolBarButton_3" dir="ltr" widgetid="dojox_mobile_ToolBarButton_3">
    <span class="mblToolBarButtonArrow mblToolBarButtonLeftArrow mblColorDefault mblColorDefault45"></span>
    <span class="mblToolBarButtonBody mblColorDefault">
        <table cellpadding="0" cellspacing="0" border="0" role="presentation" class="mblToolBarButtonText">
            <tbody>
                <tr>
                    <td class="mblToolBarButtonIcon"></td>
                    <td class="mblToolBarButtonLabel">Back</td>
                </tr>
            </tbody>
        </table>
    </span>
</span>

答案 1 :(得分:0)

你正在寻找下面的东西吗?

// * [text()=&#39; Back&#39;] / ancestor :: * [@ class =&#39; mblToolBarButton mblToolBarButtonHasLeftArrow&#39;]