【发布时间】:2017-10-07 23:13:18
【问题描述】:
Java 开发人员和 Xpath 新手。谷歌搜索和 RTFM-ed 相当多,但卡住了。公司有一个使用 Java Wicket 框架用 Java 编写的大型 Web 应用程序。将 Selenium 与 Cucumber 和 Junit 结合使用进行测试。因此需要编写大量的 Xpath 表达式。 坚持以下。
一个屏幕,带有一个表单和两个切换按钮 () 以及它后面的文本。相关sn-p。
<label>
<input id="idf1" name="removeConditionViaTreeStep:resultsRadioGroup" value="radio3" checked="checked" type="radio">
Safe to delete
</label>
<label>
<input id="idf2" name="removeConditionViaTreeStep:resultsRadioGroup" value="radio4" type="radio">
Unsafe to delete
</label>
注意:使用 Wicket 框架意味着属性 id 和 value 每次应用程序运行时/可以不同,因此不能使用它们。也不能更改 html。
A计划 我想通过使用标签文本作为 uniq 选择器来选择特定的切换(并模拟单击/选择它),但标签之间存在 .. 的事实给我带来了问题。在干净标签的情况下,我可以毫无问题地选择某个标签。 在这种情况下,无法使 //label[contains(text(),'Unsafe to delete')] 之类的东西起作用。
放弃并选择 B 计划。
使用 firepath 插件进行 firebug 测试并得出以下结果://input[@name='removeConditionViaTreeStep:resultsRadioGroup'] 这会导致两场比赛中的火路。我希望使用 [2] 之类的东西来选择第二个切换,但无法弄清楚。
C 计划 - 诉诸 Java 和 Xpath 行之有效。
列表元素 = findElementsByXpath("//input[@name='removeConditionViaTreeStep:resultsRadioGroup']");
elements.get(1) // 选择第二个切换。
有这种感觉“//label[contains(text(),'Unsafe to delete')]”不起作用,因为所有内容都是流式传输的,并且 Selenium 的 Webdriver 没有任何内容保存在内存中。因此元素会破坏流或类似的东西......
也许有人可以给出一些提示和指点,甚至是 A 和 B 计划的解决方案。
Edit 更正了 Bill Hileman 提到的右括号拼写错误。
【问题讨论】:
-
试试
"//label[normalize-space()='Unsafe to delete']" -
你试过类似
elements.getAtrribute("textContent");
标签: java html selenium xpath cucumber