2011-09-01 136 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上寫了一篇更廣泛的帖子。