Xpath如何找到两个兄弟姐妹之间的元素,其中有一个独特的属性

时间:2017-12-01 13:52:33

标签: xpath

我需要在具有给定文本的第一个兄弟XCUIElementTypeCell和第二个兄弟XCUIElementTypeOther之间找到兄弟姐妹XCUIElementTypeOther,其中还有文字(参见图片),但是在搜索时我们不知道这个文本(所以我们假设它没有唯一的属性)。我试着写这样的东西:

//XCUIElementTypeCell/XCUIElementTypeStaticText[preceding::XCUIElementTypeOther[./XCUIElementTypeStaticText[@name="' + text + '"]]][following::XCUIElementTypeOther[./XCUIElementTypeStaticText][1]]

但它不起作用(在第一个之后查找所有兄弟XCUIElementTypeCell)。我无法弄清楚如何在xpath中定义。 我试图在已经提出的问题中找到答案,但尝试失败了。

source

2 个答案:

答案 0 :(得分:2)

您应该只能测试第一个preceding-sibling::XCUIElementTypeOther,其子XCUIElementTypeStaticText的属性name的值为text变量......

//XCUIElementTypeCell[preceding-sibling::XCUIElementTypeOther[1][XCUIElementTypeStaticText/@name="' + text + '"]]

例如使用此输入...

<doc>
    <XCUIElementTypeCell>1</XCUIElementTypeCell>
    <XCUIElementTypeCell>2</XCUIElementTypeCell>
    <XCUIElementTypeCell>3</XCUIElementTypeCell>
    <XCUIElementTypeOther>
        <XCUIElementTypeStaticText name="not me"/>
    </XCUIElementTypeOther>
    <XCUIElementTypeCell>4</XCUIElementTypeCell>
    <XCUIElementTypeCell>5</XCUIElementTypeCell>
    <XCUIElementTypeCell>6</XCUIElementTypeCell>
    <XCUIElementTypeCell>7</XCUIElementTypeCell>
    <XCUIElementTypeOther>
        <XCUIElementTypeStaticText name="pick me"/>
    </XCUIElementTypeOther>
    <XCUIElementTypeCell>8</XCUIElementTypeCell>
    <XCUIElementTypeCell>9</XCUIElementTypeCell>
    <XCUIElementTypeCell>10</XCUIElementTypeCell>
    <XCUIElementTypeCell>11</XCUIElementTypeCell>
    <XCUIElementTypeOther>
        <XCUIElementTypeStaticText name="not me"/>
    </XCUIElementTypeOther>
    <XCUIElementTypeCell>12</XCUIElementTypeCell>
    <XCUIElementTypeCell>13</XCUIElementTypeCell>
    <XCUIElementTypeCell>14</XCUIElementTypeCell>
    <XCUIElementTypeCell>15</XCUIElementTypeCell>
</doc>

使用此XPath ...

//XCUIElementTypeCell[preceding-sibling::XCUIElementTypeOther[1][XCUIElementTypeStaticText/@name="pick me"]]

选定的XCUIElementTypeCell元素将是......

<XCUIElementTypeCell>8</XCUIElementTypeCell>
<XCUIElementTypeCell>9</XCUIElementTypeCell>
<XCUIElementTypeCell>10</XCUIElementTypeCell>
<XCUIElementTypeCell>11</XCUIElementTypeCell>

答案 1 :(得分:1)

以下表达式应该起作用

//XCUIElementTypeOther[XCUIElementTypeStaticText/@name = 'your text here']/following-sibling::XCUIElementTypeOther[1]/preceding-sibling::XCUIElementTypeCell