Я пытаюсь написать скрипт, который:
- Заполняет имя пользователя
- Заполняет пароль
- Клики Отправить
Обратите внимание, чтоЯ не могу изменить компонент React, поскольку он является стабильной производственной сущностью, выходящей за рамки моих усилий по тестированию.Компонент React не выполняется на предварительном условии, которое проверяет, установлены ли поля или нет:
submit(event) {
const username = this.state.data.get('username');
const password = this.state.data.get('password');
event && event.preventDefault();
if (username && password) {
//Authentication logic I want to hit
} else {
//This is the state I am hitting
this.setState(this.getErrorState('Username and password are required'));
}
}
Я попробовал два подхода к моему сценарию.Оба они визуально устанавливают поле «Имя пользователя / Пароль», но условие по-прежнему не выполняется:
Подход с использованием обработчика события изменения (попытка использовать событие изменения для использования изменения состояния):
(async function () {
var usernam = document.querySelectorAll("[placeholder='Username'],[type='text']")[0];
var passwor = document.querySelectorAll("[placeholder='Password'],[type='password']")[0];
usernam.focus();
usernam.select();
var event = new Event(
'change'
);
Object.defineProperty(event, 'target', {writable: true, value: usernam});
event.target.value="admin";
usernam.dispatchEvent(event);
await sleepit(400);
usernam.click();
Object.defineProperty(event, 'target', {writable: true, value: passwor});
event.target.value="adminpass";
passwor.dispatchEvent(event);
await sleepit(400);
passwor.click();
await sleepit(4000);
var confirm = document.querySelectorAll("button")[0];
confirm.click();
})();
function sleepit(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
Программный подход (манипулирование значением напрямую).Примечание. В этом сценарии я эмулировал «ввод текста», поскольку у меня заканчивались идеи:
(async function () {
var usernam = document.querySelectorAll("[placeholder='Username'],[type='text']")[0];
var passwor = document.querySelectorAll("[placeholder='Password'],[type='password']")[0];
usernam.focus();
usernam.select();
usernam.click();
await sleepit(2000);
await typeThing(usernam,"admin");
await sleepit(4000);
passwor.focus();
passwor.select();
passwor.click();
await sleepit(4000);
await typeThing(passwor,"adminpass");
var confirm = document.querySelectorAll("button")[0];
confirm.click();
})();
function sleepit(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function typeThing(domelem,thingtotype) {
for (var i = 0; i<=thingtotype.length; i++){
domelem.value = thingtotype.substr(0, i);
await sleepit(300);
}
}
Любая помощь очень ценится!