2012-02-26 20 views
5

Estoy tratando de ejecutar una misma prueba en varios navegadores a través de bucle, pero siempre se ejecuta solo en Firefox.Usando el controlador web de selenio para ejecutar la prueba en varios navegadores

bros = ['FIREFOX','CHROME','INTERNET EXPLORER'] 

for bro in bros: 
    print "Running "+bro+"\n" 
    browser = webdriver.Remote(
        command_executor='http://10.236.194.218:4444/wd/hub', 
        desired_capabilities={'browserName': bro, 
              'javascriptEnabled': True}) 
    browser.implicitly_wait(60000) 
    browser.get("http://10.236.194.156") 

Una observación interesante; cuando incluyo el parámetro platform: WINDOWS, solo se ejecuta en Internet Explorer.

¿Funciona Selenium Webdriver de esta forma o mi comprensión es incorrecta?

Respuesta

6

De hecho, me han hecho esto en Java, los siguientes trabajos bien para mí:

... 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.openqa.selenium.remote.RemoteWebDriver; 
... 

DesiredCapabilities[] browsers = {DesiredCapabilities.firefox(),DesiredCapabilities.chrome(),DesiredCapabilities.internetExplorer()}; 
    for(DesiredCapabilities browser : browsers) 
    { 
     try{ 
      System.out.println("Testing in Browser: "+browser.getBrowserName()); 
      driver = new RemoteWebDriver(new URL("http://127.0.0.1:4444/wd/hub"), browser); 
      ... 

Usted tendrá que adaptar esta, por supuesto, si usted está escribiendo sus pruebas en un idioma diferente, sé que es posible en Java, no estoy seguro de lo contrario.

Además, estoy de acuerdo con lo que estás tratando de hacer, creo que es mucho mejor tener una clase que ejecuta las mismas pruebas con diferentes navegadores, en lugar de duplicar el código muchas veces y ser poco elegante.Si está haciendo esto en Java/otros códigos, también sugiero usar un Page Object.

¡Buena suerte!

+0

Gracias, lo intentaré de manera similar y actualizaré sobre el progreso. :-) – pprakash

+0

¿Ha intentado ejecutar múltiples instancias del mismo navegador? Estoy intentando con Chrome, pero está fallando, pero mi constructor comienza con un nuevo ChromeDriver(). ¿Crees que hay una manera de hacer esto? – Johnydep

0

Tendrá que generar múltiples clases de prueba (o instancias de webdriver) con los navegadores elegidos. Un Webdriver se define con un navegador.

+0

Eso es lo que estoy tratando de hacer dentro de la de lazo. Después de la función 'browser.get()' tengo 'browser.close()'. Por lo tanto, cuando el bucle for comienza la siguiente iteración, debe crear un nuevo objeto de controlador con un controlador específico para la nueva variable bro. – pprakash

0

Como Coretek dijo que necesita varias instancias de webdriver. Necesitará ejecutar el archivo .jar de selenium-server y proporcionar a cada una un argumento que especifique el navegador que desea que ejecute esa instancia del servidor.

El argumento para Internet Explorer es * iexplore, el argumento para firefox es * firefox y el argumento para chrome es * chrome. Estos son argumentos de forcedBrowserMode. De lo contrario, el selenio no sabrá contra qué debería correr. Es posible que necesite usar * iexploreProxy para sus pruebas, a veces funciona mejor que el * modo iexplore.

Salida este enlace para más argumentos que pueden ser útiles:

http://seleniumforum.forumotion.net/t89-selenium-server-command-options-while-starting-server

+0

Gracias por su respuesta. No se ha mencionado en ningún lugar de la documentación que para cada nuevo tipo de navegador necesitemos tener una instancia de servidor separada y he usado una instancia de servidor de selenio único y la utilicé para acceder a IE, FF, Chrome y Safari usando Selenium RC. Y también el modelo de argumento de * iexplore/* firefox es para Selenium RC, ¿no es así? Estoy intentando crear un caso de prueba usando Selenium 2.0 (Webdriver). Por favor, avísenme si hay algún documento que me ayude en eso. – pprakash

+0

Todavía funciona con Webdriver a partir de 2.6 (no he actualizado desde hace tiempo) – TheDawg

+0

Si ejecuta selinium como host y nodo, puede proporcionar un archivo de configuración para todos los navegadores que desee (o puede caber en la misma máquina) –

1

Así que si te tengo derecho, que tienen un caso de prueba y quiero que esto sea probado contra diferentes navegadores.

No creo que un bucle sea una buena idea, incluso si es posible (no sé atm).

La idea es poder probar cada caso de prueba independiente en la carrera con un navegador específico (esa es la filosofía de JUnit), no ejecutar todo para llegar a ese navegador específico.

Por lo tanto, debe crear un WebDriver con el navegador específico y el caso de prueba específico.

Le sugiero que separe los archivos de prueba creando un archivo de clase testcase para cada navegador.

Me gusta: FirefoxTestOne.java, IeTestOne.java, ChromeTestOne.java.

Tenga en cuenta que puede agregar múltiples pruebas de Firefox en FirefoxTestOne sin problemas. No hay garantía de que se ejecutarán en un orden particular a través de (filosofía JUnit).

Para enlaces y tutoriales, pregunte en google. Ya hay muchos ejemplos escritos.

0

De esta manera (URL adjunta) funcionó para mí.

http://blog.varunin.com/2011/07/running-selenium-tests-on-different.html

el siguiente punto es diferente del ejemplo.

@Parameters 
public static List data() { 
    return Arrays.asList(new Object[][]{{"firefox"},{"ie"}}); 
} 
@Before 
public void setUp() throws Exception { 
    System.out.println("browser: " + browser); 
    if(browser.equalsIgnoreCase("ie")) { 
     System.setProperty("webdriver.ie.driver", "IEDriverServer64.exe"); 
     driver = new InternetExplorerDriver(); 
    } else if(browser.equalsIgnoreCase("firefox")) { 
     driver = new FirefoxDriver(); 
0

Puede utilizar TestNG para este combinación de selenio + TestNG que da un resultado bateador para este simplemente añadiendo los parámetros de atributo que puede hacer esto

Cuestiones relacionadas