Here we have a simple sample, to run puppeteer and check OK or NOT browsing uno site.
educacion@family:~/src$ hg clone https://bitbucket.org/maximilianou/docker17_puppeteer educacion@family:~/src/docker17_puppeteer/frontest$ docker-compose up educacion@family:~/src/docker17_puppeteer/frontest/test$ cat index.spec.js const assert = require('assert'); const puppeteer = require('puppeteer'); describe("Browsing with puppeteer:", ()=> { describe("Geting one page", ()=>{ it("Check OK:", async ()=> { const browser = await puppeteer.launch({ args: [ '--no-sandbox', '--disable-setuid-sandbox' ] }); const page = await browser.newPage(); await page.goto('https://bitbucket.org/maximilianou/'); //, {waitUntil: 'networkidle2'}); let textResponse = await page.evaluate(() => { //Maximiliano Usich let elemCheck = document.querySelector('a[href="/maximilianou/"]'); return elemCheck.innerHTML; }); assert( textResponse === 'Maximiliano Usich', "[OK] Content Found" ); browser.close(); }); it("Check Not Found:", async ()=> { const browser = await puppeteer.launch({ args: [ '--no-sandbox', '--disable-setuid-sandbox' ] }); const page = await browser.newPage(); await page.goto('https://bitbucket.org/maximilianou/UPS!!');// , {waitUntil: 'networkidle2'}); let textResponse = await page.evaluate(() => { //Maximiliano Usich let elemCheck = document.querySelector('a[href="/maximilianou/"]'); return elemCheck; }); assert( textResponse === null, "[OK] Content Not Found" ); browser.close(); }); }); }); educacion@family:~/src/docker17_puppeteer/frontest$ cat Dockerfile FROM alekzonder/puppeteer # set working directory #RUN mkdir /app WORKDIR /app # add `/usr/src/app/node_modules/.bin` to $PATH ENV PATH /app/node_modules/.bin:$PATH # install and cache app dependencies COPY package.json /app/package.json COPY test /app/test RUN npm install # start app CMD ["npm", "run", "test"] educacion@family:~/src/docker17_puppeteer/frontest$ cat docker-compose.yml version: '3.5' services: docker-test-puppeteer: container_name: docker-test-puppeteer build: context: . dockerfile: Dockerfile volumes: - '.:/app' - '/app/node_modules' ports: - '3333:3333' environment: - NODE_ENV=development
ERROR: when an error like this happen
docker-test-puppeteer | 1) Browsing with puppeteer: docker-test-puppeteer | Geting one page docker-test-puppeteer | Check OK:: docker-test-puppeteer | Error: Timeout of 10000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/app/test/index.spec.js)
The site did NOT responde on time ( 10000 milis). We have configured this in package.json
educacion@family:~/src/docker17_puppeteer/frontest$ cat package.json { "name": "frontest", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "node_modules/mocha/bin/mocha --timeout 10000 test/index.spec.js" }, "author": "", "license": "ISC", "dependencies": { "mocha": "^5.2.0" } }
This is the way of code, set the timeout in the it().timeout(0), because mocha take 2 seconds.
const assert = require('assert'); const puppeteer = require('puppeteer'); describe("Browsing with puppeteer:", ()=> { describe("Geting one page", ()=>{ it("Check OK:", async ()=> { const browser = await puppeteer.launch({ args: [ '--no-sandbox', '--disable-setuid-sandbox' ] }); const page = await browser.newPage(); await page.goto('https://bitbucket.org/maximilianou/', {waitUntil: 'domcontentloaded'}); //, {waitUntil: 'networkidle2'}); let textResponse = await page.evaluate(() => { //Maximiliano Usich let elemCheck = document.querySelector('a[href="/maximilianou/"]'); return elemCheck.innerHTML; }); assert( textResponse === 'Maximiliano Usich', "[OK] Content Found" ); browser.close(); }).timeout(0);; it("Check Not Found:", async ()=> { const browser = await puppeteer.launch({ args: [ '--no-sandbox', '--disable-setuid-sandbox' ] }); const page = await browser.newPage(); await page.goto('https://bitbucket.org/maximilianou/UPS!!', {waitUntil: 'domcontentloaded'});// , {waitUntil: 'networkidle2'}); let textResponse = await page.evaluate(() => { //Maximiliano Usich let elemCheck = document.querySelector('a[href="/maximilianou/"]'); return elemCheck; }); assert( textResponse === null, "[OK] Content Not Found" ); browser.close(); }).timeout(0);; }); });