2011-03-18 9 views

Respuesta

6

Acabo de crear una prueba por separado y ponerla en la parte superior de todas las pruebas. Almacene la url base en una variable y ahora puedo acceder a ella en otros casos de prueba por $ {variable_name}.

+1

Esto no está funcionando para yo. Intenté poner $ {variable_name} en la url base y en el comando abrir y en ambos casos no está siendo reemplazado por el valor que establecí anteriormente. ¿Puedes dar un poco más de detalles sobre cómo lo hiciste? ¡Gracias! –

+0

Feh. Tenía los argumentos para "almacenar" al revés. –

+0

¿Puede alguien proporcionar más detalles sobre esta estrategia? No puedo conseguir que funcione. Parece que el selenio no evalúa '$ {variables}' en el elemento del enlace, y tratar de 'almacenar' un valor de nuevo en 'selenium.base' en pruebas posteriores no parece funcionar. –

12

El archivo HTML del caso de prueba es responsable de establecer la URL base. Desde Selenium IDE, puede anular la URL base para un caso de prueba. Un conjunto de pruebas, por otro lado, es solo una bolsa para sus casos de prueba.

Elimina la configuración URL base de cada uno de los archivos de casos de prueba a los que se hace referencia en el banco de pruebas. A continuación, configure la URL base a mano para el conjunto de pruebas y ejecute el conjunto.

La línea en cuestión está en la cabeza de cada archivo de caso de prueba:

<link href="http://server-name/" rel="selenium.base"/> 

Si no lo tiene, entonces la URL base anula automáticamente.

+1

Genial, funciona perfectamente para mí. –

32

Si tiene una gran cantidad de casos de prueba en un solo conjunto, es complicado cambiar el URL base para cada uno. En su lugar, cree un caso separado para cada URL base que necesite cambiar. Por ejemplo, tengo store https://testing.site.com/ como myEnvironment guardado como caso de prueba SetEnvTesting. Creo otro caso para mi sitio de producción, SetEnvProduction.

Luego, inserte el ${myEnvironment} al comienzo de cada URL relativa en sus casos de prueba. Por ejemplo, open ${myEnvironment}/login.aspx. (Esto podría ser un problema si ya tiene muchas pruebas. Sugiero que las agregue a partir de ahora). Luego, simplemente coloque el caso de prueba del entorno establecido al comienzo de su conjunto de pruebas. Para cambiar su suite completa a otra URL base, simplemente coloque un caso diferente de entorno establecido al comienzo. Otra cosa agradable es que puede cambiar los entornos en el medio de la suite poniendo en el medio un caso diferente de entorno de configuración.

Editar: Ejemplo de uso de un caso de prueba de SetEnvironment.

El caso SetEnvironment: enter image description here

Un ejemplo de un caso siguiente prueba. enter image description here

Aviso

  1. cómo se utiliza la variable CurrentEnvironment. Puede hacer esto para cada caso en la suite. Además, puede hacer que cada conjunto de pruebas separado use este mismo caso de SetEnvironment, por lo que todas se conmutan juntas.

  2. que la Url base se vuelve irrelevante. Lo estás anulando, esencialmente.

Espero que sea útil!

+0

¿Puedes publicar la secuencia de comandos myEnvironment? – Kayser

+0

@Kayser He editado la publicación para agregar un ejemplo. Espero eso ayude. – arwenvh

+1

@arwenvh re: "es un dolor cambiar la URL base para cada" Utilicé este comando linux/bash para reemplazar todas las líneas ofensivas en mis casos de prueba (todas con extensión .tc) 'find/path/to/your/testcases -type f -name "* .tc" -exec sed -i "s /.* selenium.base. */ /" '{}' \; ' –

9

Lo encontré extremadamente frustrante que no podía tener una URL base en blanco y hacer que utilizara cualquier página que ya tenía abierta como inicio de la prueba.¿Cuál es el punto de poder registrar URLs relativas cuando te obliga a hardcode a url base que está prefijada a cada url relativa (convirtiéndolas en urls absoulte)?

Extendiéndose sobre las otras respuestas ya partir de esta pregunta: In Selenium IDE, how to get the value of the base url

Puede almacenar el dominio actual en una variable y luego usar ese lugar de uno codificado. Esto le permite iniciar sesión en el servidor en el que desea ejecutar las pruebas, presionar play y ejecutará las pruebas sin que todo este sinsentido de baseURL le redirija al servidor incorrecto.

sólo tiene que utilizar estos comandos en el inicio de la primera secuencia de comandos en su suite: store current server

y seguir utilizando la sintaxis http://${host}/ para cada verdad relativa URL que necesita en su guión.

+1

Prefiero usar ** window.location.origin **, ya que incluirá el protocolo y el puerto opcional, por lo que no es necesario que haga suposiciones sobre ellos. –

1

Intenté la respuesta aceptada, funciona para IDE de selenio, pero no funciona cuando se ejecuta stand-alone server.

finalmente, puse el valor dentro del user-extensions.js, y uso storeEval para recuperar el valor. Entonces el mismo valor podría recuperarse dentro de diferentes casos.

EDIT:

En la facilidad de uso extensions.js, añada el siguiente

var selenium_base_url = "http://example.com" 

En la suite HTLM, agregue el siguiente

<tr> 
    <td>storeEval</td> 
    <td>selenium_base_url</td> 
    <td>case_base_url</td> 
</tr> 
<tr> 
    <td>open</td> 
    <td>${case_base_url}/case_path?a=1&b=2</td> 
    <td></td> 
</tr> 

Esto puede parecer extraño en la primera vista, pero en realidad user-extension.js podría modificarse sobre la marcha justo antes de la ejecución stand-alone server, por lo que puede poner una url base diferente utilizando un script en el real Escenario de QA.

+0

Hola @Walty Yeung, ¿tiene algún ejemplo sobre su extensión .js? Tks –

0

Hmm, creo que hay una solución más simple:

  • En la primera prueba (del banco de pruebas) ajustar <link rel="selenium.base" href="http://google.com" /> según sea necesario

  • En las siguientes pruebas Eliminar (usando editor de texto o similar): <link rel="selenium.base" ... />

0

Si estás bien haciendo doble clic varias veces,

  1. Haga doble clic en el de arriba, configúrelo en la URL que desee.
  2. Ahora haga doble clic en la parte superior, central, inferior.
  3. Ahora haga doble clic en la parte inferior, central, superior.
0

Creé un comando de extensión de usuario 'doBaseURL' que manipula el campo IDE de Selenio 'Base URL'. En cada caso de prueba de un conjunto de pruebas agregué este comando | baseURL | | |. Debajo de la superficie establece una variable almacenada llamada baseURL. Es posible dar a la variable almacenada 'baseURL' un valor de un comando de caso de prueba antes del primer comando 'baseURL'. Este método sobrescribe la configuración <link href="http://server-name/" rel="selenium.base"/> de cada archivo de caso de prueba. Para mí, esto funciona bien, ya que ahora el Selenium IDE refleja la URL base que usarán los casos de prueba (o que estaban usando cuando ocurrió un error).

La java script es:

Selenium.prototype.doBaseURL = function(strTarget, strValue) { 
/** 
    * Enables a more predictive Base URL when running a test suite with multiple test cases. 
    * On first usage it wil fill a stored variable 'baseURL' either with the given strTarget, 
    * or when not given with the Base URL as shown on the Selenium IDE UI. The Selenium IDE UI field 
    * Base URL is updated to reflect the (new) base URL. 
    * In each subsequent test case with a baseURL command the stored variable 'baseURL' will determine 
    * the base. 
    * 
    * <p> Best to use as first command in each test case and only in the first test case a strTarget 
    * argument, in that way the test cases of a test suite will no longer depend on their 'hidden' 
    * '<link rel="selenium.base" href="http://www.something.com/" /> 
    * construction, that makes test cases effectively having an absolute base URL. 
    * </p> 
    * 
    * @param strTarget a Base URL value to be used in the test case (e.g. https://www.google.com/) 
    */ 

// pushes the given strTarget into the selenium.browserbot.baseUrl 
// and makes the new Base URL value visible on the Selenium IDE UI. 
// A subsequent open command will use this new Base URL value 

LOG.debug("begin: doBaseURL | " + strTarget + " | " + strValue + " |"); 

// note: window.location.href = strTarget;  causes the browser to replace Selenium-IDE UI with the given url 
// used that knowledge to manipulate the Selenium IDE UI as if a manual Base URL change was done. 
LOG.debug("window.location.href= [" + window.location.href + "]"); 
LOG.debug("window.editor.app.getBaseURL() gives [" + window.editor.app.getBaseURL() + "]"); 

if (strTarget && (strTarget.substring(0,1)!="$")) { // only when strTaget has a value 

strValue = "Base URL changed from [" + selenium.browserbot.baseUrl.toString() + "] into [" + strTarget + "]"; 
selenium.browserbot.baseUrl = strTarget.toString(); 

// set the visible Base URL value on the Selenium IDE UI to the new value 
window.editor.app.setBaseURL(strTarget); 
LOG.debug("updated into: " + window.editor.app.getBaseURL()); 

// remember this value for future calls 
storedVars["baseURL"] = window.editor.app.getBaseURL(); 
LOG.debug("storedVars[\"baseURL\"] set to [" + window.editor.app.getBaseURL() + "]"); 

} else { 
// no value => take storeVars["baseURL"] when set; 
//  otherwise take Selenium IDE Base URL field. 
if ((storedVars["baseURL"] != undefined) && (storedVars["baseURL"] != "")) { 
    strValue = "Base URL changed from [" + selenium.browserbot.baseUrl.toString() + "] into [" + storedVars["baseURL"] + "]"; 
    selenium.browserbot.baseUrl = storedVars["baseURL"]; 

    // set the visible Base URL value on the Selenium IDE UI to the new value 
    window.editor.app.setBaseURL(storedVars["baseURL"]); 
    LOG.debug("updated from storedVars[\"baseURL\"]"); 
} else { 
    strValue = "Base URL changed from [" + selenium.browserbot.baseUrl.toString() + "] into [" + window.editor.app.getBaseURL() + "]"; 
     selenium.browserbot.baseUrl = window.editor.app.getBaseURL(); 

    // remember this value for future calls 
    storedVars["baseURL"] = window.editor.app.getBaseURL(); 
    LOG.debug("storedVars[\"baseURL\"] set to [" + window.editor.app.getBaseURL() + "]"); 
} 
} 
LOG.info(strValue); 
LOG.debug("end: doBaseURL | " + strTarget + " | " + strValue + " |"); 
} 

Instalación de una secuencia de comandos de extensión del usuario se explica en la sección "Uso del usuario-extensiones con selenio-IDE" documentación de la sección SeleniumHQ: http://www.seleniumhq.org/docs/08_user_extensions.jsp

Cuestiones relacionadas