jsf - 将元素 ID 与 JSF 动态 View ID 匹配

标签 jsf xpath selenium

我正在使用 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/

相关文章:

java - 关于 ASP.NET MVC 到 Java 迁移的建议?

java - 在 Java 应用程序中找到了类,但在 JSF 中没有找到?

vba - 如何通过Selenium和VBA根据html从第2行第2列中提取文本8

xpath - XQuery/XPath : Using count() and max() function for return of element with highest count

java - Selenium - 如何使用 Javascript 执行器打开新的 Chrome 窗口

python - 如何通过 selenium p 隐藏 chromedriver 登录控制台

java - h :commandButton multiple actions: download file and render ajax table

selenium-webdriver - 无法在 Kendo UI 图表上通过 xpath 定位 SVG 元素

javascript - 使用 ng-show 属性测试 <span> 是否可见

jsf - 查看两个不同 portlet 之间的导航?