Вопрос такой, как указано в заголовке, т. Е. Получить доступ к элементу, родительский элемент которого скрыт. Проблема в том, что согласно документам cypress.io:
Элемент считается скрытым, если:
- Его ширина или высота равна 0.
- Его свойство CSS (или предки) - visibility: hidden.
- Его свойство CSS (или предки) display: none.
- Его свойство CSS - position: fixed, оно находится вне экрана или скрыто.
Но код, с которым я работаю, требует, чтобы я щелкнул элемент, родительский элемент скрыт, а сам элемент виден.
Поэтому каждый раз, когда я пытаюсь щелкнуть элемент, появляется сообщение об ошибке:
CypressError: Превышено время ожидания повторной попытки: ожидается, что '‹mdc-select-item # mdc-select-item-4.mdc-list-item>' будет 'видимым'
Этот элемент '‹mdc-select-item # mdc-select-item-4.mdc-list-item>' не отображается, потому что его родительский элемент '‹ mdc-select-menu.mdc-simple-menu.mdc-select__menu>' имеет свойство CSS: 'display: none'
Я работаю с элементом dropdown item
, который написан на pug
. Элемент - это компонент, определенный в angular-mdc-web, который использует mdc-select
для раскрывающееся меню и mdc-select-item
для его элементов (пунктов), к которым у меня есть доступ.
Пример кода аналогичной структуры:
//pug
mdc-select(placeholder="installation type"
'[closeOnScroll]'="true")
mdc-select-item(value="false") ITEM1
mdc-select-item(value="true") ITEM2
В приведенном выше примере ITEM1
- это элемент, к которому я должен получить доступ. Я делаю это в cypress.io
следующим образом:
//cypress.io
// click on the dropdown menu to show the dropdown (items)
cy.get("mdc-select").contains("installation type").click();
// try to access ITEM1
cy.get('mdc-select-item').contains("ITEM1").should('be.visible').click();
Пробовали с {force:true}
принудительно щелкнуть элемент, но безуспешно. Пытался выбрать элементы, используя {enter}
нажатие клавиши на родительском mdc-select
, но снова не повезло, так как он выдает:
CypressError: cy.type () может вызываться только в textarea или: text. Ваша тема: ‹mdc-select-label class =" mdc-select__selected-text "> Выбрать ...‹ / mdc-select-label>
Также пробовал использовать select
команду, но это невозможно, потому что движок Cypress не может идентифицировать элемент как select
элемент (поскольку это не так, внутренняя работа отличается). Выбрасывает:
CypressError: cy.select () может быть вызван только для. Ваша тема: ‹mdc-select-label class =" mdc-select__selected-text "> Выбрать ...‹ / mdc-select-label>
Проблема заключается в том, что mdc-select-menu
, который является родительским для mdc-select-item
, имеет свойство display:none
в результате некоторых внутренних вычислений при открытии раскрывающихся элементов.
Это свойство заменяется на display:flex
, но это не помогает.
Все без идей. Это работает в Selenium
, но не в cypress.io
. Любая подсказка, что может быть возможным взломом для ситуации, кроме перехода на другие фреймворки или изменения кода пользовательского интерфейса?