Leadfoot + соус: сопоставление набора элементов с использованием getAttr не работает только на мобильных устройствах

Мой вариант использования варьируется для этого, но в целом я пытаюсь собрать кучу элементов, а затем применить _.map() к каждому. Проблема в том, что эта серия вызовов .getAttribute() может привести к сбою теста, который работает локально, на удаленном сервере, таком как соус/андроид.

Один пример: собрать все <div class='article'><a href='articles/{id}'> на странице, а затем получить hrefs. это может выглядеть примерно так, и этот подход будет работать, пока я не проверю его в мобильной (Android) среде соуса. тогда я получаю тайм-аут.

Возможно ли, что это проблема, связанная с возможностями моей среды Android? Чтобы накопить столько запросов? Я попытался уменьшить масштаб своего теста с 75 статей до 45 и увеличил время ожидания до 60 секунд, но мобильный тест все равно не работает. локально с chromedriver все в порядке, chrome desktop + соус в порядке.

Не мой реальный тест, а приближение кода, о котором я говорю:

/// ... return this.remote
.findAllByTagName('div.article a')
    .then(function (articles) {
      var promises = articles.map(function(article) {
        return article.getAttribute('href');
      });
      Promise.all(promises)
      .then(function (hrefs) {
        uniques = _.uniq(hrefs);
        assert(hrefs.length === uniques.length);
      });
    });

person erikdstock    schedule 15.04.2016    source источник
comment
Какую ошибку вы получаете?   -  person jason0x43    schedule 15.04.2016
comment
Вероятно, вам следует попробовать более распространенный клиент JavaScript. Это выглядит сомнительно только из-за названия: Leadfoot безумно быстро запускает браузеры.   -  person Florent B.    schedule 15.04.2016
comment
@ jason0x43 - я получаю сообщение об ошибке: «Достигнуто время ожидания на Android 4.4 в Linux - бесконечная прокрутка работает 3 раза». Похоже, это самая последняя версия сборки Android, предлагаемая в их конфигураторе, и она работает на эмуляторе Android. Я полагаю, что другим вариантом было бы избежать эмулятора Android и просто использовать хром/сафари с мобильными размерами/возможностями?   -  person erikdstock    schedule 16.04.2016


Ответы (1)


Поскольку вы видите ошибку тайм-аута, я предлагаю продолжать увеличивать тайм-аут теста, пока тест не пройдет. Мобильные среды тестирования в Sauce медленнее инициализируются и медленнее работают, чем среды настольных компьютеров, поэтому вполне возможно, что тест с большим количеством запросов просто очень медленный.

Один из способов ускорить процесс — использовать блок execute для сбора ссылок, например:

.then(function (articles) {
    return this.parent.execute(function (articles) {
        return articles.map(function (node) {
            return node.getAttribute('href');
        });
    }, [ articles ]);
})

В приведенном выше фрагменте массив элементов articles передается в качестве аргумента блоку выполнения. Удаленный WebDriver десериализует ссылки на элементы в фактические элементы DOM, с которыми можно работать в коде execute. Это значительно эффективнее, чем использование отдельных getAttribute запросов для каждого элемента, поскольку к удаленному браузеру будет отправлен только один запрос.

person jason0x43    schedule 16.04.2016
comment
Спасибо! Это прекрасно все объясняет. - person erikdstock; 16.04.2016
comment
На самом деле это не работает с использованием execute в мобильной среде [selendroid]. В частности, я получаю, что объект исключения Selendroid [объект HTMLAnchorElement] не имеет метода «карта». Отлично работает локально с chromedriver и удаленно с браузером chrome. - person erikdstock; 18.04.2016
comment
Странный. Похоже, что аргумент articles заканчивается как один элемент на selendroid. Таким образом, один и тот же тестовый код ведет себя по-разному на Selendroid и chromedriver? - person jason0x43; 19.04.2016
comment
Ага. в конце концов я переключился на запуск тестов в chromedriver с режимом мобильного устройства, который работает намного быстрее и предсказуемее с гораздо более быстрым обнаружением возможностей. Дайте мне знать, если я могу помочь с чем-нибудь еще, связанным с этим. - person erikdstock; 19.04.2016