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

Теги: #<Tag:0x00007f78ff517410> #<Tag:0x00007f78ff5172d0> #<Tag:0x00007f78ff5171e0> #<Tag:0x00007f78ff517028> #<Tag:0x00007f78ff516f38>

Вопрос заключается в том, что при повторном запуске тестов выходит ошибка “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/

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

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

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

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

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;

});

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

  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 для дебага

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