Кнопка Zombie.js не активирована
В настоящее время я пытаюсь использовать zombie.js для запуска автоматических тестов для моего сайта. Прямо сейчас я работаю над автоматизацией регистрации человека. Для регистрации используется форма с 3 разными div, которые выглядят так
Код страницы:
<form>
<div id=step1>
<div id=step2>
<div id=step3>
</form>
...
...
<button id="nextStep" class="btn btn-primary" role="button"
onClick="signupNext()">Cnt. </button>
RegistrationNext - это функция javascript, которая отключает кнопку, затем некоторые простые вещи, а затем снова включает кнопку.
Зомби код:
browser
.visit(https://example.com, function(){
browser.fill(....)
browser.fill(....)
browser.pressButton('#nextStep', function(){
browser.fill(...)
browser.fill(...)
browser.pressButton('#nextStep', function(){ //THIS LINE Errors
...
...
});
});
})
Зомби выдает ошибку "Кнопка отключена" на второй.pressButton. Что касается моего понимания zombiejs, мне кажется, что pressButton должен дождаться окончания события и затем выполнить функцию обратного вызова.
* новичок в зомби
2 ответа
Это может быть связано с тем, как вы проверяете ввод, чтобы включить / отключить эту кнопку. Я предполагаю, что вы, вероятно, используете либо keyup, blur, либо оба события. Когда зомби заполняет эти входные данные для вас, это не беспокоит запуск этих событий, так как, когда реальный пользователь заполняет их с помощью реального браузера, вы должны будете использовать зомби для запуска любого события, которое вам нужно, сразу после ввода залил, вот так:
browser.fill(...);
browser.fill(...);
browser.fire("{checkedInputSelector}", "keyup", function(){
browser.pressButton('#nextStep', function(){ //THIS LINE shouldn't error anymore
...
...
});
});
Все происходит асинхронно Из документации:
Браузер загрузит документ и, если документ содержит какие-либо сценарии, также загрузите и выполните эти сценарии. Затем он будет обрабатывать некоторые события, например, все, что ваши скрипты делают при загрузке страницы. Все это, как и в реальном браузере, происходит асинхронно.
Чтобы дождаться полной загрузки страницы и обработки событий, вы переходите в функцию обратного вызова. Затем Zombie вызовет ваш обратный вызов с нулевым значением, объектом браузера, кодом состояния последнего ответа и массивом ошибок (возможно, пустым). Это JavaScript, поэтому вам не нужно объявлять все эти аргументы, и на самом деле вы можете получить к ним доступ как browser.statusCode и browser.errors.
(Почему первый аргумент обратного вызова будет нулевым? Он прекрасно работает при использовании асинхронных сред тестирования, таких как Mocha
Зомби также поддерживает обещания. Когда вы вызываете такие функции, как посещение, ожидание или clickLink без обратного вызова, вы получаете обещание. После того как браузер завершит обработку, он либо выполнит, либо отклонит обещание.
Например:
browser.visit("http://localhost:3000/").
then(function() {
assert.equal(browser.text("H1"), "Deferred zombies");
}).
fail(function(error) {
console.log("Oops", error);
});