当我使用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已更改。在页面上找到选择菜单的最佳方式是什么?
当我使用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已更改。在页面上找到选择菜单的最佳方式是什么?
通常表单的ID被预先添加到表单中的所有元素ID上。如果你没有设置表单ID,JSF会为你做('j_idt9')。解决方案:分配一个ID,你的表格,并尝试使用完整的ID在你findElement
方法,如:
<h:form id="myForm">
...
</h:form>
这样调用它:
driver.findElement(By.id("myForm:my_fancy_id"));
,或者你可以添加< H:形成prependId =“false”>以便表单的ID不会被预置为
您在控件上设置了component identifier;渲染器将client identifier发送给标记。
即使面对模板和复杂控件,这也允许JSF发出有效的HTML标识符(它们必须是唯一的)。一个控件将被名称空间为NamingContainer的任何父项(如form)。
在某些容器中,客户端标识符将由视图命名空间,但这通常只发生在Portlet环境中。
某些组件库(如Tomahawk)具有forceId
属性,但必须小心使用它们。我在客户端标识here上写了一篇更广泛的帖子。