в моих кипарисовых тестах я хочу установить часы на определенное время, чтобы иметь согласованные временные рамки для каждого теста.
Когда я звоню:
cy.visit('/path/to/page');
cy.get('#elementId').click();
Все в порядке.
Однако, когда я это делаю:
cy.clock(Date.now());
cy.visit('/path/to/page');
cy.get('#elementId').click();
Я получаю следующую ошибку:
This element `<button with Id i want to click>` is not visible because its parent `<body>` has CSS property: `display: none`
Это также происходит, когда я не передаю аргументы cy.clock()
.
Почему cy.clock()
делает тело этой страницы невидимым? И как мне этого избежать?
Как насчет того, чтобы вы предоставили настраиваемый выход, чтобы сначала элемент был виден, а затем click()
.
cy.get('#elementId', {timeout: 6000}).should('be.visible').click()
Или вы также можете использовать {force: true}
, если хотите щелкнуть скрытый элемент.
cy.get('#elementId', {timeout: 6000}).should('be.visible').click({force: true})
Команда cy.clock()
перезаписывает и замораживает функции javascript, относящиеся к таймерам — setTimeout, setInterval, а также объекты Date.
Похоже, ваше приложение использует setTimeout во время загрузки, и некоторый первоначальный javascript не завершен.
Попробуйте добавить cy.tick()
к последовательности команд
cy.clock(Date.now());
cy.visit('/path/to/page');
cy.tick(1000); // try longer and shorter timings
cy.get('#elementId').click()