2012-09-24 28 views
5

我正在使用JSF 1.2。我們想寫一些硒測試(基於xpath),但xpath似乎沒有通配符匹配元素id。使用JSF動態視圖ID匹配元素ID

我們無法關閉前綴ids,因爲我們在IBM Portal Server 6.1中作爲portlet運行,並且我們的應用程序在該環境中打斷了前綴關閉。

目前我們使用的形式

//*[substring(@id, 54)='id_distributorName']

的的XPath將匹配: <select size="1" class="firstName" name="viewns_7_8000CB1A0GUIE0IJF799CR10O2_:commonEntryForm:id_distributorName" id="viewns_7_8000CB1A0GUIE0IJF799CR10O2_:commonEntryForm:id_distributorName" >

,但它給我的印象是假設JSF總是會生成相同長度的一個viewId是危險的。

有沒有更好的方法來做到這一點?

我們已經使用name屬性爲我們的輸入控件,但當然JSF的嘗試忽略的屬性,並將其寫自己的名字屬性,其id值大概相匹配埃文特處理腳本的原因)

回答

5

如果你正在使用XPath 2.0,只需使用ends-with()功能:

//*[ends-with(@id, ':id_distributorName')] 

如果你正在使用XPath 1.0,使用string-length()來計算substring()的開頭:

//*[substring(@id, string-length(@id) - 18) = ':id_distributorName'] 

這裏,18是id_distributorName的長度(沒有:前綴!)。

4

好,我只是回答我自己的問題。

我承認我對xpaths知之甚少,這是我的藉口!

的答案是使用

//*[contains(@id, 'id_distributorName')]

+1

這也將匹配像'富編號:id_distributorName:bar'和'myid_distributorNames',算不上強勁。 – BalusC

0

使用

​​