2011-09-01 106 views
4

当我使用JSF2.0生成SelectOneMenu时,我在xhtml中指定的id被附加到JSF生成的ID中。Selenium和JSF 2.0

例如出my_fancy_id它生成j_idt9:my_fancy_id

现在我想用Selenium 2 Web Driver测试我的页面。我尝试重新找到我的选择菜单:

driver.findElement(By.id("my_fancy_id")); 

当然,它找不到任何东西,因为ID已更改。在页面上找到选择菜单的最佳方式是什么?

回答

6

通常表单的ID被预先添加到表单中的所有元素ID上。如果你没有设置表单ID,JSF会为你做('j_idt9')。解决方案:分配一个ID,你的表格,并尝试使用完整的ID在你findElement方法,如:

<h:form id="myForm"> 
... 
</h:form> 

这样调用它:

driver.findElement(By.id("myForm:my_fancy_id")); 
3

,或者你可以添加< H:形成prependId =“false”>以便表单的ID不会被预置为

1

您在控件上设置了component identifier;渲染器将​​client identifier发送给标记。

即使面对模板和复杂控件,这也允许JSF发出有效的HTML标识符(它们必须是唯一的)。一个控件将被名称空间为NamingContainer的任何父项(如form)。

在某些容器中,客户端标识符将由视图命名空间,但这通常只发生在Portlet环境中。

某些组件库(如Tomahawk)具有forceId属性,但必须小心使用它们。我在客户端标识here上写了一篇更广泛的帖子。