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

Bra*_*ace 2 selenium xpath playframework

使用#{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}
Run Code Online (Sandbox Code Playgroud)

有没有人让更复杂的版本工作?它看起来应该根据selenium文档工作.此外,是否可以在任何地方记录Play的上下文中创建硒测试?我能找到的唯一提到的就是这些微不足道的例子.

Ard*_*sco 8

我不同意学位.搜索整个DOM的构造错误的xpath会减慢测试速度,但构造良好的xpath应该对速度影响最小(除非你使用的是具有可怕JavaScript渲染引擎的IE).

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

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

  • 语音通讯链接: //ul [@id ='leleMenu'] / li/a [.=' Voice Comms']
  • 包含带有"1月增值税增加"文本的span元素的H3元素: //div[@id='news'] / h3[span[.='January VAT increase']]
  • 上述要素下的第一段文字: //div[@id='news']/h3[span[.='January VAT increase']]/following-sibling :: p [1]
  • 上述要素下的第二段案文: //div[@id='news']/h3[span[.='January VAT increase']]/following-sibling :: p [2]
  • featuresNews div开始搜索并下载到文本"New Look And Feel"的h2元素: //div[@id='featuredNews'] / descendant ::: h2 [.='新的外观和感觉']

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