Delete backstop stuff
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
parent
6f29015422
commit
85321cf744
59
backstop.js
59
backstop.js
@ -1,59 +0,0 @@
|
||||
const fs = require('node:fs');
|
||||
const list = fs.readFileSync('./pages.json', 'utf8');
|
||||
|
||||
function scenarioForFile(file) {
|
||||
return {
|
||||
"label": file,
|
||||
"cookiePath": "backstop_data/engine_scripts/cookies.json",
|
||||
"url": file,
|
||||
"referenceUrl": "",
|
||||
"readyEvent": "",
|
||||
"readySelector": "",
|
||||
"delay": 0,
|
||||
"hideSelectors": [],
|
||||
"removeSelectors": [],
|
||||
"hoverSelector": "",
|
||||
"clickSelector": "",
|
||||
"postInteractionWait": 0,
|
||||
"selectors": [],
|
||||
"selectorExpansion": true,
|
||||
"expect": 0,
|
||||
"misMatchThreshold" : 0.1,
|
||||
"requireSameDimensions": true
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
"id": "blog_regression",
|
||||
"viewports": [
|
||||
{
|
||||
"label": "phone",
|
||||
"width": 320,
|
||||
"height": 480
|
||||
},
|
||||
{
|
||||
"label": "tablet",
|
||||
"width": 1024,
|
||||
"height": 768
|
||||
}
|
||||
],
|
||||
"onBeforeScript": "puppet/onBefore.js",
|
||||
"onReadyScript": "puppet/onReady.js",
|
||||
"scenarios": list.map(scenarioForFile),
|
||||
"paths": {
|
||||
"bitmaps_reference": "backstop_data/bitmaps_reference",
|
||||
"bitmaps_test": "backstop_data/bitmaps_test",
|
||||
"engine_scripts": "backstop_data/engine_scripts",
|
||||
"html_report": "backstop_data/html_report",
|
||||
"ci_report": "backstop_data/ci_report"
|
||||
},
|
||||
"report": ["browser"],
|
||||
"engine": "puppeteer",
|
||||
"engineOptions": {
|
||||
"args": ["--no-sandbox"]
|
||||
},
|
||||
"asyncCaptureLimit": 5,
|
||||
"asyncCompareLimit": 50,
|
||||
"debug": false,
|
||||
"debugWindow": false
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
[
|
||||
{
|
||||
"domain": ".www.yourdomain.com",
|
||||
"path": "/",
|
||||
"name": "yourCookieName",
|
||||
"value": "yourCookieValue",
|
||||
"expirationDate": 1798790400,
|
||||
"hostOnly": false,
|
||||
"httpOnly": false,
|
||||
"secure": false,
|
||||
"session": false,
|
||||
"sameSite": "Lax"
|
||||
}
|
||||
]
|
Binary file not shown.
Before Width: | Height: | Size: 2.8 KiB |
@ -1,43 +0,0 @@
|
||||
module.exports = async (page, scenario) => {
|
||||
const hoverSelector = scenario.hoverSelectors || scenario.hoverSelector;
|
||||
const clickSelector = scenario.clickSelectors || scenario.clickSelector;
|
||||
const keyPressSelector = scenario.keyPressSelectors || scenario.keyPressSelector;
|
||||
const scrollToSelector = scenario.scrollToSelector;
|
||||
const postInteractionWait = scenario.postInteractionWait; // selector [str] | ms [int]
|
||||
|
||||
if (keyPressSelector) {
|
||||
for (const keyPressSelectorItem of [].concat(keyPressSelector)) {
|
||||
await page.waitForSelector(keyPressSelectorItem.selector);
|
||||
await page.type(keyPressSelectorItem.selector, keyPressSelectorItem.keyPress);
|
||||
}
|
||||
}
|
||||
|
||||
if (hoverSelector) {
|
||||
for (const hoverSelectorIndex of [].concat(hoverSelector)) {
|
||||
await page.waitForSelector(hoverSelectorIndex);
|
||||
await page.hover(hoverSelectorIndex);
|
||||
}
|
||||
}
|
||||
|
||||
if (clickSelector) {
|
||||
for (const clickSelectorIndex of [].concat(clickSelector)) {
|
||||
await page.waitForSelector(clickSelectorIndex);
|
||||
await page.click(clickSelectorIndex);
|
||||
}
|
||||
}
|
||||
|
||||
if (postInteractionWait) {
|
||||
if (parseInt(postInteractionWait) > 0) {
|
||||
await page.waitForTimeout(postInteractionWait);
|
||||
} else {
|
||||
await page.waitForSelector(postInteractionWait);
|
||||
}
|
||||
}
|
||||
|
||||
if (scrollToSelector) {
|
||||
await page.waitForSelector(scrollToSelector);
|
||||
await page.evaluate(scrollToSelector => {
|
||||
document.querySelector(scrollToSelector).scrollIntoView();
|
||||
}, scrollToSelector);
|
||||
}
|
||||
};
|
@ -1,31 +0,0 @@
|
||||
/**
|
||||
* INTERCEPT IMAGES
|
||||
* Listen to all requests. If a request matches IMAGE_URL_RE
|
||||
* then stub the image with data from IMAGE_STUB_URL
|
||||
*
|
||||
* Use this in an onBefore script E.G.
|
||||
```
|
||||
module.exports = async function(page, scenario) {
|
||||
require('./interceptImages')(page, scenario);
|
||||
}
|
||||
```
|
||||
*
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const IMAGE_URL_RE = /\.gif|\.jpg|\.png/i;
|
||||
const IMAGE_STUB_URL = path.resolve(__dirname, '../../imageStub.jpg');
|
||||
const IMAGE_DATA_BUFFER = fs.readFileSync(IMAGE_STUB_URL);
|
||||
const HEADERS_STUB = {};
|
||||
|
||||
module.exports = async function (page, scenario) {
|
||||
page.route(IMAGE_URL_RE, route => {
|
||||
route.fulfill({
|
||||
body: IMAGE_DATA_BUFFER,
|
||||
headers: HEADERS_STUB,
|
||||
status: 200
|
||||
});
|
||||
});
|
||||
};
|
@ -1,16 +0,0 @@
|
||||
const fs = require('fs');
|
||||
|
||||
module.exports = async (browserContext, scenario) => {
|
||||
let cookies = [];
|
||||
const cookiePath = scenario.cookiePath;
|
||||
|
||||
// Read Cookies from File, if exists
|
||||
if (fs.existsSync(cookiePath)) {
|
||||
cookies = JSON.parse(fs.readFileSync(cookiePath));
|
||||
}
|
||||
|
||||
// Add cookies to browser
|
||||
browserContext.addCookies(cookies);
|
||||
|
||||
console.log('Cookie state restored with:', JSON.stringify(cookies, null, 2));
|
||||
};
|
@ -1,3 +0,0 @@
|
||||
module.exports = async (page, scenario, viewport, isReference, browserContext) => {
|
||||
await require('./loadCookies')(browserContext, scenario);
|
||||
};
|
@ -1,6 +0,0 @@
|
||||
module.exports = async (page, scenario, viewport, isReference, browserContext) => {
|
||||
console.log('SCENARIO > ' + scenario.label);
|
||||
await require('./clickAndHoverHelper')(page, scenario);
|
||||
|
||||
// add more ready handlers here...
|
||||
};
|
@ -1,27 +0,0 @@
|
||||
/**
|
||||
* OVERRIDE CSS
|
||||
* Apply this CSS to the loaded page, as a way to override styles.
|
||||
*
|
||||
* Use this in an onReady script E.G.
|
||||
```
|
||||
module.exports = async function(page, scenario) {
|
||||
await require('./overrideCSS')(page, scenario);
|
||||
}
|
||||
```
|
||||
*
|
||||
*/
|
||||
|
||||
const BACKSTOP_TEST_CSS_OVERRIDE = `
|
||||
html {
|
||||
background-image: none;
|
||||
}
|
||||
`;
|
||||
|
||||
module.exports = async (page, scenario) => {
|
||||
// inject arbitrary css to override styles
|
||||
await page.addStyleTag({
|
||||
content: BACKSTOP_TEST_CSS_OVERRIDE
|
||||
});
|
||||
|
||||
console.log('BACKSTOP_TEST_CSS_OVERRIDE injected for: ' + scenario.label);
|
||||
};
|
@ -1,41 +0,0 @@
|
||||
module.exports = async (page, scenario) => {
|
||||
const hoverSelector = scenario.hoverSelectors || scenario.hoverSelector;
|
||||
const clickSelector = scenario.clickSelectors || scenario.clickSelector;
|
||||
const keyPressSelector = scenario.keyPressSelectors || scenario.keyPressSelector;
|
||||
const scrollToSelector = scenario.scrollToSelector;
|
||||
const postInteractionWait = scenario.postInteractionWait; // selector [str] | ms [int]
|
||||
|
||||
if (keyPressSelector) {
|
||||
for (const keyPressSelectorItem of [].concat(keyPressSelector)) {
|
||||
await page.waitForSelector(keyPressSelectorItem.selector);
|
||||
await page.type(keyPressSelectorItem.selector, keyPressSelectorItem.keyPress);
|
||||
}
|
||||
}
|
||||
|
||||
if (hoverSelector) {
|
||||
for (const hoverSelectorIndex of [].concat(hoverSelector)) {
|
||||
await page.waitForSelector(hoverSelectorIndex);
|
||||
await page.hover(hoverSelectorIndex);
|
||||
}
|
||||
}
|
||||
|
||||
if (clickSelector) {
|
||||
for (const clickSelectorIndex of [].concat(clickSelector)) {
|
||||
await page.waitForSelector(clickSelectorIndex);
|
||||
await page.click(clickSelectorIndex);
|
||||
}
|
||||
}
|
||||
|
||||
if (postInteractionWait) {
|
||||
await new Promise(resolve => {
|
||||
setTimeout(resolve, postInteractionWait);
|
||||
});
|
||||
}
|
||||
|
||||
if (scrollToSelector) {
|
||||
await page.waitForSelector(scrollToSelector);
|
||||
await page.evaluate(scrollToSelector => {
|
||||
document.querySelector(scrollToSelector).scrollIntoView();
|
||||
}, scrollToSelector);
|
||||
}
|
||||
};
|
@ -1,65 +0,0 @@
|
||||
/**
|
||||
* IGNORE CSP HEADERS
|
||||
* Listen to all requests. If a request matches scenario.url
|
||||
* then fetch the request again manually, strip out CSP headers
|
||||
* and respond to the original request without CSP headers.
|
||||
* Allows `ignoreHTTPSErrors: true` BUT... requires `debugWindow: true`
|
||||
*
|
||||
* see https://github.com/GoogleChrome/puppeteer/issues/1229#issuecomment-380133332
|
||||
* this is the workaround until Page.setBypassCSP lands... https://github.com/GoogleChrome/puppeteer/pull/2324
|
||||
*
|
||||
* @param {REQUEST} request
|
||||
* @return {VOID}
|
||||
*
|
||||
* Use this in an onBefore script E.G.
|
||||
```
|
||||
module.exports = async function(page, scenario) {
|
||||
require('./removeCSP')(page, scenario);
|
||||
}
|
||||
```
|
||||
*
|
||||
*/
|
||||
|
||||
const fetch = require('node-fetch');
|
||||
const https = require('https');
|
||||
const agent = new https.Agent({
|
||||
rejectUnauthorized: false
|
||||
});
|
||||
|
||||
module.exports = async function (page, scenario) {
|
||||
const intercept = async (request, targetUrl) => {
|
||||
const requestUrl = request.url();
|
||||
|
||||
// FIND TARGET URL REQUEST
|
||||
if (requestUrl === targetUrl) {
|
||||
const cookiesList = await page.cookies(requestUrl);
|
||||
const cookies = cookiesList.map(cookie => `${cookie.name}=${cookie.value}`).join('; ');
|
||||
const headers = Object.assign(request.headers(), { cookie: cookies });
|
||||
const options = {
|
||||
headers,
|
||||
body: request.postData(),
|
||||
method: request.method(),
|
||||
follow: 20,
|
||||
agent
|
||||
};
|
||||
|
||||
const result = await fetch(requestUrl, options);
|
||||
|
||||
const buffer = await result.buffer();
|
||||
const cleanedHeaders = result.headers._headers || {};
|
||||
cleanedHeaders['content-security-policy'] = '';
|
||||
await request.respond({
|
||||
body: buffer,
|
||||
headers: cleanedHeaders,
|
||||
status: result.status
|
||||
});
|
||||
} else {
|
||||
request.continue();
|
||||
}
|
||||
};
|
||||
|
||||
await page.setRequestInterception(true);
|
||||
page.on('request', req => {
|
||||
intercept(req, scenario.url);
|
||||
});
|
||||
};
|
@ -1,37 +0,0 @@
|
||||
/**
|
||||
* INTERCEPT IMAGES
|
||||
* Listen to all requests. If a request matches IMAGE_URL_RE
|
||||
* then stub the image with data from IMAGE_STUB_URL
|
||||
*
|
||||
* Use this in an onBefore script E.G.
|
||||
```
|
||||
module.exports = async function(page, scenario) {
|
||||
require('./interceptImages')(page, scenario);
|
||||
}
|
||||
```
|
||||
*
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const IMAGE_URL_RE = /\.gif|\.jpg|\.png/i;
|
||||
const IMAGE_STUB_URL = path.resolve(__dirname, '../imageStub.jpg');
|
||||
const IMAGE_DATA_BUFFER = fs.readFileSync(IMAGE_STUB_URL);
|
||||
const HEADERS_STUB = {};
|
||||
|
||||
module.exports = async function (page, scenario) {
|
||||
const intercept = async (request, targetUrl) => {
|
||||
if (IMAGE_URL_RE.test(request.url())) {
|
||||
await request.respond({
|
||||
body: IMAGE_DATA_BUFFER,
|
||||
headers: HEADERS_STUB,
|
||||
status: 200
|
||||
});
|
||||
} else {
|
||||
request.continue();
|
||||
}
|
||||
};
|
||||
await page.setRequestInterception(true);
|
||||
page.on('request', intercept);
|
||||
};
|
@ -1,33 +0,0 @@
|
||||
const fs = require('fs');
|
||||
|
||||
module.exports = async (page, scenario) => {
|
||||
let cookies = [];
|
||||
const cookiePath = scenario.cookiePath;
|
||||
|
||||
// READ COOKIES FROM FILE IF EXISTS
|
||||
if (fs.existsSync(cookiePath)) {
|
||||
cookies = JSON.parse(fs.readFileSync(cookiePath));
|
||||
}
|
||||
|
||||
// MUNGE COOKIE DOMAIN
|
||||
cookies = cookies.map(cookie => {
|
||||
if (cookie.domain.startsWith('http://') || cookie.domain.startsWith('https://')) {
|
||||
cookie.url = cookie.domain;
|
||||
} else {
|
||||
cookie.url = 'https://' + cookie.domain;
|
||||
}
|
||||
delete cookie.domain;
|
||||
return cookie;
|
||||
});
|
||||
|
||||
// SET COOKIES
|
||||
const setCookies = async () => {
|
||||
return Promise.all(
|
||||
cookies.map(async (cookie) => {
|
||||
await page.setCookie(cookie);
|
||||
})
|
||||
);
|
||||
};
|
||||
await setCookies();
|
||||
console.log('Cookie state restored with:', JSON.stringify(cookies, null, 2));
|
||||
};
|
@ -1,3 +0,0 @@
|
||||
module.exports = async (page, scenario, vp) => {
|
||||
await require('./loadCookies')(page, scenario);
|
||||
};
|
@ -1,6 +0,0 @@
|
||||
module.exports = async (page, scenario, vp) => {
|
||||
console.log('SCENARIO > ' + scenario.label);
|
||||
await require('./clickAndHoverHelper')(page, scenario);
|
||||
|
||||
// add more ready handlers here...
|
||||
};
|
@ -1,15 +0,0 @@
|
||||
const BACKSTOP_TEST_CSS_OVERRIDE = 'html {background-image: none;}';
|
||||
|
||||
module.exports = async (page, scenario) => {
|
||||
// inject arbitrary css to override styles
|
||||
await page.evaluate(`window._styleData = '${BACKSTOP_TEST_CSS_OVERRIDE}'`);
|
||||
await page.evaluate(() => {
|
||||
const style = document.createElement('style');
|
||||
style.type = 'text/css';
|
||||
const styleNode = document.createTextNode(window._styleData);
|
||||
style.appendChild(styleNode);
|
||||
document.head.appendChild(style);
|
||||
});
|
||||
|
||||
console.log('BACKSTOP_TEST_CSS_OVERRIDE injected for: ' + scenario.label);
|
||||
};
|
Loading…
Reference in New Issue
Block a user