unit-testing - software - selenium tutorial
CrÃtica de selenio (5)
Solo quería algunas opiniones de personas que han administrado Selenium ( http://selenium.openqa.org ). He tenido mucha experiencia con WaTiN e incluso escribí un paquete de grabación para él. Lo tenía produciendo un código bien estructurado, pero al ser mantenido por mí, parece que mi empresa casi lo abandonó. Si ha corrido selenio, ¿ha tenido mucho éxito? Usaré .NET 3.5, ¿funciona bien el Selenium? ¿El código se produce limpio o simplemente una lista de todas las interacciones? ( http://blogs.conchango.com/richardgriffin/archive/2006/11/14/Testing-Design-Pattern-for-using-WATiR_2F00_N.aspx ) ¿Qué tan bien es justo el paquete de pruebas distribuidas?
Cualquier otra queja o cumplidos en el sistema sería muy apreciada!
Si está utilizando Selenium IDE para generar código, entonces obtendrá una lista de cada acción que se ejecutará. Para mí, Selenium IDE es una buena manera de comenzar o hacer una prueba rápida de "probar y ver". Pero, cuando piense en facilidad de mantenimiento y en un código más legible, debe escribir su propio código.
Una buena forma de lograr un buen código de selenio es utilizar el Patrón de objeto de página de forma que el código represente su flujo de navegación. Este es un buen ejemplo que veo en Coding Dojo Floripa (de Brasil):
public class GoogleTest {
private Selenium selenium;
@Before
public void setUp() throws Exception {
selenium = new DefaultSelenium("localhost", 4444, "*firefox",
"http://www.google.com/webhp?hl=en");
selenium.start();
}
@Test
public void codingDojoShouldBeInFirstPageOfResults() {
GoogleHomePage home = new GoogleHomePage(selenium);
GoogleSearchResults searchResults = home.searchFor("coding dojo");
String firstEntry = searchResults.getResult(0);
assertEquals("Coding Dojo Wiki: FrontPage", firstEntry);
}
@After
public void tearDown() throws Exception {
selenium.stop();
}
}
public class GoogleHomePage {
private final Selenium selenium;
public GoogleHomePage(Selenium selenium) {
this.selenium = selenium;
this.selenium.open("http://www.google.com/webhp?hl=en");
if (!"Google".equals(selenium.getTitle())) {
throw new IllegalStateException("Not the Google Home Page");
}
}
public GoogleSearchResults searchFor(String string) {
selenium.type("q", string);
selenium.click("btnG");
selenium.waitForPageToLoad("5000");
return new GoogleSearchResults(string, selenium);
}
}
public class GoogleSearchResults {
private final Selenium selenium;
public GoogleSearchResults(String string, Selenium selenium) {
this.selenium = selenium;
if (!(string + " - Google Search").equals(selenium.getTitle())) {
throw new IllegalStateException(
"This is not the Google Results Page");
}
}
public String getResult(int i) {
String nameXPath = "xpath=id(''res'')/div[1]/div[" + (i + 1) + "]/h2/a";
return selenium.getText(nameXPath);
}
}
Espero que ayude
Empecé con Selenium IDE y Selenium Core. Esas definitivamente son buenas herramientas para comenzar. Pero no son muy potentes, ya que solo puedes usar Selenese, el lenguaje comando por comando basado en HTML de Selenium.
Ahora uso Selenium Remote Control con el controlador Ruby, que me permite utilizar lo que ofrece Ruby. Probé muchos entornos: Windows 2000, XP, Vista, Mac 10.4 / 10.5 y para cada uno de los que se aplican, Safari 2/3, Firefox 2/3, Internet Explorer 6/7.
Selenium afirma ser compatible con todos esos sistemas operativos y navegadores, aunque actualmente tengo problemas con Internet Explorer (mi primera pregunta sobre es sobre eso, en realidad). Pero no conozco ninguna otra herramienta que sea tan poderosa y que funcione con tantas plataformas.
El mayor problema que he tenido con Selenium es el análisis DOM. Los childNodes de JavaScript no son confiables porque Safari / Firefox ignoran los espacios en blanco y los nodos de comentarios, mientras que Internet Explorer no. XPath en Internet Explorer es 10-20 veces más lento que en SF / FF. innerHTML no siempre es confiable en IE.
El selenio es una herramienta bastante decente, pero hay dos cosas para tener en cuenta:
Selenium IDE y Selenium core no comparten el 100% de la misma funcionalidad. Por ejemplo, el clic derecho es compatible con IDE, pero la versión principal actual no lo tiene. Sin embargo, el uso de una versión más nueva de su repositorio resuelve eso.
En el caso de ext js, gwt, etc., asegúrese de tener identificadores adecuados para sus elementos de visualización en lugar de los generados automáticamente (al azar).
Mantenimiento de casos de prueba. He visto casos en los que se realizaron muchos esfuerzos en las pruebas de Selenio y una buena cobertura. Más tarde, las pruebas comenzaron a fallar ya que la persona que las creó estaba ocupada con otras tareas y nadie más quería tocarlas. Pero este era un problema con la gerencia, no el Selenio.
Soy un gran fan de Selenium. Sin embargo, una gran sorpresa que es bueno saber con anticipación es que Selenium IDE tiene muchos problemas con las ventanas emergentes. Estos problemas no persisten en Selenium RC, pero puede hacer que el desarrollo sea un dolor de cabeza.
Estoy usando Selenium Remote Control para probar las aplicaciones ASP.Net (que es lo que supongo que también apuntarás), y funciona muy bien.
Si nunca ha usado Selenium, mire algunos de los screencasts para usar Selenium IDE. Esto te dará una buena idea de cómo funciona el ''Selenio''. El IDE es un complemento de Firefox que básicamente te permite desarrollar pruebas rápidas de grabación y reproducción mientras avanzas. Sin embargo, para suites de prueba más grandes o para escribir pruebas realmente mantenibles, recomendaría Selenium Remote Control. (El IDE es excelente si recién estás empezando).
Selenium Remote Control le permite usar su idioma favorito y el marco de prueba de la unidad para conducir un navegador web con el fin de ejecutar sus pruebas. Si se siente más cómodo con C # / NUnit, puede escribir sus pruebas de esa manera y usar todos los elementos de NUnit que desee. (Por ejemplo, el plugin Test-Driven.net). Además, como sus pruebas están escritas en un lenguaje de alto nivel, puede hacer cosas como heredar de una clase de prueba particular que puede usar para hacer que su código de método de prueba sea mucho más limpio. (O al menos esa es la forma en que escribo mis pruebas. Me permite probar escenarios complejos que mantienen mi recuento de líneas de método de prueba en un número razonable).
Mencionas pruebas distribuidas. Lamentablemente, no he encontrado una forma de utilizar el proyecto Selenium Grid con NUnit. Selenium Grid le permite ejecutar su suite de pruebas en un número de máquinas diferentes e instancias de navegador. Entonces, en lugar de ejecutar 200 métodos de prueba uno tras otro (es decir, en serie), podría distribuir la carga en, por ejemplo, cuatro instancias de Grillas (es decir, ejecutarse en cuatro navegadores diferentes instancias a la vez) en una sola máquina o múltiples máquinas sobre cómo distribuido desea obtener.
Sin embargo, si escribes tus pruebas en Java o PHP, es posible que tengas mejor suerte. Espero que esté disponible a través de NUnit con el lanzamiento de NUnit2.5, que incluirá pNUnit para pruebas paralelas.
Si tiene más preguntas sobre el selenio, simplemente aclare su pregunta original y con gusto intentaré ayudarlo. (El selenio es solo una de esas herramientas que utilizo todos los días, así que me gusta ayudar a que nuevas personas empiecen a usarlo).