Comandos de Cypress y comandos personalizados: 21 datos importantes

Índice del contenido

Comando Cypress

¿Qué son los comandos Cypress?

Cypress nos proporciona API y métodos para interactuar con la interfaz de usuario de la aplicación. Se conocen como Comandos Cypress y ayudan con la interacción de la aplicación web. Todos los comandos que están disponibles tienen métodos incorporados y solo los invocaremos en nuestros casos de prueba. Los comandos de Cypress simularán una acción similar a la de un usuario que intenta realizar operaciones en la aplicación.

Comandos de interacción de la interfaz de usuario proporcionados por Cypress

Hay diferentes comandos proporcionados por Cypress que interactúan con la interfaz de usuario. Examinaremos la lista de todos los comandos en detalle.

  • .hacer clic()
  • .dblclick ()
  • .botón derecho del ratón()
  • .escribe()
  • .claro()
  • .cheque()
  • .uncheck ()
  • .Seleccione()
  • .desencadenar()

Comando de clic Cypress

.hacer clic() - Este comando es para clic cualquier elemento del DOM.

Las siguientes son las sintaxis para hacer clic en el comando

.click() 

.click(options) 

.click(position) 

.click(position, options) 

.click(xCoordinate, yCoordinate) 

.click(xCoordinate, yCoordinate, options) 

Como puede ver arriba, el clic acepta parámetros como opciones, posición, y coordenadas.

Opciones

Las posibles opciones que se pueden pasar a hacer clic son

OptiónPredeterminadoDescripción
tecla AltfalseEncienda la tecla Alternativa (tecla de opción en Mac), como optionKey
ctrlKeyfalseEncienda la llave de control. También conocido como: controlKey.
metaclavefalseActiva la tecla meta (tecla de Windows en Windows o tecla de comando en Mac). También: commandKeycmdKey.
tecla ShiftfalseActiva la tecla de mayúsculas
logverdaderoImprime los registros en la línea de comando
forzarfalseEsta opción fuerza la acción y deshabilita la espera de accionabilidad.
múltiplesfalseHaga clic secuencialmente en varios elementos
tiempo de esperadefaultCommandTimeoutTiempo para .click () espere antes de resolver el tiempo de espera
esperar por animacionesesperar por animacionesOpción para esperar a que los elementos completen la animación antes de ejecutar el comando
Opciones en Click

posiciones

Los diferentes tipos de posiciones que se pueden pasar a .click () son

  • centrotu préstamo estudiantil)
  • izquierda
  • Derecho
  • parte superior
  • arriba a la izquierda
  • parte superior derecha
  • fondo
  • abajo a la izquierda
  • abajo a la derecha

Ejemplo

cy.get('btn').click() //haciendo clic en el botón cy.get('btn').click({ force: true }) //haciendo clic en el botón pasando la opción 'force' como true cy. get('btn').click('bottomRight') // haciendo clic en el botón en la posición inferior derecha cy.get('btn').click(10, 70, { force: true }) // haciendo clic en el botón con valor de posición y fuerza verdadera

Comando de doble clic de Cypress

Se puede lograr un doble clic usando dblclick() sintaxis en Cypress.

Sintaxis

.dblclick()
.dblclick(position)
.dblclick(x, y)
.dblclick(options)
.dblclick(position, options)
.dblclick(x, y, options)

Opciones

.dblclick() acepta todas las opciones que son aceptadas por .click(). Puede encontrar las opciones en la sección anterior.

posiciones

Todas las posiciones posibles que se especifican en .click() también están disponibles para dblclick(). La lista de puestos se puede encontrar en la sección anterior.

Ejemplo

cy.get('button').dblclick() // Haga doble clic en el botón cy.focused().dblclick() // Haga doble clic en el elemento con foco cy.contains('Home').dblclick() // Doble clic haga clic en el primer elemento que contiene 'Home' cy.get('button').dblclick('top') // Haga doble clic en el botón en la posición superior cy.get('button').dblclick(30, 10) // Haga doble clic en las coordenadas de 30 y 10

Comando de clic derecho Cypress

Este comando Cypress, hace clic derecho en el elemento DOM .rightclick() El comando no abrirá los menús contextuales del navegador..rightclick() se utiliza para probar el manejo de eventos relacionados con el clic derecho en la aplicación, como contextmenu.

Sintaxis

.rightclick()
.rightclick(position)
.rightclick(options)
.rightclick(position, options)
.rightclick(x, y)
.rightclick(x, y, options)

Opciones

Como vimos anteriormente, todas las opciones aceptadas por .click() El comando se puede configurar con .rightclick() comando también.

posiciones

Todas las posiciones posibles que se pueden pasar al .rightclick() es igual que el .click() mencionado anteriormente.

Ejemplo

cy.get('.welcome').rightclick() // Haga clic derecho en .welcome cy.focused().rightclick() // Haga clic derecho en el elemento con foco cy.contains('January').rightclick() / / Haga clic derecho en el primer elemento que contiene 'Enero' cy.get('button').dblclick('topRight') // Haga doble clic en el botón en la posición superior derecha cy.get('button').dblclick(80, 20 ) // Haga doble clic en las coordenadas de 80 y 20

Comando tipo Cypress

.type() comando ingresa valor en un elemento DOM.

Sintaxis

.type(text)
.type(text, options)

Argumentos

.type() acepta una cadena como argumento. Los valores pasados ​​a .type() puede incluir cualquiera de las secuencias de caracteres especiales que se indican a continuación.

SecuenciaNotas
{{}Entra en el literal { clave
{backspace}Elimina el carácter de derecha a izquierda del cursor
{del}Elimina el carácter de izquierda a derecha del cursor
{downarrow}Mueve el cursor hacia abajo
{end}Mueve el cursor al final de la línea.
{enter}Escribe la tecla Enter
{esc}Escribe la tecla Escape
{home}Mueve el cursor al inicio de la línea.
{insert}Coloca el carácter a la derecha del cursor
{leftarrow}Mueve el cursor a la izquierda
{movetoend}Mueve el cursor al final del elemento que se puede escribir
{movetostart}Mueve el cursor al inicio del elemento que se puede escribir
{pagedown}Se desplaza hacia abajo
{pageup}Se desplaza hacia arriba
{rightarrow}Mueve el cursor a la derecha
{selectall}Selecciona todo el texto creando un selection range
{uparrow}Mueve el cursor hacia arriba

Opciones

Podemos pasar los objetos como opciones para modificar el comportamiento predeterminado de .type()

OptiónPredeterminadoDescripción
delay10Opción de retraso en el tiempo después de cada pulsación de tecla
forcefalseFuerza la ejecución de la acción y deshabilita esperando la accionabilidad
logtrueMuestra los registros en el Registro de comandos
parseSpecialCharSequencestrueAnalizar caracteres especiales para cadenas rodeadas por {}, Tales como {esc}. Puede configurar la opción para false para ingresar los caracteres literales.
releasetrueEsta opción permite permitir que un modificador permanezca activado entre comandos
scrollBehaviorscrollBehaviorPosición de la ventana gráfica a la que se desplazará un elemento antes de ejecutar cualquier comando
timeoutdefaultCommandTimeoutEs hora de esperar .type() comando para resolver antes del tiempo de espera
waitForAnimationswaitForAnimationsPara decir si esperar a que los elementos terminar de animar antes de ejecutar cualquier comando.
Opciones para escribir comando

Ejemplo

Veamos ejemplos de .type() comando

cy.get('textarea').type('Hola') // ingresa el valor en el área de texto cy.get('body').type('{shift}') //habilita la tecla shift cy.get ('cuerpo').type('{rightarrow}') //escriba evento flecha derecha 

Comando claro de ciprés

El comando Borrar borrará los valores en el área de entrada o en el campo de texto.

Sintaxis

La sintaxis del comando clear es la siguiente.

.clear()
.clear(options)

Opciones

Examinaremos las opciones que se pueden pasar al .clear() mando.

OptiónPredeterminadoDescripción
forcefalseEsto forzará la acción y deshabilitará la espera de que ocurra la acción.
logtrueMuestra el comando en el registro de comandos
scrollBehaviorscrollBehaviorPosición de la ventana gráfica a la que se debe desplazar un elemento antes de ejecutar el comando
timeoutdefaultCommandTimeoutEsta opción es el momento de esperar .clear() para resolver antes del tiempo de espera
waitForAnimationswaitForAnimationsEsto esperará a que los elementos completen la animación antes de ejecutar el comando.
Opciones para comando claro

Ejemplo

Veamos los ejemplos para un comando claro

cy.get('[type="text"]').clear() // Limpiar la entrada del tipo de texto cy.get('textarea').type('Bienvenido!').clear() // Borrar textarea cy .focused().clear() // Borrar entrada/área de texto enfocada

Comando Cypress Check

El comando de verificación marcará o, en palabras más simples, marcará las casillas de verificación o los botones de opción. Puede desmarcar las casillas de verificación o los botones de opción utilizando el .uncheck() mando.

Sintaxis

Entenderemos la sintaxis del comando check en Cypress.

//Syntax for check command
.check()
.check(value)
.check(options)
.check(values, options)

//Syntax for uncheck command
.uncheck()
.uncheck(value)
.uncheck(options)
.uncheck(values, options)

Opciones

Las posibles opciones que se pueden pasar para marcar / desmarcar comandos son las mismas opciones que el comando borrar enumerado anteriormente

Ejemplo

Veremos el ejemplo de cómo podemos usar los comandos de marcar y desmarcar.

cy.get('[type="checkbox"]').check() // Comprobar el elemento de la casilla de verificación cy.get('[type="radio"]').first().check() // Comprobar la primera radio element cy.get('[type="radio"]').check('Male') //Marque el elemento de radio que tiene Male cy.get('[type="checkbox"]').uncheck() / /Desmarque el elemento de casilla de verificación cy.get('[type="radio"]').uncheck() //Desmarque el primer elemento de radio cy.get('[type="checkbox"]').uncheck('Desayuno') // Desmarque el elemento de desayuno

Comando Seleccionar Cypress

El comando seleccionar Cypress le permite seleccionar elementos dentro de un etiqueta.

Sintaxis

La siguiente es la sintaxis para el comando de selección

.select(value)
.select(values)
.select(value, options)
.select(values, options)

Opciones

Podemos pasar las opciones para modificar el comportamiento predeterminado del comando de selección.

OptiónPredeterminadoDescripción
forcefalseEsta opción fuerza a que se lleve a cabo la acción y deshabilita la espera de la accionabilidad.
logtrueMuestra los registros en el registro de comandos y se establece como verdadero de forma predeterminada
timeoutdefaultCommandTimeoutEsta opción es el momento de esperar .select() para resolver antes del tiempo de espera
Opciones para el comando de selección

Ejemplo

Veamos ejemplos para el comando select

cy.get('select').select('butterfly') // Selecciona la opción 'butterfly' cy.get('select').select(0) // selecciona el elemento con índice 0 cy.get('select ').select(['parrot', 'peacock']) //selecciona la opción loro y pavo real

Comando Cypress Trigger

El comando Trigger ayuda a activar cualquier evento en el elemento.

Sintaxis

Examinaremos la sintaxis para acceder al comando de activación.

.trigger(eventName)
.trigger(eventName, position)
.trigger(eventName, x, y)
.trigger(eventName, position, options)
.trigger(eventName, options)
.trigger(eventName, x, y, options)

Optión

El comando Trigger acepta todas las opciones que se mencionan para .clear() mando. Además, hay algunas opciones que podemos configurar que se enumeran a continuación.

OptiónPredeterminadoDescripción
bubblestrueSi el evento debería burbujear
cancelabletrueSi el evento se puede cancelar
eventConstructorEventEl constructor para crear el objeto de evento (p. Ej. MouseEvent, keyboardEvent)
Opción para comando Trigger

Ejemplo

Permítanos diferentes formas de usar .trigger() en el código.

cy.get('a').trigger('mouseover') // Activar el evento mouseover en un enlace cy.get('.target').trigger('mousedown', { button: 0 }) //mousedown activado en button 0 cy.get('button').trigger('mouseup', topRight, { bubbles: false }) //mouseup activado en la posición superiorDerecha con burbuja configurada como falsa

¿Los comandos de Cypress son asincrónicos?

Todos los comandos de Cypress son asincrónicos. Se ponen en cola para su ejecución en un momento posterior y no esperarán a que se completen los comandos. El comando Cypress no hace nada en el momento de su invocación, sino que lo guarda para su ejecución posterior. Puede comprender el comportamiento asincrónico de Cypress esta página

Comandos encadenables de Cypress

En Cypress, podemos usar una serie de comandos para interactuar con elementos en DOM. Es imperativo comprender cómo funciona internamente el encadenamiento de comandos. Si estamos encadenando comandos en una línea en particular, Cypress manejará una promesa basada en la cadena de comandos y producirá un comando basado en el asunto al siguiente comando, hasta que finalice la cadena de comandos o se haya producido un error.

Cypress nos permite hacer clic en un elemento o escribir en elementos usando el .click() or .type() comandos obteniendo los elementos usando cy.get() or cy.contains(). Veamos un ejemplo simple de encadenamiento de comandos.

cy.get('área de texto').type('¿Cómo estás?')

En el ejemplo anterior, cy.get() es un comando de Cypress y .type() es otro comando, donde estamos encadenando el .type() comando en el cy.get() comando, diciéndole que escriba al sujeto que se obtiene de la cy.get() elemento. De manera similar, podemos encadenar todos los comandos que discutimos anteriormente.

Encadenamiento de comandos de aserción en Cypress

Similar a encadenar múltiples comandos usando Cypress, también podemos encadenar afirmaciones con comandos. Las afirmaciones son comandos que le permiten describir el esperado estado o comportamiento de la aplicación. Cypress esperará hasta que los elementos alcancen el estado esperado y la prueba fallará si las afirmaciones no pasan. Veremos cómo podemos usar comandos de encadenamiento para afirmar un elemento.

cy.get('button').should('be.disabled') //esperar si el botón debe estar deshabilitado cy.get('form').should('have.class', 'form-vertical') / /esperar si el formulario debe tener la clase 'form-vertical' cy.get('input').should('not.have.value', 'Name') // afirmar si la entrada no debe tener el valor 'Name '

Como se mencionó anteriormente, estamos usando el cy.get() comando y encadenarlo con el .should() comando de aserción para esperar el comportamiento basado en el resultado. De esta manera, podemos usar la cadena comandos de aserción en Cypress.

Comandos personalizados de Cypress

Cypress nos proporciona API para crear comandos basados ​​en nuestros requisitos. El comando personalizado de Cypress es similar a los comandos predeterminados que ya existen, excepto que es usuario definido. Con los comandos personalizados, podemos jugar con los comandos y encadenarlos según nuestro caso de uso. Los comandos personalizados de Cypress son útiles en nuestro flujo de trabajo si necesita reutilizarlos una y otra vez en las pruebas.

Veamos la sintaxis para crear un nuevo comando personalizado en Cypress.

Cypress.Commands.add(name, callbackFn)
Cypress.Commands.add(name, options, callbackFn)
Cypress.Commands.overwrite(name, callbackFn)

donde los argumentos son los siguientes

nombre - El nombre del comando en cadena que queremos agregar o sobrescribir

devolución de llamadaFn - Esta función toma un argumento pasado al comando

opciones - Pase cualquier objeto de opciones para definir el comportamiento del comando

Note : las opciones solo se admiten para los comandos de adición y no es compatible con los comandos de sobrescritura

OptiónAceptaPredeterminadoDescripción
prevSubjectBooleanString or Arrayfalsedefine cómo manejar el tema cedido anteriormente.

Las opciones que prevSubject acepta son los siguientes

  • false - ignorar materias anteriores (comando de los padres)
  • true - aceptar las materias anteriores (comando infantil)
  • optional - indique si desea comenzar una nueva cadena o usar una cadena existente (comando dual)

Comando personalizado principal en Cypress

Veremos cómo agregar un comando personalizado principal en Cypress. El comando principal siempre comenzará una nueva cadena de comandos, aunque haya encadenado un comando anterior. El comando previamente encadenado será ignorado y siempre se encadenará un comando nuevo. Algunos de los comandos de los padres son cy.visit(), cy.get(), cy.request(),cy.exec(), cy.route()

Ejemplo

Veremos un ejemplo de cómo escribir un comando personalizado principal en Cypress

Cypress.Commands.add('clickLink', (label) => { cy.get('a').contains(label).click() }) //haciendo clic en el enlace "Comprar ahora" cy.clickLink('Comprar Ahora')

En el ejemplo anterior, 'hacer clic en enlace'es el nombre de nuestro comando personalizado. Buscará el Label. En la línea 2, el comando obtiene 'a', y busque el enlace que contiene la etiqueta y haga clic en el elemento. cy.clickLink() ejecutará la acción en el archivo de prueba y hace clic en el botón "COMPRAR AHORA"Enlace".

Comando personalizado infantil en Cypress

Los comandos secundarios personalizados en Cypress están encadenados a un comando principal u otro comando secundario. El asunto del comando anterior se cederá a la función de devolución de llamada.

Algunos de los comandos de Cypress que se pueden encadenar como comando secundario son .click(), .trigger(), .should(), .find(), .as()

Ejemplo

Veremos un ejemplo sobre cómo encadenar un comando personalizado secundario

Cypress.Commands.add('forceClick', {prevSubject: 'element'}, (asunto, opciones) => { // ajustar el asunto existente y hacer algo con él cy.wrap(asunto).click({force:true }) }) //acceder a forceClick en el archivo de prueba cy.get("[data-test='panel-VALUES']").forceClick();

En el ejemplo anterior, estamos nombrando nuestro comando personalizado como 'ForceClick'. Pasamos el argumento prevSubject al elemento y envolvemos el sujeto existente. Con cy.wrap(), estamos forzando a hacer clic en el tema. Luego, en el archivo de prueba, accedemos al comando personalizado, 'ForceClick' en un cy.get() mando.

Comandos personalizados duales en Cypress

Los comandos personalizados duales son híbridos entre un comando principal y uno secundario. Puede comenzar una nueva cadena de comandos o encadenar un comando existente. Los comandos duales son útiles si queremos que nuestro comando funcione de diferentes maneras con o sin el sujeto existente.

Algunos de los comandos que se pueden usar para comandos duales son cy.contains(), cy.screenshot(), cy.scrollTo(), cy.wait()

Ejemplo

Veamos un ejemplo de cómo usar comandos personalizados duales

Cypress.Commands.add('getButton', { prevSubject: 'opcional' }, (asunto) => { if (asunto) { cy.get(asunto).get('btn').its('botón'); } más { cy.get('btn').its('botón'); } })

En algunos casos, necesitaremos obtener el botón del texto usando getButton que adquirirá todo el botón del elemento. Ahora podemos usar getButton para encadenar el con el elemento padre o encadenar el elemento hijo, donde puede invocar los elementos del padre.

Puesto que el prevSubject es opcional, podemos pasar el sujeto como argumento o invocar el comando sin el sujeto en el archivo de prueba como se muestra a continuación

cy.getButton() // sin el asunto cy.get('#loginBtn').getButton() // con el asunto

Sobrescritura de comandos Cypress existentes

Podemos sobrescribir los comandos Cypress ya existentes y modificar el comportamiento para evitar crear otro comando que intente utilizar el comando original al final.

Algunos de los comandos originales de Cypress que se pueden sobrescribir son cy.visit(), cy.type(), cy.screenshot(), cy.contains()

Ejemplo

Veamos un ejemplo de cómo podemos sobrescribir el Cypress existente mando.

Cypress.Commands.overwrite('contains', (originalFn, subject, filter, text, options = {}) => { // determinar si se pasó un argumento de filtro if (typeof text === 'object') { options = texto texto = filtro filtro = indefinido } opciones.matchCase = false return originalFn(asunto, filtro, texto, opciones) } )

Como vimos anteriormente, estamos usando el Cypress.Commands.sobrescribir para modificar el comando Cypress existente. Estamos nombrando nuestro comando personalizado como contains y estamos pasando argumentos para determinar si el argumento del filtro ha pasado.

Comandos de importación de Cypress

En esta sección, entenderemos cómo importar comandos Cypress.

Debemos crear nuestros comandos personalizados Cypress en el cypress / support / commands.js expediente. Agregaremos los comandos personalizados en el archivo command.js e importaremos en nuestro archivo de caso de prueba para usarlo.

anysnap 01 oct 2021 a las 4 03 59 pm
Archivo Command.js

Comandos personalizados de Cypress con ejemplo

Entenderemos cómo crear un comando personalizado y usarlo en nuestro archivo de especificaciones con un ejemplo en tiempo real.

Como vimos anteriormente, tenemos que agregar nuevos comandos personalizados debajo del comandos.js expediente. En ese archivo, agreguemos un comando personalizado para una función de inicio de sesión

Cypress.Commands.add("login", (nombre de usuario, contraseña) => { //agregar un nuevo comando llamado login cy.get('[id=Email]').clear(); cy.get('[id =Correo electrónico]').type(nombre de usuario); cy.get('[id=Contraseña]').clear(); cy.get('[id=Contraseña]').type(contraseña); cy.get( '[tipo=enviar]').clic(); });
imagen
Comandos personalizados en el archivo command.js

En el código anterior, estamos nombrando nuestro comando personalizado como Inicie sesión. Dentro del comando personalizado, hemos agregado los pasos para borrar el campo de nombre de usuario e ingresar un valor en el campo de texto. De manera similar, estamos limpiando el campo y agregando la contraseña en el campo de contraseña. Más tarde, haremos clic en el botón enviar. Este es un comando personalizado simple que acepta dos argumentos: nombre de usuario y contraseña. Pasaremos el valor del nombre de usuario y la contraseña en nuestro archivo de especificaciones.

Ahora creemos un archivo de especificaciones llamado customCommand.spec.js en la carpeta de integración. Nuestro archivo de especificaciones contendrá el siguiente código

describe("Ejemplo de comandos personalizados", () => { it("debe iniciar sesión usando los comandos personalizados", () => { cy.visit("https://admin-demo.nopcommerce.com/"); cy .acceso("[email protected]", "admin"); cy.url().should('be.equal', 'https://admin-demo.nopcommerce.com/admin/') }); });
anysnap 01 oct 2021 a las 4 34 30 pm
Archivo de especificaciones accediendo al comando personalizado

Como vimos anteriormente, estamos accediendo a nuestro comando personalizado como cy.login() , donde estamos pasando los valores de nombre de usuario y contraseña.

Comandos personalizados Cypress IntelliSense

IntelliSense proporciona sugerencias de código inteligente en el IDE o editor de código directamente mientras escribimos las pruebas. Ayuda al mostrar una ventana emergente que muestra la definición del comando, un enlace a la página de documentación y ejemplos de código. Si usamos cualquier editor de código moderno como Visual Studio Code o IntellJ, IntelliSense será muy útil.

IntelliSense usa TypeScript para comprender y mostrar la sintaxis. Si escribimos comandos personalizados y proporcionamos definiciones de TypeScript para los comandos personalizados, podemos usar las barras diagonales triples para mostrar IntelliSense, incluso si nuestro proyecto solo usa JavaScript.

Para configurar IntelliSense, necesitamos describir el código en cypress / support / index.d.ts archivo.

// definiciones de tipos para el objeto Cypress "cy" /// declarar espacio de nombres Cypress { interfaz Chainable { /** * Iniciar sesión con credenciales * @example * cy.login(nombre de usuario, contraseña) */ inicio de sesión (nombre de usuario: Cadena, contraseña: Cadena): Encadenable } }

Ahora, debemos informar a nuestros archivos de especificaciones que hay algunas definiciones de Typecript en el índice.d.ts expediente. Entonces, al comienzo de nuestro archivo de especificaciones, agregue el siguiente código para permitir que IntelliSense nos brinde sugerencias.

// escriba definiciones para comandos personalizados como "iniciar sesión" // se resolverá en "cypress/support/index.d.ts" //
anysnap 01 oct 2021 a las 5 06 15 pm
Sugerencia proporcionada por IntelliSense

Como vimos anteriormente, IntelliSense nos proporciona el argumento que proporcionamos en nuestro archivo command.js y ayuda a autocompletar.