验证文本存在于某个元素中

时间:2011-03-30 20:43:04

标签: selenium playframework xpath

使用#{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

2 个答案:

答案 0 :(得分:8)

我不同意某种程度的观点。搜索整个DOM的构造错误的xpath会减慢测试速度,但构造良好的xpath应该对速度影响最小(除非你使用的IE浏览器有一个可怕的JavaScript渲染引擎)。

理想情况下,您希望将xpath键入到尽可能靠近要搜索的DOM区域的ID,这样可以确保您只搜索DOM的特定区域,而不是使用如图所示的xpath在上面,它将搜索整个DOM,即使它确实快速找到匹配的元素。

我将以http://www.lazeryattack.com为例,提供一些我称之为好的xpath的示例。如果您有任何具体的想法,我会看到我可以做些什么来帮助:

  • 语音通讯链接: // @ [@ id ='leleMenu'] / li / a [。='语音通讯']
  • 包含带有“1月增值税增加”字样的span元素的H3元素: //div[@id='news']/h3[span[.='January VAT increase'] ]
  • 上述元素下的第一段文字: //div[@id='news']/h3[span[.='January VAT increase']] / follow-sibling: :p [1]
  • 上述元素下的第二段文字: //div[@id='news']/h3[span[.='January VAT increase']] / follow-sibling: :p [2]
  • 从featuresNews div开始搜索并下拉到带有“New Look And Feel”文本的h2元素: // div [@ id ='featuredNews'] / descendant :: h2 [ 。='新面貌']

我建议使用FireFox和FireBug以及FirePath扩展来帮助你计算xpath,这是我个人最喜欢的组合。

答案 1 :(得分:4)

你试过吗

//ul[@class='sitemap']

请注意站点地图周围的单引号。 XPath会使你的测试变慢而id,name是更好的选择。