Busca lo que quieras

Mostrando entradas con la etiqueta Testing Code. Mostrar todas las entradas
Mostrando entradas con la etiqueta Testing Code. Mostrar todas las entradas

Como ajustar tamaño de window de phantomjs con se-interpreter

Seré lo más breve posible.

Esto gracias a david.lince y a la documentación de se-interpreter.

El problema:

Cuando se corren las pruebas E2E con phantomJS, me generaba error, pues no encontraba ciertos objetos en el DOM. ¿Por qué? Porque la ventana que genera phantomJS era muy pequeña, razón por la cual los sidebars estan ocultos, y por esto, no encontraba los botones que estaban dentro de esos sidebars.

Eso lo logré determinar gracias a que ejecuté las pruebas sobre firefox con tamaño pequeño de la ventana, y sucedió el mismo error.

¿La solución?

Obligar a phantomJS a ejecutarse sobre un tamaño de pantalla grande.

¿Y cómo se hace eso?

Me demoré como unas 3 o 4 horas. Que triste.
La utilidad que estamos utilizando es la de se-interpreter. Eso es como un framework que me permite ejecutar una serie de pasos formateados en un json.

Asi que bajo esta herramienta de se-interpreter, tocó realizar el ajuste.

Aquí estan las cosas que me toco hacer:

PRIMERO:

1. Gracias a un script que subió david.lince, pude hacer esto, sino... imposible....
Aquí el link donde tome este codigo: https://github.com/Zarkonnen/se-interpreter/blob/master/step_types/setWindowSize.js

 Entonces..

En la carpeta step_types, (que esta en la carpeta donde quedó instado se-interpreter)crear un archivo que se puede llamar setWindowSize.js.
Y ese archivo debe contener lo siguiente:

exports.get = function(stepType) {
  if (stepType == "windowSize") {
    return {
      'run': function(tr, cb) {
        tr.do('windowHandle', [], cb, function (err, handle) {
          var w = parseInt(tr.p('width'), 10),
              h = parseInt(tr.p('height'), 10);
          tr.do('windowSize', [handle, w, h], cb, function(err) {
            cb({'success': !err, 'error': err});
          });
        });
      }
    };
  }
  return null;
};

SEGUNDO
Ahora, en nuestro json de pruebas, podemos agregar un step de tipo windowSize.

Ejemplo...

"steps": [
        {
            "type": "get",
            "url": "http://localhost:8001"
        },
        { "type": "windowSize",  "width": 1600, "height": 900 },
        {
            "type": "waitForElementPresent",
            "locator": {
                "type": "xpath",
                "value": "//li[@id='menuListInbox']//span[.='Inbox']"
            }
        }
...
]


Como esta resaltado, defino un paso extra al principio del set de pruebas, en el cual le estoy diciendo que por favor, me coloque el tamaño de la ventana de un tamaño de 1600 por 900.

TERCERO

Finalmente cuando ejecutemos nuestro comando de se-interpreter debemos agregar un parámetro extra donde le decimos a se-interpreter que vamos a agregar un modulo extra, en este caso setWindowSize. Ese parámetro es: executorFactory.

Así:

se-interpreter archivoConfiguracionPruebas.json --executorFactory=" + __dirname + "\\node_modules\\se-interpreter\\step_types\\setWindowSize.js"  + " --parallel 1  --listener=" + __dirname + "\\scripts\\reporter\\listenerDeReportes.js


Y LISTO!!!... a probar se dijo... y me funcionó a mi... espero a ti tambien!!!!!

Saludos.


Sean felices! :) Y siéntanse libres de opinar ;)

Agregar waitFormElementPresent a las pruebas de selenium en javascript

Si hemos creado pruebas con selenium builder, para las pruebas end to end. Y hemos formado nuestras pruebas bajo el formato json, este script quizas te pueda servir.

Lo que sucede es que si los comandos se ejecutan más rápido que el browser en renderizar los objetos del DOM, se va a producir un error. (Lógico: por ejemplo, no puedo hacer clic a un botón que nisiquiera se ha puesto en el DOM).

Por esa razón, es bueno agregar la instrucción de waitForElementPresent. De esta manera nos aseguramos que antes que pase al siguiente comando click o lo que sea, primero espere a que este el objeto.

Esto se puede hacer manualmente, pero ¡Que pereza!. Por eso, hice una pequeña función que agrega la instrucción waitForElementPresent, antes de cada click o acción sobre algún elemento del DOM. Cabe decir que esta es la versión 0.0.0.0.0.0.0.1, y que esta para mejorarla muchísimo.

Esta es la función:

var newJson = JSON.parse(JSON.stringify(json));
newJson.steps = [];
for(iStep = 0; iStep < json.steps.length; iStep++){
    
    if(json.steps[iStep].type=="clickElement" || json.steps[iStep].type == "setElementText")
    {
        var step =  JSON.parse(JSON.stringify(json.steps[iStep]));
        //modify type step to waitStep
        step.type = "waitForElementPresent";
        newJson.steps.push(step);
    }
    newJson.steps.push(json.steps[iStep]);
}


Donde el json es: El objeto json de nuestras pruebas.

y newJson es: El nuevo objeto json de pruebas con waitForElementPresent.

El uso rudimentario que le doy actualmente es:

Copiar el json en la consola de chrome, y asignarlo a la variable json. 

Posteriormente ejecutar el pedazo de código puesto arriba

Obtener el json final así:

JSON.stringify(newJson)

Copio el string en una herramienta online de formateo de json, por ejemplo: http://pro.jsonlint.com/.

Lo pego, y listo... ya tengo mi json formateado de pruebas.

AQUI ESTA EN JSFIDDLE LA IDEA:

http://jsfiddle.net/elkin0727/k791oyaj/


Espero les sirva.


Sean felices! :) Y siéntanse libres de opinar ;)

Palabras Clave

.NET (93) AJAX (2) ajaxcontroltoolkit (2) Algoritmos (1) android (1) Angular (1) Arrays (1) AS2 o ActionScript 2.0 (1) AS3 o ActionScript 3.0 (64) ASP (7) ASP.NET (3) Azure (1) Azure DevOps (2) Backup (2) Batch (4) blogger (1) Browser Support (2) C# (53) Charts (1) Chorme extensions (1) Chrome (3) cmd (18) código postal (1) Colombia tips (1) command (1) Conexion remota (1) Controles Web .NET (24) Cookies (1) cordova (1) CSS (14) CSV (5) Cufon (1) DateTime (2) deployment (2) Desarrollo movil (2) Desarrollo web (5) Diseño (4) DNN o DotNetNuke (5) docker (1) Encuestas (1) Entity Framework (1) Error (1) Eval (2) Excel (4) Expresiones regulares (2) Facebook (14) fechas (1) Fiddler (1) FileUpload (1) Filezilla (1) Firefox (2) Flash (9) Fonts (3) FQL (1) frameworks (2) Futuro de la web (1) git (1) Google Code (13) Google Maps (4) hackintosh (3) hazard 10.6.2 (3) herramientas para developers (1) highchart (1) Hilos (2) Hosting Windows (18) HTML (38) HTML5 (6) IDE (1) IE (2) IE9 (1) IIS (13) imagenes (3) jasmine (2) java (1) jqgrid (2) Jquery y Javascript (90) jquery-ui (5) jQueryMobile (1) JSON (1) knockout (4) library (1) Link Interesantes (2) List (1) Macro (2) Matemáticas (2) Membership (6) Memoria (1) Mis Experiencias (3) momentjs (1) ms-dos (1) MSN (1) MVC (1) MVC4 (3) MySQL (2) node.js (4) Notepad++ (3) Notificaciones (1) ObjectDataSource (2) Online (2) Opinión (4) OSX (3) Parallels Plesk Panel (1) petapoco (1) PhantomJS (1) PHP (4) Porqué este blog (1) Powershell (1) Razor (3) Redes (2) REGEX (4) REST (1) SDK Android (1) Seguridad (1) SelectParameters (1) Selenium (2) sencha (3) sencha cmd (2) SEO (1) SMTP (2) Software útil (8) Solución (1) Soporte (1) SQL (15) SQL Server (58) SQLite (2) Store Procedures (20) String (5) Testing Code (2) texto (2) tips de datos (1) tips de desarrollo (1) TutoFaceAS3 (4) TutoProAS3 (4) Tutoriales (7) Tweenlite effects (3) Últimas noticias (1) unit testing (1) usb (1) VBA (1) Video (1) virus (1) Web API (2) Web Browsers (1) Web Forms (7) web.config (1) Webmaster (8) Webmatrix (1) webrole (1) webservices (1) webstorm (1) Win Forms (5) Windows (21) Windows 7 (1) Windows 8 (1) XML (2) Youtube API (2)