2016-05-13 13 views
6

Utilizzo Java, Selenium e Chrome per l'automazione dei test. I nostri sviluppatori hanno recentemente aggiornato la nostra interfaccia utente da AngularJS a Angular2 (non sono sicuro che sia importante). Ma da allora, sendKeys sta inserendo caratteri incompleti nel campo di testo. Ecco un esempio:I SendKeys selenio non inviano tutti i caratteri

public void enterCustomerDetails() 
    { 
     txtFirstName.sendKeys("Joh201605130947AM"); 
     txtSurname.sendKeys("Doe201605130947AM"); 
     txtEmail.sendKeys("[email protected]"); 
    } 

Ho anche provato a utilizzare executeScript. Non ha funzionato. Può inserire caratteri completi ma il modulo pensa che il campo sia nullo.

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, "[email protected]"); 
     } 

Ho anche provato a utilizzare .click() prima di .sendKeys e aggiungo in sleep time. Non hanno funzionato anche loro.

mi è venuta un'idea per immettere i caratteri 1 da 1 da questo post: How to enter characters one by one in to a text field in selenium webdriver?

Ha funzionato, ma che significa che devo riscrivere tutti i miei codici di SendKeys per la nuova funzione:

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, "[email protected]"); 
    } 

Se voi ragazzi conoscete un modo migliore, per favore aiutatemi! :)

+0

buona. sembra un problema solo con Angular2. –

risposta

2

Presumo che ciò è causato da questo problema Angular2 https://github.com/angular/angular/issues/5808

angolare non in grado di elaborare gli eventi di input quando arrivano troppo in fretta.

Come soluzione alternativa, è necessario inviare singoli caratteri con un piccolo ritardo tra ciascuno.

0

provare questo codice .. altro modo per impostare valori utilizzando javascript Driver WebDriver = new FirefoxDriver(); JavascriptExecutor jse = (JavascriptExecutor) driver; jse.executeScript ("document.getElementsByName ('body') [0] .setAttribute ('type', 'text');"); driver.findElement (By.xpath ("// input [@ name = 'body']")). Clear(); driver.findElement (By.xpath ("// input [@ name = 'body']")). SendKeys ("Ripon: body text");

1

Mi sono imbattuto in questo errore durante i test di integrazione con NightwatchJS (che utilizza il selenio).

Quindi sto scrivendo questo per le persone che verranno qui in futuro.

Ho scritto questo comando estensione per Nightwatch:

exports.command = function (selector, value, using) { 
    var self = this; 
    self.elements(using || 'css selector', selector, function (elems) { 
     elems.value.forEach(function (element) { 
      for (var c of value.split('')) { 
       self.elementIdValue(element.ELEMENT, c); 
      } 
     }); 
    }); 
    return this; 
}; 

che può essere utilizzato in questo modo:

var username = '[email protected]'; 
browser.setValueSlow('input[ngcontrol=username]', username); //Works with ng2! 

Questo problema è stato discusso anche su github di NightwatchJS here

Problemi correlati