2012-09-27 43 views
1

當試圖發送文本通過PrimeFaces創建一個文本框:如何使用webdriver的(Selenium2)定位By.id定位PrimeFaces自動生成的ID的用冒號「:」附加

我嘗試:

getDriver().findElement(By.id("addRowTable:0:hostName")).sendKeys("testing"); 

HTML是:

輸入主機名:$(函數(){PrimeFaces.cw( '水印', 'widget_addRowTable_0_j_idt474',{ID: 'addRowTable:0:j_idt474',值: '主機名',目標: 'addRowTable:0:主機名'}, '水印');}); PrimeFaces.cw( 'inputText的', 'widget_addRowTable_0_hostName',{ID: 'addRowTable:0:主機名'});. xxxxcxxxxxdddddddddd.net

我得到的XPath爲:

//*[@id="addRowTable:0:hostName"] 

我得到異常:

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"addRowTable\\:0\\:hostName"} 
Command duration or timeout: 149 milliseconds 
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html 

,當我看着

http://seleniumhq.org/exceptions/no_such_element.html 

我得到一個通用的解釋:

The element may not be present. 

即使逃脫:用\沒有工作

getDriver().findElement(By.id("addRowTable\\:0\\:hostName")).sendKeys("testing"); 

回答

0

在我們的應用中,我們從來沒有直接檢查全ID,因爲它是依賴於位置JSF組件樹中的組件。

相反,您應該使用的是CSS ($ =)運算符結尾。

getDriver().findElement(By.cssSelector("input[id$=\"hostName\"]")).sendKeys("testing"); 

或者,使用page objects

public class MyPage extends PageObject { 

    @FindBy(css="input[id$=\"hostName\"]") 
    private WebElement hostName; 

    public void setHostName(String hostName) { 
     hostName.sendKeys("testing"); 
    } 

} 
+0

我想你的解決方案,但 我得到異常:org.openqa.selenium.ElementNotVisibleException:元素當前不可見,因此可能無法進行交互與 任何想法如何解決 – kamal

+0

我試過這個,但我得到的hostName爲null – kamal

+0

你是否檢索到像MyPage'頁面對象的對象:'PageFactory.initElements(getDriver(),MyPage.class)'?否則'hostName'字段將不會鏈接到瀏覽器中的實際元素。 –

相關問題