Как я могу протестировать компонент AWS Amplify Angular Authenticator с помощью Cypress?
Я хочу иметь возможность "вводить" тестовые данные в компонент AWS Amplify Authenticator (ampify-Authenticator) в кипарисовом тесте следующим образом:
describe('My Authenticator Test', () => {
it('should let me type in the username field', () => {
cy.visit('http://localhost:8100/');
cy.get('amplify-authenticator')
.find('input#username')
.type('sample@example.com');
}
}
Однако, хотя я могу осмотреть элемент и увидеть его:
Тест Cypress не может найти поле ввода.
Как я могу получить доступ к полю "имя пользователя" (и другим подобным полям) с помощью Cypress?
1 ответ
Поскольку AWS Amplify Authenticator - это компонент с "теневым DOM", нам необходимо включить поддержку Shadow Dom в Cypress, отредактировав файл cypress.json и добавив запись для "экспериментальной ShadowDomSupport", например:
{
"supportFile": "cypress/support/index.ts",
"experimentalShadowDomSupport": true
}
Теперь мы можем искать компоненты в Shadow DOM в нашем тесте следующим образом:
describe('My Authenticator Test', () => {
it('should let me type in the username field', () => {
cy.visit('http://localhost:8100/');
cy.get('amplify-authenticator')
.shadow()
.get('amplify-sign-in')
.shadow()
.find('amplify-form-section')
.find('amplify-auth-fields')
.shadow()
.as('amplifyAuthFields');
cy.get('@amplifyAuthFields')
.find('amplify-username-field')
.shadow()
.find('amplify-form-field')
.shadow()
.find('input#username')
.type('sample@example.com');
cy.get('@amplifyAuthFields')
.find('amplify-password-field')
.shadow()
.find('amplify-form-field')
.shadow()
.find('input#password')
.type('Password123');
});
});
Здесь я использовал псевдонимы Cypress для повторного использования частей цепочки селекторов.
Так как вы захотите сделать это очень часто, было бы лучше, если бы вы абстрагировали управляющий код аутентификатора в его собственную команду Cypress.