Пишу отдельным топиком, тк это уже подтема — написание тестов.
Меня интересует как сделать так, чтобы скриншот был снят только после какого-то события (например, на объекте window). Это важно для тестирование SPA, они не сразу отрисовываются, а из JavaScript.
Для простоты я пока не пользуюсь своим кастомным событием, а просто проверяю, работает ли с load.
Я не нашла в документации возможности реагировать на события, поэтому пытаюсь пользоваться флагом и функциями executeJS и waitForJSCondition.
Текст теста вот такой:
var gemini = require('gemini');
var examples = [
  '1.1',
  '1.2-1',
  '2.1'
];
examples.forEach(function(example) {
  gemini.suite(example, function(suite) {
      suite.setUrl('/styleguide/#/section/' + example + '/fullscreen')
          .setCaptureElements('body')
          .capture('plain', function(actions, find){
              actions.executeJS(function(window) {
                  window.addEventListener('load', function() {
                      window.doTake = true;
                  });
              })
              actions.waitForJSCondition(function(window) {
                  return window.doTake;
              }, 3000);
          });
  });
});
Но ничего не получается, на снятии скриншотов получаю отлуп "Condition was not met in 3000ms".
Важно отметить, что если я просто пользуюсь actions.wait(3000), то все скриншоты снимаются как надо.
Теперь вопросы:
- Правильно ли я делаю ожидание события на window или может быть есть какой-то более простой путь?
 - Почему не работает?
 - Как дебажить тесты? Я хочу писать console.log и видеть, что там происходит.
 
/cc @arikon @sevinf
Пинг! Без ответа на этот вопрос не могу снимать скриншоты. А с ответом сразу смогу, вот!
@varya На
window.loadнет необходимости вешаться — webdirver его дожидается при открытии страницы и твой код выполняется уже после. Насколько я понимаю, у тебя инициализация как-то асинхронно происходит. Я бы предложил тут какой-то другой индикатор того, что начальный JS отработал заиспользовать — может, наbodyкакой-то специфичный класс после загрузки вешается, или какой-то определенный элемент появляется, или фреймворк для SPA какое-то событие генерирует после загрузки.У меня же написано в тексте, что
loadвзят просто для примера. У меня другое событие, но ни одно событие не получается обработать. Специфичных классов у приложения нет. Ну то есть конечно есть у каких-то компонентов после инициализации. Но задача — снимать весьbody, независимо от того что там за компоненты. Есть какая-то возможность работать именно с событиями? Также остаётся нерешенным вопрос, как дебажить.@varya Для дебага браузерного кода с выводом в консоль пока возможностей нет. Завёл issue https://github.com/gemini-testing/gemini/issues/187
Ты пишешь про
load, но обработчикloadне сработает, потому что код про назначение обработчика выполнится уже после загрузки страницы (когда событиеloadнаступит). Возможно, в твоём случае с другим событием точно такая же ситуация — событие уже наступило до выполнения кода про навешивание на него обработчика.Спасибо. Выглядит логично, тогда сделаю класс на
bodyкак предлагал Сережа выше. Некрасиво, но ладно.