Jsf 2 Selenium和JSF2.0

Jsf 2 Selenium和JSF2.0,jsf-2,selenium-webdriver,Jsf 2,Selenium Webdriver,当我使用JSF2.0生成SelectOneMenu时,我在xhtml中指定的id将附加到从JSF生成的id e、 g.在my_fancy_id中,它生成j_idt9:my_fancy_id 现在我想用Selenium2Web驱动程序测试我的页面。我试图重新找到我的选择菜单: driver.findElement(By.id("my_fancy_id")); 当然,它找不到任何东西,因为id已更改。在页面上查找“选择”菜单的最佳方式是什么 通常表单的id在表单内所有元素id的前面。如果您没有设置

当我使用JSF2.0生成SelectOneMenu时,我在xhtml中指定的id将附加到从JSF生成的id

e、 g.在
my_fancy_id
中,它生成
j_idt9:my_fancy_id

现在我想用Selenium2Web驱动程序测试我的页面。我试图重新找到我的选择菜单:

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

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

通常表单的id在表单内所有元素id的前面。如果您没有设置表单id,JSF会为您进行设置(“j_idt9”)。解决方案:为表单分配一个id,并尝试在
findElement
方法中使用完整id,例如:

<h:form id="myForm">
 ...
</h:form>
或者,您可以添加,以便在控件上设置时,表单的id不会被预先添加

;渲染器向标记发出渲染

这允许JSF发出有效的HTML ID(它们必须是唯一的),即使面对模板和复杂的控件也是如此。控件将由作为的任何父级(例如)命名

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

一些组件库(如)具有
forceId
属性,但在使用它们时必须小心。我写了一篇关于客户标识符的更广泛的文章

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