尝试将文本发送到通过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");
}
}