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

Ste*_*son 5 jsf selenium xpath

我正在使用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匹配,大概是为了处理脚本的原因)

Bal*_*usC 6

如果您使用的是XPath 2.0,只需使用ends-with()功能:

//*[ends-with(@id, ':id_distributorName')]
Run Code Online (Sandbox Code Playgroud)

如果您使用的是XPath 1.0,请使用string-length()以计算以下内容的开头substring():

//*[substring(@id, string-length(@id) - 18) = ':id_distributorName']
Run Code Online (Sandbox Code Playgroud)

这里,18是id_distributorName(没有:前缀!)的长度.


Ste*_*son 5

好的,我刚刚回答了我自己的问题.

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

答案是使用 contains()

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