XPATH to select 两个特定元素之间的所有元素
XPATH to select all elements between two specific elements
我试图在一些自动化的 Appium 和 Python 2.7 测试中大量利用 XPATH,并且正在努力处理更复杂的 XPATH 轴到 select 来自我 XML 的特定元素组页面来源。
这是我一直在使用的 XPath 测试器/验证器:http://www.freeformatter.com/xpath-tester.html
我得到的是一个动态的UIATable,它有一个或多个UIATableGroup,每个出现的UIATableGroup肯定有一个或多个UIATableCell。
我需要做的是能够 select 特定 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,例如 "Bugs":
//UIATableGroup[@name='Bugs']/following-sibling::UIATableCell
但是,除了我的目标 UIATableGroup 之外,它还会在 UIATableGroups 之后获取 UIATableCell。
我无法做的是过滤掉所有其他 UIATableGroup 的单元格。我的想法是,将它绑定到 UIATableGroup[@name='Bugs'] 之后的 UIATableGroup 是最简单的,这就是我卡住的地方,无法制作正确的 XPATH 来执行此操作。
如果我可以编写一个 XPATH 语句来说明在我的目标 UIATableGroup 之后可能没有显示任何其他 UIATableGroup 的情况,那会很好,但不是必需的。例如,在我的示例 XML.
中选择 "Podcasts" UIATableGroup
好时光。 :)
我会反过来考虑 - 您需要所有 UIATableCell
元素的 最近的前导 UIATableGroup
具有特定名称,例如
//UIATableCell[preceding-sibling::UIATableGroup[1]/@name = 'Bugs']
我试图在一些自动化的 Appium 和 Python 2.7 测试中大量利用 XPATH,并且正在努力处理更复杂的 XPATH 轴到 select 来自我 XML 的特定元素组页面来源。
这是我一直在使用的 XPath 测试器/验证器:http://www.freeformatter.com/xpath-tester.html
我得到的是一个动态的UIATable,它有一个或多个UIATableGroup,每个出现的UIATableGroup肯定有一个或多个UIATableCell。
我需要做的是能够 select 特定 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,例如 "Bugs":
//UIATableGroup[@name='Bugs']/following-sibling::UIATableCell
但是,除了我的目标 UIATableGroup 之外,它还会在 UIATableGroups 之后获取 UIATableCell。
我无法做的是过滤掉所有其他 UIATableGroup 的单元格。我的想法是,将它绑定到 UIATableGroup[@name='Bugs'] 之后的 UIATableGroup 是最简单的,这就是我卡住的地方,无法制作正确的 XPATH 来执行此操作。
如果我可以编写一个 XPATH 语句来说明在我的目标 UIATableGroup 之后可能没有显示任何其他 UIATableGroup 的情况,那会很好,但不是必需的。例如,在我的示例 XML.
中选择 "Podcasts" UIATableGroup好时光。 :)
我会反过来考虑 - 您需要所有 UIATableCell
元素的 最近的前导 UIATableGroup
具有特定名称,例如
//UIATableCell[preceding-sibling::UIATableGroup[1]/@name = 'Bugs']