匹配元素id';具有JSF动态视图Id的
我正在使用JSF1.2。我们想编写一些selenium测试(基于xpath),但xpath似乎没有元素id上的通配符匹配 我们不能关闭前缀ID,因为我们在IBMPortalServer6.1中作为portlet运行,并且我们的应用程序在前缀关闭的环境中中断 目前我们正在使用表单的XPath匹配元素id';具有JSF动态视图Id的,jsf,xpath,selenium,Jsf,Xpath,Selenium,我正在使用JSF1.2。我们想编写一些selenium测试(基于xpath),但xpath似乎没有元素id上的通配符匹配 我们不能关闭前缀ID,因为我们在IBMPortalServer6.1中作为portlet运行,并且我们的应用程序在前缀关闭的环境中中断 目前我们正在使用表单的XPath /*[子字符串(@id,54)='id\u distributorName'] 哪一个匹配: 但让我吃惊的是,假设JSF总是生成相同长度的viewId是危险的 有更好的方法吗 我们已经尝试在输入控件中使用n
/*[子字符串(@id,54)='id\u distributorName']
哪一个匹配:
但让我吃惊的是,假设JSF总是生成相同长度的viewId是危险的
有更好的方法吗
我们已经尝试在输入控件中使用
name
属性,但是JSF当然会忽略该属性,并编写自己的name属性,该属性的值与id匹配(可能是因为evant处理脚本的原因)好的,我刚刚回答了我自己的问题
我承认我对XPath知之甚少,这是我的借口
答案是使用contains()
i、 e。
/*[包含(@id,'id\u distributorName')]
如果您使用的是XPath 2.0,只需使用ends-with()
函数:
/*[以(@id':id_distributorName')结尾]
如果您使用的是XPath 1.0,请使用string-length()
/*[子字符串(@id,字符串长度(@id)-18)=':id\u distributorName']
这里,18是id\u distributorName
(不带:
前缀!)的长度。使用:
//*[substring-after(@id, ':commonEntryForm:') = 'id_distributorName']
这也将匹配像foo:id\u distributorName:bar
和myid\u distributorNames
这样的id,但并不十分健壮。