t.me/atinfo_chat Telegram группа по автоматизации тестирования

Ошибки при запуске тестов puppeteer + chai +mocha

mocha
execution
chai
javascript
puppeteer
Теги: #<Tag:0x00007f21d6cc20f0> #<Tag:0x00007f21d6cc1f60> #<Tag:0x00007f21d6cc1e20> #<Tag:0x00007f21d6cc1ce0> #<Tag:0x00007f21d6cc1ba0>

(Максим Жадобов) #1

Вопрос заключается в том, что при повторном запуске тестов выходит ошибка “Error: No node found for selector:” .
Хотя до этого тесты проходили без ошибок.
Код в тестах и приложении не менялся.
Пример написания кода:

it("Отображение Техника не найдена", async () => {

	await page.waitFor(2500);

	await page.click("#header > div.tm-basicnav.uk-sticky > div > div > div.one.uk-first-column > a")

	await page.waitFor(2500);

	await page.type("#find-home-index-input", "wsedfrtgyhujik")

	await page.waitFor(2500);
	await page.click("#catalog-items-extra .uk-width-auto button")

	await page.waitFor(2500);

   const element = await page.$(".uk-h3");
    const text = await page.evaluate(element => element.textContent, element);
	expect(text).to.include('Техника не найдена')
});

Запуск - mocha --timeout 3000000 bootstrap.js --recursive test/


(Vladislav Abramov) #2

могло поменяться приложение


(Максим Жадобов) #3

К сожалению нет.


(Dmitri Komarist) #4

page.waitFore(2500) это ожидать появление элемента 2500мс? Наверно элемент не успевает появится за это время. Если это так то лучше поменяйте это значение на переменную и попробуйте увеличить время ожидания.


(Максим Жадобов) #5

Да я тайм увеличиваю .
Все же не понятно. Почему тесты походят успешно а иногда нет . И код не где не менялся .
Файл настойки.

const puppeteer = require('puppeteer');
const { expect } = require('chai');
const _ = require('lodash');
const path = require('path');
const globalVariables = _.pick(global, ['browser', 'expect']);

// puppeteer options
const opts = {
  headless: true,
  defaultViewport: null,
  executablePath: '/usr/bin/google-chrome',
  // slowMo: 100,
  // accept: false,
  timeout: 10000,
  args : [
        '--no-sandbox', '--disable-setuid-sandbox', '--window-size=1920,1080'
  ]
};

// before (async function () {

// 	global.baseURL = 'http://localhost:3000'
// 	global.expect = expect;
// 	global.browser = await puppeteer.launch(opts);
// });


// expose variables
before (function (done) {
	global.baseURL = 'http://localhost:3000'
  global.expect = expect;

  puppeteer
    .launch(opts)
    .then(function (browser) {
      global.browser = browser;
      done();
    });
});



after (async function () {
	// done()
	browser.close();

	global.browser = globalVariables.browser;
	global.expect = globalVariables.expect;

});


(Bohdan B) #6

Несколько советов

  1. не используйте puppeteer для полноценного тестирования, и без понимания как он работает
  2. у вас очень сложные селекторы header > div.tm-basicnav.uk-sticky > div > div > div.one.uk-first-column > a" постарайтесь сделать проще
  3. используйте page.waitForSelector вместо waitFor(2500)
  4. Если есть навигация используйте waitForNavigation
  5. используйте headless: false и slowMo для дебага

(Dmitri Komarist) #7

Иногда падает по причине того что у вас в течении 2500мс не успевает появится один из элементов с искомым селектором (либо задержки в сети, либо долгое время работы скриптов, либо долгие выборки из бд, либо плавающая бага причин может быть сколь угодно много). Попробуйте увеличить ожидания до 5000мс и посмотреть будет ли падать снова.