Selenium sendKeys不发送所有字符

Lar*_*a B 11 java selenium sendkeys angular

我正在使用Java,Selenium和Chrome进行测试自动化.我们的开发人员最近将我们的UI从AngularJS升级到Angular2(不确定是否重要).但从那时起,sendKeys就在文本字段中输入了不完整的字符.这是一个例子:

    public void enterCustomerDetails()
    {   
        txtFirstName.sendKeys("Joh201605130947AM");
        txtSurname.sendKeys("Doe201605130947AM");
        txtEmail.sendKeys("johndoe@gmail.com");
    }
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用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");
        }
Run Code Online (Sandbox Code Playgroud)

我也尝试在.sendKeys之前使用.click()并添加睡眠时间.他们也没有工作.

我有一个想法从这篇文章中逐一输入字符:如何在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");
    }
Run Code Online (Sandbox Code Playgroud)

如果你们知道更好的方法,请帮忙!:)

Gün*_*uer 5

我认为这是由Angular2问题引起的https://github.com/angular/angular/issues/5808

当输入事件到达得太快时,Angular无法处理它们。

解决方法是,您需要发送单个字符,每个字符之间的延迟很小。