如何使用Webdriver(Selenium2)定位器 By.id 来定位带有冒号":"的PrimeFaces自动生成的ID



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

我尝试:

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

Html是:

输入主机名:$(function(){PrimeFaces.cw('Watermark','idget_addRowTable_0_j_idt474',{id:'addRowTable:0:j_idt4474',value:'Hostname',target:'addRowTable:0:Hostname'},'Watermark]);});PrimeFaces.cw("输入文本","idget_addRowTable_0_hostName",{id:'addRowTable:0:hostName"});。xxxxcxxxxxddddddddd.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");

在我们的应用程序中,我们从不直接检查完整的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");
}
}

最新更新