2010-04-17 41 views

Respuesta

2

no pude conseguir la idea :focus pseudoclass a trabajar, no sé por qué - la focalización css=#search_input input.text igualado, pero css=#search_input input.text:focus no lo hizo? Pero aquí es lo que funcionó para mí:

self.assertEquals(self.se.get_element_index('dom=document.activeElement'), 
    self.se.get_element_index('//input[@id="search-query"]')) 

Se trata de utilizar la Python Selenium API, por lo que las llamadas son get_element_index() envolturas alrededor de la lista de comandos selenio núcleo. Adapta esto a tu entorno. Está evaluando el índice de elemento del elemento centrado del documento (obtenido con un localizador Javascript DOM) y el índice de elementos del elemento que desea probar para el enfoque (obtenido con un localizador XPath). También vea this question.

+0

Desafortunadamente get_element_index solo obtiene el índice del elemento dentro de su primario. Entonces, si tiene, por ejemplo, dos divisiones A y B, cada una de las cuales contiene un campo de texto como único elemento secundario, entonces si se selecciona el cuadro de texto A, ambas llamadas get_element_index en su código de ejemplo devolverán 0, por lo que obtendrá un resultado falso positivo. –

1

Puede utilizar selectores CSS en la prestación de un localizador de elemento de Selenio: http://release.seleniumhq.org/selenium-core/1.0/reference.html#locators

Por lo tanto, se puede utilizar la pseudo-clase :focus CSS en su selector sólo para igualar si el elemento está enfocado.

Combina eso con una acción verifyElementPresent y un objetivo de algo como lo siguiente: css=.yourclassname:focus. Reemplace yourclassname con su nombre de clase de CSS, por supuesto, o use uno de los otros selectores de CSS; el bit importante es el :focus al final.

Tenga en cuenta que esto seguramente no funcionará en el plugin de Selenium IDE Firefox. Me imagino que es porque este complemento tendrá foco en su lugar. No pude hacer que funcionara en el IDE (la prueba siempre falló), pero funcionó bien una vez que lo exporté y lo ejecuté como una prueba de Java.

HTH

Sam

+0

Estoy marcando esto como la respuesta, ya que debe funcionar, pero no pude hacer que funcionara para mí. Estoy usando selenium RC, puedo ver que el elemento está enfocado (porque agregué un *: focus {background: pink} a mi css), pero isElementPresent siempre devuelve false. – hwiechers

1

He encontrado la solución a este problema y he desarrollado una secuencia de comandos simple para solucionar este problema al ejecutar las pruebas. El problema radica en que los selectores de búsqueda y coincidencia nativos de su navegador son conscientes del sistema operativo, lo que significa que a menos que su navegador y la pestaña de la página web tengan el foco dentro del sistema operativo, el selector de enfoque no coincidirá con CUALQUIER elemento dentro de su documento. He hurgado dentro de JQuery para encontrar una forma de solucionarlo, y esto se puede hacer simplemente forzando a JQuery a utilizar Sizzle y no optimizar las consultas de selector utilizando las funciones nativas del navegador.

Si incluye el siguiente script https://gist.github.com/1166821 ANTES de incluir JQuery, sus pruebas de Selenium superarán las pruebas de: focus.

Para una escritura completa de la cuestión, la solución y la forma de ejecutar las pruebas, por favor revise http://blog.mattheworiordan.com/post/9308775285/testing-focus-with-jquery-and-selenium-or

la esperanza de que ayude a otras personas que tienen este mismo problema.

6

Ninguna de las otras respuestas funcionó para mí, por varias razones cuando tuve el mismo problema. Terminé haciendo lo siguiente (con Selenium 2.0 WebDriver, en Java).

WebDriver driver = new FirefoxDriver(); 
String elScript = "return document.activeElement;"; 

// Note that the executeScript call returns a WebElement, 
// so you can do quite a lot with the result. 
WebElement focuseedEl = (WebElement) ((JavascriptExecutor) driver).executeScript(elScript); 

El comentario aclara un punto de confusión que tenía: executescript vuelve cosas diferentes en función de lo que le dices a ejecutar, lo que podría ser bastante complicado.

+0

+1 - Funcionó muy bien! – JOpuckman

Cuestiones relacionadas