我的想法已经不多了。我已经为我的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 ']
//div[text()='security administrator${nbsp}'] (this is a special hack from selenium)
没有任何作用。有什么想法吗?
提前致谢。
答案 0 :(得分:5)
你可以试试这个:
//div[contains(.,'security administrator')]
System.out.println(driver.findElementByXPath("//div[contains(.,'security adm')]").getText())
给了我安全管理员
答案 1 :(得分:0)
试试这个
// DIV [@类= '富stglpanel-标记']
答案 2 :(得分: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,因此导航到最近的兄弟节点是我能想到的唯一选择。