2011-04-05 9 views
12

He estado usando el selenio 1, pero ahora quiero migrar a Selenium2/WebDriver. Para ser sincero, me resulta un poco difícil comenzar con selenium2/webdriver. En esencia, no sé cómo trabajar entre objetos de página. Aquí está mi ejemplo:Un buen ejemplo de trabajo de Selenium2 y WebDriver

public class LoginPage { 
    private final WebDriver driver; 

    public LoginPage(WebDriver driver) { 
     this.driver = driver; 
    } 

    public void loginAs(String username, String password) { 
     driver.get("http://url_to_my_webapp");   
     driver.findElement(By.id("username")).sendKeys(username); 
     driver.findElement(By.id("pwd")).sendKeys(password); 
     driver.findElement(By.className("button")).submit();     
    } 

    public static void main(String[] args){ 
     LoginPage login = new LoginPage(new FirefoxDriver()); 
     login.loginAs("user", "pass"); 
    } 
} 

Ahora, después de que el usuario haya iniciado sesión, se produce una redirección a otra página. Por lo que yo entiendo, ahora debería hacer un nuevo objeto de página que represente la página actual ... ¿El hecho es que no sé cómo? ¿Dónde puedo encontrar algunos buenos ejemplos de trabajo que van más allá del nivel de "mundo hello"? ¿Cómo debo continuar este ejemplo?

¡Gracias de antemano!

+0

recomendamos que reformular su título por lo que es relevante para la cuestión - echar un vistazo a los elementos relacionados más a la derecha para tener una idea. – YXD

+1

Es posible que haya respondido inadvertidamente a esto en [otra pregunta] (http://stackoverflow.com/a/13486414/1068649). –

Respuesta

8

Estos sitios tanto dan algunos ejemplos:

http://luizfar.wordpress.com/2010/09/29/page-objects/

http://www.wakaleo.com/blog/selenium-2-web-driver-the-land-where-page-objects-are-king

Esta página da algunos detalles sobre el uso PageFactory para apoyar objetos de página: http://code.google.com/p/selenium/wiki/PageFactory

Usted podría extender su ejemplo para Trabajar con objetos de página creando una clase para cada página, p. ej .:

public class MainPage 
{ 
    private final WebDriver driver; 

    public MainPage(WebDriver driver) 
    {  
    this.driver = driver; 
    } 

    public void doSomething() 
    {  
    driver.findElement(By.id("something")).Click;  
    } 
} 

y cambiando loginAs para devolver una clase que representa la página que el navegador se desplaza a después de entrada:

public MainPage loginAs(String username, String password) 
{  
    driver.get("http://url_to_my_webapp");    
    driver.findElement(By.id("username")).sendKeys(username);  
    driver.findElement(By.id("pwd")).sendKeys(password);  
    driver.findElement(By.className("button")).submit(); 
    // Add some error checking here for login failure 
    return new MainPage(driver);     
} 
+0

Este enlace 'http://www.wakaleo.com/blog/279-selenium-2web-driver-the-land-where-page-objects-are-king' devuelve 404 –

+0

el enlace correcto es http: // www .wakaleo.com/blog/selenium-2-web-driver-the-land-donde-page-objects-are-king @EnricoGiurin – azizunsal

4

Esta pregunta es bastante viejo, pero pensé que todavía podría valer la pena compartir.

En general, voy a crear por primera vez las clases de objeto de página requeridos. Luego creo una clase separada para la lógica de prueba, donde pondría su 'flujo de trabajo del usuario' de clics y otras interacciones de la página. Del código de ejemplo proporcionado, supongo que esta clase reemplazará main(). Esta es también la clase en la que incluyo cosas como TestNG/JUnit, anotaciones de prueba, y dataProviders (no es estrictamente necesario, pero si se utiliza esas cosas, que puede ser útil tener en cuenta) En esta clase, se puede crear una instancia de las clases para las páginas interactuarás con como ya que el objeto webdriver que creaste controla el navegador, no las clases de página.

Hacer las cosas de esta manera permite que los cambios simples para probar los flujos de trabajo, y también a los objetos de la página en caso de que se cambiaron las páginas reales, o simplemente tener nuevos requisitos de la prueba.

Mi efecto secundario favorito de este método es que la clase con el flujo de trabajo puede ser un "script" muy legible de la prueba con todos los detalles desagradables en las pruebas reales ocultas en llamadas como loginPage.Login() y loginPage .LoginSucceeded() por lo que un pase informal no ver los detalles de las búsquedas de credenciales de usuario, manejo de 404/400 de, encontrar y hacer clic en el botón de inicio de sesión, etc.

Cuestiones relacionadas