Скажите, что у меня есть тест Nightwatch с двумя шагами, которые заполняют форму. В рамках первого шага мне нужно динамически запрашивать некоторые данные со страницы (используя Selenium api), затем использовать эти данные для создания дополнительных вызовов селена и использовать конечный результат для создания пользовательских утверждений. Причина, по которой мне нужно использовать Selenium api, заключается не в том, что я не знаю, как использовать обычные утверждения Nightwatch, а скорее, что обычных утверждений недостаточно для проверки типов вещей, которые я хочу проверить. Кроме того, в конце первого шага нажата кнопка, которая переходит к следующей части формы (при подготовке ко второму шагу).Nightwatch.js Операции Async Selenium
(код версии):
module.exports = {
'Part 1': (client) => {
// ... do cool stuff
client.SOME_SELENIUM_COMMAND(...SOME_ARGS..., (result) => {
client.SOME_OTHER_SELENIUM_COMMAND(...SOME_OTHER_ARGS..., (result2) => {
// ... do more cool stuff with result2
});
});
// moves the page onto part 2
client.click(SOME_BUTTON);
},
'Part 2': (client) => {
// ... part 2 stuff
}
};
Моя проблема заключается в следующем: тест переходит ко второй части до результата команды селеном часть рассасывается.
Я знаю, что внутри Nightwatch использует какую-то очередь событий и EventEmitters, чтобы убедиться, что команды выполнены в правильном порядке, однако кажется, что команда click в конце первой части ставится в очередь перед командами в обратный вызов может быть.
Спасибо за ответ! Для чего именно должна использоваться команда .perform? (документация не кажется слишком описательной) – dwoodwardgb
Я бы сказал, что она в основном используется, когда вы хотите сделать что-то, что API не поддерживает по умолчанию или если вы хотите выполнять операции async. 'Perform' может использоваться для запуска любого javascript или вызова API, поскольку первый аргумент этой функции является объектом браузера. Оптимальным является то, что вы можете контролировать, какую операцию запускать, а затем вызывать функцию «done()», когда вы хотите продолжить ее до следующего шага. Это решило вашу проблему? –
Да. В настоящее время я создал много абстракций (используя обещания и объекты страницы). Понадобится некоторое время, чтобы выяснить, как работать с этим новым способом вызова api в это ... – dwoodwardgb