XPATH选择两个特定元素之间的所有元素

时间:2015-03-23 17:42:55

标签: xml xpath

我试图在一些自动化的Appium和Python 2.7测试中大量使用XPATH,并且正在努力使用更复杂的XPATH轴来从我的XML页面源中选择特定的元素组。

这是我一直在使用的XPath Tester / Validator:http://www.freeformatter.com/xpath-tester.html

我拥有的动态UIATable将包含一个或多个UIATableGroup,并且每个出现的UIATableGroup肯定会有一个或多个UIATableCell。

我需要做的是能够选择特定UIATableGroup中的所有UIATableCell。使事情变得复杂的是,在我希望定位的特定UIATableGroup之后可能存在或不存在另一个UIATableGroup。

这是一个示例XML页面源代码,我在每个组中使用一个UIATableCell对其进行了简化:

        <UIATableView name="" label="" value="rows 1 to 5 of 5" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1" x="0" y="75.6875" width="375" height="590.625">
            <UIATableGroup name="Cases" label="" value="" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/0" x="0" y="75.6875" width="375" height="25.78125">
                <UIAStaticText name="Cases" label="Cases" value="Cases" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/0/0" x="0" y="75.6875" width="375" height="25.78125">
                </UIAStaticText>
            </UIATableGroup>
            <UIATableCell name="Case1" label="" value="" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/1" x="0" y="101.46875" width="375" height="90.234375">
                <UIAStaticText name="CaseName1" label="CaseName1" value="CaseName1" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/1/0" x="15.234375" y="108.5" width="309.375" height="18.159378051757812">
                </UIAStaticText>
                <UIAStaticText name="CaseSeverity1" label="CaseSeverity1" value="CaseSeverity1" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/1/1" x="15.234375" y="129.0031280517578" width="62.240623474121094" height="16.3828067779541">
                </UIAStaticText>
                <UIAStaticText name="CaseStatus1" label="CaseStatus1" value="CaseStatus1" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/1/2" x="15.234375" y="148.109375" width="309.375" height="17.748043060302734">
                </UIAStaticText>
                <UIAStaticText name="CaseName1" label="CaseName1" value="CaseName1" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/1/3" x="97.3968734741211" y="129.0031280517578" width="70.3687515258789" height="16.762500762939453">
                </UIAStaticText>
            </UIATableCell>
            <UIATableGroup name="Bugs" label="" value="" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/2" x="0" y="191.703125" width="375" height="25.78125">
                <UIAStaticText name="Bugs" label="Bugs" value="Bugs" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/2/0" x="0" y="191.703125" width="375" height="25.78125">
                </UIAStaticText>
            </UIATableGroup>
            <UIATableCell name="Bug1" label="" value="" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/3" x="0" y="217.484375" width="375" height="93.75">
                <UIAStaticText name="Bug1" label="Bug1" value="Bug1" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/3/0" x="15.234375" y="222.171875" width="86.07421875" height="17.7480525970459">
                </UIAStaticText>
                <UIAStaticText name="Bug1 Description" label="Bug1 Description" value="Bug1 Description" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/3/1" x="15.234375" y="242.263671875" width="307.2620849609375" height="18.159378051757812">
                </UIAStaticText>
                <UIAStaticText name="BugDate1" label="BugDate1" value="BugDate1" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/3/2" x="15.234375" y="262.7668151855469" width="219.89291381835938" height="17.7480525970459">
                </UIAStaticText>
                <UIAStaticText name="BugSeverity1" label="BugSeverity1" value="BugSeverity1" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/3/3" x="132.421875" y="222.171875" width="175.78125" height="17.7480525970459">
                </UIAStaticText>
            </UIATableCell>
            <UIATableGroup name="Videos" label="" value="" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/4" x="0" y="311.234375" width="375" height="25.78125">
                <UIAStaticText name="Videos" label="Videos" value="Videos" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/4/0" x="0" y="311.234375" width="375" height="25.78125">
                </UIAStaticText>
            </UIATableGroup>
            <UIATableCell name="Videos1" label="" value="" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/5" x="0" y="337.015625" width="375" height="51.5625">
                <UIAStaticText name="Videos1" label="Videos1" value="Videos1" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/5/0" x="35.15625" y="337.015625" width="222.064453125" height="50.390625">
                </UIAStaticText>
            </UIATableCell>
            <UIATableGroup name="Feeds" label="" value="" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/6" x="0" y="388.578125" width="375" height="25.78125">
                <UIAStaticText name="Feeds" label="Feeds" value="Feeds" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/6/0" x="0" y="388.578125" width="375" height="25.78125">
                </UIAStaticText>
            </UIATableGroup>
            <UIATableCell name="Feeds1" label="" value="" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/7" x="0" y="414.359375" width="375" height="51.5625">
                <UIAStaticText name="Feeds1" label="Feeds1" value="Feeds1" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/7/0" x="35.15625" y="414.359375" width="114.59180450439453" height="50.390625">
                </UIAStaticText>
            </UIATableCell>
            <UIATableGroup name="Podcasts" label="" value="" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/8" x="0" y="465.921875" width="375" height="25.78125">
                <UIAStaticText name="Podcasts" label="Podcasts" value="Podcasts" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/8/0" x="0" y="465.921875" width="375" height="25.78125">
                </UIAStaticText>
            </UIATableGroup>
            <UIATableCell name="Podcast1" label="" value="" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/9" x="0" y="491.703125" width="375" height="51.5625">
                <UIAStaticText name="Podcast1" label="Podcast1" value="Podcast1" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/1/1/9/0" x="35.156246185302734" y="491.703125" width="106.76951599121094" height="50.390625">
                </UIAStaticText>
            </UIATableCell>
        </UIATableView>

我在特定的UIATableGroup之后成功抓取了所有UIATableCell,例如&#34; Bugs&#34;使用以下内容:

//UIATableGroup[@name='Bugs']/following-sibling::UIATableCell

但是,除了我的目标UIATableGroup之外,它还会在以下UIATableGroups中抓取UIATableCell。

我无法做到的是过滤掉所有其他UIATableGroup的单元格。我的想法是,最简单的方法是将它绑定在UIATableGroup之后的UIATableGroup [@name =&#39; Bugs&#39;]这里是我被困的地方,无法制作正确的XPATH来执行此操作

如果我可以制作一个XPATH语句来解决在我的目标UIATableGroup之后可能没有显示任何其他UIATableGroup的情况,那将是很好的,但不是必需的。例如,选择&#34;播客&#34;我的示例XML中的UIATableGroup。

美好时光。 :)

1 个答案:

答案 0 :(得分:0)

我会考虑反过来 - 你希望最近的 UIATableCell的所有UIATableGroup元素都有一个特定的名称,例如。

//UIATableCell[preceding-sibling::UIATableGroup[1]/@name = 'Bugs']