我正在使用 JSF 1.2。我们想编写一些 selenium 测试(基于 xpath),但 xpath 似乎没有元素 id 的通配符匹配。
我们无法关闭前缀 id,因为我们在 IBM Portal Server 6.1 中作为 portlet 运行,并且我们的应用程序在关闭前缀的情况下在该环境中中断。
目前我们正在使用形式的 xpaths//*[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 匹配,这可能是出于 evant 处理脚本的原因)
最佳答案
如果您使用的是 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
的长度(没有 :
前缀!)。
关于jsf - 将元素 ID 与 JSF 动态 View ID 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12563125/