匹配元素id与JSF动态视图Id

时间:2012-09-24 10:26:32

标签: jsf xpath selenium

我正在使用JSF 1.2。我们想编写一些selenium测试(基于xpath),但xpath似乎没有对元素id进行通配符匹配。

我们无法关闭前缀ID,因为我们在IBM Portal Server 6.1中作为portlet运行,并且我们的应用程序在前缀关闭的情况下在该环境中中断。

目前我们正在使用

形式的xpath

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

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

但是让我觉得假设JSF总是生成一个相同长度的viewId是危险的。

有更好的方法吗?

我们尝试对输入控件使用name属性,但当然JSF会忽略该属性并编写自己的name属性,其值与id相匹配,大概是为了处理脚本的原因)

3 个答案:

答案 0 :(得分:6)

如果您使用的是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的长度(没有:前缀!)。

答案 1 :(得分:5)

好的我刚刚回答了我自己的问题。

我承认我对xpaths知之甚少,这是我的借口!

答案是使用contains()

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

答案 2 :(得分:0)

使用

//*[substring-after(@id, ':commonEntryForm:') = 'id_distributorName']