Quero que o Cypress verifique se o link para uma página está correto clicando no link e vendo se o URL contém uma determinada sequência de caracteres.
Para isso, criei a função:
checkLink = (linkEl, expectedPath) => {
let pathString = linkEl.prop('href') ? linkEl.prop('href') : 'no-href';
if (expectedPath && (pathString != 'no-href')) {
cy.task('log', 'Checking link: ' + pathString + ' ' + expectedPath);
cy.get(linkEl).click();
cy.url().should('include', expectedPath);
cy.go('back');
}
}
Na maioria dos casos isso funcionou bem.
No entanto, não funcionaria se o link tivesse um target="_blank"
atributo. Então adicionei .invoke('removeAttr', 'target')
e alterei a função para ser a seguinte:
checkLink = (linkEl, expectedPath) => {
let pathString = linkEl.prop('href') ? linkEl.prop('href') : 'no-href';
if (expectedPath && (pathString != 'no-href')) {
cy.task('log', 'Checking link: ' + pathString + ' ' + expectedPath);
cy.get(linkEl).invoke('removeAttr', 'target').click();
cy.url().should('include', expectedPath);
cy.go('back');
}
}
No entanto, agora ele parece não conseguir obter a URL da página que visita. Por exemplo, recebo o erro:
AssertionError: Timed out retrying after 4000ms: expected '' to include 'mystring'
Se eu executar o teste como o título, posso ver a página (com a string esperada na URL) carregar bem. Parece que o Cypress não está recebendo cy.url()
mais nada por algum motivo.
Alguém sabe o porquê disso?
O Cypress não suporta visitar várias páginas em um teste. Para verificar a URL do link após clicar, você deve fazer isso dentro de um
cy.origin()
comando.Isso registra um teste aprovado:
Também funciona para
target="_blank"
links.Estes são meus dois links, ambos funcionam