當我使用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上寫了一篇更廣泛的帖子。