2012-02-13 15 views
8

¡Acabo de descubrir el selenio, una gran herramienta! planeo ejecutar/usar el código junit4 generado por selenium-ide. pero necesito que se ejecute con muchos navegadores/controladores web. ¿Hay un junit/java-pattern para este caso de uso? Mi primera idea fue usar @RunWith (Parameterized.class) y proporcionar una lista de WebDrivers (el parámetro para la clase, probablemente proporcionado como un archivo externo que incluye navegadores y versiones ?!). ¿Es esta una buena idea? ¿Es posible proporcionar un @Parameters -metodo central para ser utilizado por todas mis pruebas de Selenium?cómo probar múltiples navegadores (versiones) con selenio y junit

¿Qué alternativas hay?

Probablemente es posible cambiar el "Formato" que exporta el selenio para minimizar los cambios manuales?

Respuesta

4

Bueno, yo no necesito cambiar de conductores de vez en cuando, así que hice esto:

inicializo cosas relacionadas con selenio en mi propia clase - llamado por su nombre de la aplicación y el controlador es abordado por los captadores . Al llamar a mi constructor de la clase, utilizo tipo de enumeración del controlador para inicializar con:

private WebDriver driver; 
public TestUI(Environment.DriverToUse drv){ 
    switch (drv){ 
     case CHROME:{ 
      ChromeDriverService service = ChromeDriverService.createDefaultService(); 
      File file = new File(TestUI.class.getResource("/chromedriver.exe").toURI()); 
      System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, file.getAbsolutePath());     
      ChromeOptions options = new ChromeOptions(); 
      options.addArguments("--start-maximized"); 
      driver = new ChromeDriver(service,options); 
      driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
      break; 
     } 
     case FIREFOX:{ 
      FirefoxProfile ffProfile = new FirefoxProfile(); 
      ffProfile.setPreference("browser.safebrowsing.malware.enabled", false); 
      driver = new FirefoxDriver(ffProfile); 
      driver.manage().window().setPosition(new Point(0, 0)); 
      java.awt.Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
      Dimension dim = new Dimension((int) screenSize.getWidth(), (int) screenSize.getHeight()); 
      driver.manage().window().setSize(dim); 
      driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
      break; 

     }  

public WebDriver getDriver(){ 
return driver; 
} 

por supuesto mi clase Environment se parece a esto

public class Environment { 
public enum DriverToUse {FIREFOX, CHROME}; 
// .. and some other stuff, because I need to test on different environments, so I store here Environment URL for example 

Y mi clase de prueba es como la siguiente

@Before 
public static final Environment.DriverToUse USED_DRIVER = Environment.DriverToUse.FIREFOX; 

@Test 
public void testVersionNumber() throws Exception{ 

    TestUI testUI= new TestUI(USED_DRIVER); 
    WebElement version = testUI.getDriver().findElement(By.id("the Id of element")); 
    version.click(); 
    //... 
} 
2

Utilice Selenium RC/Selenium Server. Estos vienen con las API que necesitarás para ejecutar pruebas remotas en múltiples navegadores simplemente. ¡Feliz cacería!

+0

Supongo que esto también funciona en una máquina local? Aunque intentaré – dermoritz

+0

acabo de leer el documento (http://code.google.com/p/selenium/wiki/Grid2) parece que el problema persiste. con el servidor de selenio también tengo que instanciar "webdriver" con "capacidades" (un navegador específico). en este momento, usar el servidor de rc solo implica una sobrecarga de configuración. – dermoritz

1

Consulte la biblioteca Selenide. Es un contenedor de código abierto para el selenio que hace que la prueba de UI sea muy fácil. Aquí hay un ejemplo de prueba.

@Test 
public void userCanLoginByUsername() { 
    open("/login"); 
    $(By.name("user.name")).setValue("johny"); 
    $("#submit").click(); 
    $(".loading_progress").should(disappear); // Waits until element disappears 
    $("#username").shouldHave(text("Hello, Johny!")); // Waits until element gets text 
} 
Cuestiones relacionadas