为什么XPath前一个同级::*[3]有效,而前一个同类::div[3]无效



HTML代码为:

<div id="topNavigationBar" style="bottom: 0px; display: block;">
<div id="topNavi_appSurrogates">
<div class="topNavi_appSurrogate prototype">
<div class="topNavi_appSurrogate_content">
<div class="function refresh_app">Refresh</div>
<div class="function show_app">Show</div>
<div class="function hide_app">Hide</div>
<div class="function quit_app">...</div>
</div>
</div>
<div class="topNavi_appSurrogate" style="left: 279px; display: block;">
<div class="topNavi_appSurrogate_content">
<div class="function refresh_app">Refresh</div>
<div class="function show_app">Show</div>
<div class="function hide_app">Hide</div>
<div class="function quit_app">Quit App1</div>
</div>
</div>
<div class="topNavi_appSurrogate">
<div class="topNavi_appSurrogate_content">
<div class="function refresh_app">Refresh</div>
<div class="function show_app">Show</div>
<div class="function hide_app">Hide</div>
<div class="function quit_app">Quit App2</div>
</div>
</div>
</div>
</div>

起初这个问题应该是不同的,但我在";类似的问题";。在上面的代码中有多个带有Refresh文本的div元素。我在寻找一个在最后一个兄弟姐妹的文本中有特定应用程序名称的特定应用程序。我的解决方案是:

Click Element                       xpath://div[text()='Quit App1']/preceding::*[3]

然而,我不明白为什么

Click Element                       xpath://div[text()='Quit App1']/preceding::div[3]

不起作用。只有div元素,我不寻找任何其他元素。

我访问了许多解释XPath的网站,但没有找到答案。请帮我理解一下。

您的期望是正确的。两个

//div[text()='Quit App1']/preceding::*[3]

//div[text()='Quit App1']/preceding::div[3]

应该从XML:中选择相同的元素

<div class="function refresh_app">Refresh</div>

如果您在Robot Framework中看到不同的结果,请向开发人员报告问题。

最新更新