2012-09-09 18 views
6

Estoy usando el controlador Selenium 2.24 Firefox para probar el evento de desenfoque de un cuadro de entrada. Actualmente, después de enviar sendKeys a un cuadro de entrada, dejo que el selenio haga clic en otra área para desencadenar el desenfoque del cuadro de entrada, sin embargo, creo que no es una buena manera, ¿alguien sabe una mejor manera de probar esto?Selenium driver: cómo probar el desenfoque?

Muchas gracias.

+1

No recuerdo si esto trabajó para el evento onBlur pero prueba webElement.sendKeys (Keys.RETURN); – Maciek

+2

Si está utilizando C#, puede insertar un carácter 'tab' al final de la cadena para enviar al elemento: 'ele.SendKeys (" mi cadena \ t ")' –

+0

someelement.sendKeys ("\ t") también funciona en Java, la solución más corta – cocorossello

Respuesta

4

He hecho una pequeña investigación. Descubrí que el evento de fuego no es compatible con el selenio 2.0. Ver details. Así que esta pieza de código trabajó para mí:

driver.get("http://www.onliner.by/"); 

     String cssSelctr= "div.b-top-search-box input[id=\"g-search-input\"]"; 
     WebElement testElement=driver.findElement(By.cssSelector(cssSelctr)); 
     testElement.sendKeys("fvsdfs"); 

     JavascriptExecutor js = (JavascriptExecutor) driver; 
     StringBuilder stringBuilder = new StringBuilder(); 
     stringBuilder.append("var x = $(\'"+cssSelctr+"\');"); 
     stringBuilder.append("x.blur();"); 
     js.executeScript(stringBuilder.toString()); 

esperanza ahora que esto le ayuda)

+0

lamentablemente el uso del método dará lugar a la excepción: ........... \t en java.lang.reflect.Constructor.newInstance (Constructor.java:513) \t en org.openqa.selenium.remote.ErrorHandler.createThrowable (ErrorHandler.java:188) \t en org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed (ErrorHandler.java:145) \t en org.openqa.selenium. remote.RemoteWebDriver.execute (RemoteWebDriver.java:472) \t en org.openqa.selenium.remote.RemoteWebDriver.executeScript (RemoteWebDriver.java:381) \t en org.openqa.selenium.internal.seleniumemulation.JavascriptLibrary.callEmbeddedHtmlUtils (JavascriptLibrary.java:82) – Mike

3

El WebDriver selenio no se activa correctamente eventos como la falta de definición. Sin embargo, puede activarlos manualmente. Suponiendo que está usando jquery:

firefoxWebDriver.executeScript("$('#yourID').blur()"); 
+0

Este método también funciona para HtmlUnitDriver , ChromeDriver, SafariDriver e InternetExplorerDriver. – Merkidemis

0

Reemplace "elementId" con el elemento ID correspondiente. Funciona bien para mí. "controlador" es su controlador de Selenium

JavascriptExecutor jsexec = (JavascriptExecutor) driver; jsexec.executeScript ("document.getElementById ('" + elementId + "'). Onblur();");

1

Gracias eugene.polschikov. Tuve que cambiar la función para llamar al triggerHandler para que funcione para mí. Consulte lo siguiente: simplemente reemplace "element-id" con la identificación de su elemento.

JavascriptExecutor jsexec = (JavascriptExecutor) driver; 
StringBuilder stringBuilder = new StringBuilder(); 
stringBuilder.append("var x = $('" + element-id + "');"); 
stringBuilder.append("x.triggerHandler('blur');"); 
jsexec.executeScript(stringBuilder.toString()); 

Espero que ayude.

1

Algunos elementos no tienen un discriminador adecuado para fines de prueba (por ejemplo, una identificación u otro selector de CSS al que le gustaría estar obligado en sus pruebas).

Afortunadamente, existe la noción de activeElement. Por lo tanto, si la funcionalidad desenfoque del elemento es lo que desea probar, de manera Javascript nativo (no confiado sobre jQuery o similar) para probar esto es:

driver.ExecuteScript("!!document.activeElement ? document.activeElement.blur() : 0"); 
Cuestiones relacionadas