如何使用Webdriver(Selenium2)定位器By.id来定位附加了Colons“:”的PrimeFaces自动生成的ID

时间:2012-09-27 16:11:34

标签: primefaces webdriver

尝试将文本发送到通过PrimeFaces创建的TextBox时:

我试试:

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

Html是:

    输入主机名:$(function(){PrimeFaces.cw('Watermark','widget_addRowTable_0_j_idt474',{id:'addRowTable:0:j_idt474',value:'Hostname',target:'addRowTable:0:hostName'},'水印');});                     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");

1 个答案:

答案 0 :(得分: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");
    }

}