【发布时间】:2016-09-09 01:30:53
【问题描述】:
我正在使用 Java、Selenium 和 Chrome 进行测试自动化。我们的开发人员最近将我们的 UI 从 AngularJS 升级到了 Angular2(不确定这是否重要)。但从那时起,sendKeys 在文本字段中输入不完整的字符。这是一个例子:
public void enterCustomerDetails()
{
txtFirstName.sendKeys("Joh201605130947AM");
txtSurname.sendKeys("Doe201605130947AM");
txtEmail.sendKeys("johndoe@gmail.com");
}
我也尝试过使用 executeScript。它没有用。它可以输入完整的字符,但表单认为该字段为空。
public void forceSendKeys(WebElement element, String text)
{
if (element != null)
((JavascriptExecutor) this.webDriver).executeScript("arguments[0].value=arguments[1]", element, text);
}
public void enterCustomerDetails()
{
forceSendKeys(txtFirstName, "Joh201605130947AM");
forceSendKeys(txtSurname, "Doe201605130947AM");
forceSendKeys(txtEmail, "johndoe@gmail.com");
}
我还尝试在 .sendKeys 之前使用 .click() 并添加睡眠时间。他们也没有工作。
我有一个想法,从这篇文章中逐个输入字符:How to enter characters one by one in to a text field in selenium webdriver?
它有效,但这意味着我必须将所有代码从 sendKeys 重写为新函数:
public void sendChar(WebElement element, String value)
{
element.clear();
for (int i = 0; i < value.length(); i++){
char c = value.charAt(i);
String s = new StringBuilder().append(c).toString();
element.sendKeys(s);
}
}
public void enterCustomerDetails()
{
sendChar(txtFirstName, "Joh201605130947AM");
sendChar(txtSurname, "Doe201605130947AM");
sendChar(txtEmail, "johndoe@gmail.com");
}
如果你们知道更好的方法,请帮忙! :)
【问题讨论】:
-
good.. 看起来只是 Angular2 的问题。
-
请添加渲染的 html。我认为 txtFirstName 不是输入,而是 DOM 中此输入的父级。首先你必须分析 html,因为有时渲染的 html 看起来和源代码不同。
标签: java selenium angular sendkeys