Tengo una tabla que tiene una columna de estado, quiero verificar el estado de la primera fila (que es la última columna). el estado pasa de "en progreso" a completado después de un tiempo (máximo 5 min);
aquí está el DOM:
<tbody> <tr> <td>...</td> <td> ... </td> <td> in progress / complete </td> //status => want to check this cell. </tr> <tr> <td>...</td> <td> ... </td> <td> ... </td> //status </tr> <tr> <td>...</td> <td> ... </td> <td> ... </td> //status </tr> </tbody>¿Cómo llegar a la celda que quiero y usar el mecanismo de sondeo para ver si el estado se completó?
gracias por su ayuda
Primero verificaría el estado "en progreso" para asegurarme de que la secuencia sea correcta.
cy.contains('tbody tr:eq(0)', 'in progress') cy.contains('tbody tr:eq(0)', 'complete', {timeout:300000})El patrón para seleccionar fila y columna en Cypress sería
cy.get('tbody tr').eq(0) // first row .find('td').eq(2) // third col .should('contain', 'complete') // criteria to check Esto espera la configuración predeterminada de defaultCommandTimeout , que es de 4000 ms. Para ampliar a 5 minutos, agregue un tiempo de espera de 300000.
cy.get('tbody tr').eq(0) .find('td').eq(2, {timeout:300000}) .should('contain', 'complete') // on fail retry above up to 5 minutesPero es posible que obtenga errores con esto dependiendo de los cambios en el DOM después de que se actualice el estado. Si la fila o la tabla se actualizan con una copia nueva, es posible que deba combinar los pasos en un selector.
cy.get('tbody tr:nth-child(1) td:nth-child(3)', {timeout:300000}) .should('contain', 'complete') No siempre está claro qué pasos en una cadena de comando se repetirán cuando .should() falla.
También puede usar within para ir dentro del primer tr y esperar la cantidad de tiempo deseada para que aparezca el texto complete . Algo como esto:
Para coincidencia exacta de texto:
cy.get('tbody') .find('tr') .eq(0) .within(() => { //eq(0) gets the first tr cy.get('td', {timeout: 300000}).eq(2).should('have.text', 'complete') //Exact text match })Para coincidencia de texto parcial:
cy.get('tbody') .find('tr') .eq(0) .within(() => { //eq(0) gets the first tr cy.get('td', {timeout: 300000}).eq(2).should('contain.text', 'complete') //partial text match })