1

当尝试将文本发送到通过 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:hostName'});.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");
4

1 回答 1

0

在我们的应用程序中,我们从不直接检查完整 ID,因为它依赖于组件在 JSF 组件树中的位置。

相反,您应该使用以($=) 运算符结尾的 CSS。

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

或者,使用页面对象

public class MyPage extends PageObject {

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

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

}
于 2012-09-28T12:20:27.680 回答