使用#{selenium}
标记创建selenium测试时,如何使用复杂的XPath定位器?我有一些更简单的例子,但是我真的希望避免为了方便测试而给每个元素一个id。
我尝试过这样的变体:
#{selenium 'Sitemap'}
...
// These work:
assertTitle('Site Map')
verifyTextPresent('Site Map')
verifyTextPresent('Login')
verifyText('id=test', 'Login')
verifyText('//ul', 'Login')
verifyText('//ul[2]', 'Login')
// this one results in "Element //ul[@class=sitemap] not found"
verifyText('Login','//ul[@class=sitemap]')
#{/selenium}
有没有人让更复杂的版本工作?它看起来应该根据selenium文档工作。此外,是否可以在任何地方记录Play的上下文中创建硒测试?我能找到的唯一提到的是these trivial examples。
答案 0 :(得分:8)
我不同意某种程度的观点。搜索整个DOM的构造错误的xpath会减慢测试速度,但构造良好的xpath应该对速度影响最小(除非你使用的IE浏览器有一个可怕的JavaScript渲染引擎)。
理想情况下,您希望将xpath键入到尽可能靠近要搜索的DOM区域的ID,这样可以确保您只搜索DOM的特定区域,而不是使用如图所示的xpath在上面,它将搜索整个DOM,即使它确实快速找到匹配的元素。
我将以http://www.lazeryattack.com为例,提供一些我称之为好的xpath的示例。如果您有任何具体的想法,我会看到我可以做些什么来帮助:
我建议使用FireFox和FireBug以及FirePath扩展来帮助你计算xpath,这是我个人最喜欢的组合。
答案 1 :(得分:4)
你试过吗
//ul[@class='sitemap']
请注意站点地图周围的单引号。 XPath会使你的测试变慢而id,name是更好的选择。