Функция часов Cypress делает тело HTML невидимым

в моих кипарисовых тестах я хочу установить часы на определенное время, чтобы иметь согласованные временные рамки для каждого теста.

Когда я звоню:

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() делает тело этой страницы невидимым? И как мне этого избежать?

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
Современные подходы к организации и работе с CSS в проекте
Современные подходы к организации и работе с CSS в проекте
Любой, кто писал CSS в течение некоторого времени, знает о сложностях, которые с этим связаны, и о том, насколько это может быть болезненно.
Как использовать псевдокласс :hover в Tailwind только тогда, когда это действительно необходимо (при наличии курсора)
Как использовать псевдокласс :hover в Tailwind только тогда, когда это действительно необходимо (при наличии курсора)
Я люблю Tailwind. Раньше я относился к нему с подозрением, но как только я попробовал его использовать, я был поражен тем, сколько времени он мне...
Именование классов CSS: Конвенция именования BEM
Именование классов CSS: Конвенция именования BEM
Сопровождаемость кода, сама по себе, является пульсирующим эффектом нескольких факторов. Когда часть программного обеспечения читабельна, ясна,...
1
0
31
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Как насчет того, чтобы вы предоставили настраиваемый выход, чтобы сначала элемент был виден, а затем 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()

Другие вопросы по теме