2011-03-30 79 views
2

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

有沒有人得到工作更復雜的版本?它看起來應該根據硒文檔工作。另外,是否在Play的環境下創建了硒測試?唯一能提及的是我能找到的是these trivial examples

回答

4

你嘗試

//ul[@class='sitemap'] 

注意周圍站點地圖中的單引號。 XPath會讓你的測試變得緩慢,並且id,name是更好的選擇。

+0

aha。 'verifyText('// ul [@ class ='sitemap'] // li [1]/ul','* Login *')'看起來像一些撇號需要轉義,但似乎工作得很好。 – 2011-03-31 13:31:26

+0

或者只是使用引號和撇號來保持簡單verifyText(「// ul [@ class ='sitemap']/li [1]」,「* Login *」) – Ardesco 2011-04-27 14:19:53

8

我不同意達到學位。對整個DOM進行搜索的構建不當的xpath會減慢測試速度,但構建良好的xpaths對速度的影響應該很小(除非您使用的IE有一個可怕的JavaScript渲染引擎)。

理想情況下,您希望將xpath鍵入到儘可能接近要搜索的DOM區域的ID中,這將確保您只搜索DOM的特定區域,而不是像使用xpath那樣使用xpath如上所示,它將搜索整個DOM,甚至可以快速找到匹配的元素。

我將以http://www.lazeryattack.com爲例,提供一些我稱之爲良好xpaths的例子。如果你有特別想要喊什麼,我會看看我能做些什麼來幫助:

  • 的語音通訊連接: // UL [@ ID =「leftMenu」] /李/ A。 ='Voice Comms']
  • H3元素包含一個帶有文字「1月VAT增量」的span元素: //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[.=''1anuary VAT Increase']]/following-sibling :: p [2]
  • 從featuredNews div開始搜索並使用文本「New Look And Feel」下拉到h2元素: //div[@id='featuredNews']/descendant::h2[.='New Look And Feel ']

我會使用FireFox和FireBug和FirePath擴展來建立xpaths,這是我個人最喜歡的組合。

+0

閱讀6年後,您就會發現。 – Tarun 2017-07-24 11:41:12

相關問題