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);;
});
});