当我使用JSF2.0生成SelectOneMenu时,我在xhtml中指定的id被附加到从JSF生成的ID。
例如,在my_fancy_id之外,它生成j_idt9:my_fancy_id
现在,我想用Selenium 2 Web驱动程序测试我的页面。我尝试重新找到我的select菜单:
driver.findElement(By.id("my_fancy_id"));当然,它找不到任何东西,因为id已更改。在页面上查找选择菜单的最佳方式是什么?
发布于 2011-09-01 17:04:54
通常,表单的id被放在表单中的所有元素id的前面。如果你没有设置表单id,JSF会帮你设置( 'j_idt9')。解决方案:为表单分配一个id,并尝试在findElement方法中使用完整的id,例如:
<h:form id="myForm">
...
</h:form>这样叫它:
driver.findElement(By.id("myForm:my_fancy_id"));发布于 2011-09-01 20:50:38
或者,您可以添加,这样表单的id就不会被放在前面
发布于 2011-09-01 21:00:51
在控件上设置component identifier;呈现器向标记发出client identifier。
这允许JSF发出有效的HTML (它们必须是唯一的),即使面对模板和复杂控件也是如此。控件将由任何作为NamingContainer (如form)的父级提供命名空间。
在某些容器中,客户机标识符将由视图命名,但这通常只发生在portlet环境中。
一些组件库(如Tomahawk)具有forceId属性,但在使用它们时必须格外小心。我写了一篇更广泛的关于客户端标识符here的文章。
https://stackoverflow.com/questions/7268086
复制相似问题