Кипарис получить атрибут href
У меня есть тестовый пример, в котором у меня есть ссылка, которая открывается в новой вкладке, и так как Cypress не поддерживает мульти вкладки, я хочу получить атрибут href этой ссылки, а затем открыть его в той же вкладке, я пытаюсь сделать это таким образом, но по какой-то причине это не работает.
it('Advertise link should refer to Contact page', () => {
var link = document.querySelector("div.footer-nav > ul > li:nth-child(2) > a").href;
cy.visit(link);
cy.title().should('include', 'Text');
});
4 ответа
Код ниже должен делать то, что вы пытаетесь достичь. Существует также целый рецепт с предложениями по тестированию ссылок, которые открываются в новых вкладках.
it('Advertise link should refer to Contact page', () => {
cy.get('div.footer-nav > ul > li:nth-child(2) > a')
.should('have.attr', 'href').and('include', 'contact')
.then((href) => {
cy.visit(href)
})
})
Я также предложил бы прочитать документ Cypress о лучших способах назначения и работы с переменными: https://on.cypress.io/variables-and-aliases
Решение 1: invoke("attr", "href")
Перейдите к URL-адресу, указанному в атрибуте href элемента:
cy.get(selector)
.invoke('attr', 'href')
.then((href) => {
cy.visit(href)
})
});
Ссылка: https://docs.cypress.io/api/commands/invoke.html
Решение 2. Не открывайте содержимое в новой вкладке.
Удалите целевой атрибут из элемента привязки, затем щелкните по нему, чтобы перейти к его URL-адресу на той же вкладке:
cy.get(selector).invoke('removeAttr', 'target').click()
Ссылка: https://docs.cypress.io/examples/examples/recipes.html.
Я использовал что-то подобное в тесте:
cy.get('a').each(($el) => {
const herf = $el.attr('href');
cy.log(herf);
// then I will do your test:
cy.visit(link);
cy.title().should('include', 'Text');
});
Я решил эту проблему:
Сначала - проверьте правильность значения href
Во-вторых, создайте еще один тест, в котором посетите этот href
В моем случае значение href было жестко запрограммировано.