2

我的想法不多了。我已经根据包含的文本(“安全管理员”)为我的 Selenium 测试确定了一个 div。不幸的是,该 div 包含另外两个 div。请参阅示例。

<div class="rich-stglpanel-marker">
    <div class="rich-stglpnl-marker" id="j_id194:j_id198:2:j_id199_switch_on" style="display: none"></div>
    <div class="rich-stglpnl-marker" id="j_id194:j_id198:2:j_id199_switch_off"></div>
    security administrator 
</div>
<div class="rich-stglpanel-marker">
    <div class="rich-stglpnl-marker" id="j_id194:j_id198:2:j_id199_switch_on" style="display: none"></div>
    <div class="rich-stglpnl-marker" id="j_id194:j_id198:2:j_id199_switch_off"></div>
    technical administrator 
</div>
... and so on

我试过这样的表达:

//div[text()='security administrator']
//div[text()='security administrator ']
//div[text()='security administrator&nbsp;']
//div[text()='security administrator${nbsp}'] (this is a special hack from selenium)

没有任何效果。有任何想法吗?

提前致谢。

4

3 回答 3

5

你可以试试这个:

//div[contains(.,'security administrator')]
System.out.println(driver.findElementByXPath("//div[contains(.,'security adm')]").getText()) 

给了我安全管理员

于 2012-12-07T18:02:49.303 回答
0

尝试这个

//div[@class='rich-stglpanel-marker']

于 2012-12-07T16:23:06.643 回答
0

尝试这个://div[@class='rich-stglpanel-marker' and text()!='']

编辑

终于明白了!

用这个://div[@class='rich-stglpanel-marker' and normalize-space(div[last()]/following-sibling::text())='security administrator']

我相信在这种情况下,文本“安全管理员”被算作一个节点,而不是第一个 div 节点的唯一文本值,这就是为什么//div/text()会给你多个返回行,然后是你正在搜索的文本,以及为什么您不能将normalize-space(),translate()或什contains()至应用到div/text()并接收结果的原因。但是,由于文本节点没有名称,这使得它成为一个时髦的 XPath,所以导航到最近的可能同级节点是我能想到的唯一选择。

于 2012-12-07T16:39:58.903 回答