Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LCP test code added #140

Closed
wants to merge 13 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 23 additions & 15 deletions protractor.saucelabs.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,27 @@
exports.config = {
specs: ['test/e2e/**/*.spec.js'],
// TODO: disable webvital tests for saucelab for now, since browsers in saucelab seems never return webvital metrics
exclude: ['test/e2e/12_webvitalsAsCustomEvent/*.spec.js'],
// exclude: ['test/e2e/12_webvitalsAsCustomEvent/*.spec.js'],
sauceUser: process.env.SAUCE_USERNAME,
sauceKey: process.env.SAUCE_ACCESS_KEY,
sauceBuild: process.env.GITHUB_RUN_NUMBER,
// See https://wiki.saucelabs.com/display/DOCS/Platform+Configurator#/
multiCapabilities: [
newSaucelabsCapability('internet explorer', '11.103', 'Windows 10'),
newSaucelabsCapability('MicrosoftEdge', '14.14393', 'Windows 10'),
newSaucelabsCapability('safari', '9.0', 'OS X 10.11'),
newSaucelabsCapability('safari', '10.1', 'macOS 10.12'),
newSaucelabsCapability('safari', '11.0', 'macOS 10.12'),
newSaucelabsCapability('safari', '11.1', 'macOS 10.13'),
newSaucelabsCapability('firefox', '78.0', 'Windows 7'),
newSaucelabsCapability('firefox', '58.0', 'Windows 11'),
newSaucelabsCapability('chrome', '67.0', 'Windows 10'),
newSaucelabsCapability('chrome', '54.0', 'OS X 10.11'),
newSaucelabsCapability('chrome', '65.0', 'OS X 10.11')
// Old browser+OS platforms for non-web-vitals tests
// newSaucelabsCapability('internet explorer', '11.103', 'Windows 10'),
// newSaucelabsCapability('MicrosoftEdge', '14.14393', 'Windows 10'),
// newSaucelabsCapability('safari', '9.0', 'OS X 10.11'),
// newSaucelabsCapability('safari', '10.1', 'macOS 10.12'),
// newSaucelabsCapability('safari', '11.0', 'macOS 10.12'),
// newSaucelabsCapability('safari', '11.1', 'macOS 10.13'),
// newSaucelabsCapability('firefox', '78.0', 'Windows 7'),
// newSaucelabsCapability('firefox', '58.0', 'Windows 11'),
// newSaucelabsCapability('chrome', '67.0', 'Windows 10'),
// newSaucelabsCapability('chrome', '54.0', 'OS X 10.11'),
// newSaucelabsCapability('chrome', '65.0', 'OS X 10.11'),

// Specific supported browser+OS for web-vitals tests
newSaucelabsCapability('chrome', '124.0', 'Windows 11', true)
],
// Do not allow parallel test execution. Makes the test execution a lot
// slower, but the setup simpler.
Expand All @@ -29,13 +33,17 @@ exports.config = {
}
};

function newSaucelabsCapability(browserName, version, platform) {
function newSaucelabsCapability(browserName, version, platform, isWebVitalsTest = false) {
return {
browserName,
version,
platform,
name: 'weasel e2e',
// shardTestFiles: true, // allows specs to be executed in parallel.
// maxInstances: 2, // total number of specs that can be run at once.
name: isWebVitalsTest ? 'weasel e2e - web vitals' : 'weasel e2e',
'tunnel-identifier': 'github-action-tunnel',
build: process.env.GITHUB_RUN_NUMBER
build: process.env.GITHUB_RUN_NUMBER,
specs: isWebVitalsTest ? ['test/e2e/12_webvitalsAsCustomEvent/*.spec.js'] : ['test/e2e/**/*.spec.js'],
exclude: isWebVitalsTest ? [] : ['test/e2e/12_webvitalsAsCustomEvent/*.spec.js']
};
}
115 changes: 67 additions & 48 deletions test/e2e/12_webvitalsAsCustomEvent/webvitalsAsCustomEvent.spec.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const {registerTestServerHooks, getE2ETestBaseUrl, getBeacons} = require('../../server/controls');
const {registerBaseHooks, restartBrowser} = require('../base');
const {registerBaseHooks, restartBrowser, getCapabilities} = require('../base');
const {retry, expectOneMatching} = require('../../util');

const cexpect = require('chai').expect;
Expand All @@ -9,35 +9,54 @@ describe('12_webvitalsAsCustomEvent', () => {
registerBaseHooks();

describe('webvitalsAsCustomEvent', () => {
beforeEach(() => {
beforeEach(async () => {
// webvital CLS does not work if following another test, so restart browser to cleanup all context
restartBrowser();
await restartBrowser();

browser.get(getE2ETestBaseUrl('12_webvitalsAsCustomEvent/webvitalsAsCustomEvent'));
await browser.get(getE2ETestBaseUrl('12_webvitalsAsCustomEvent/webvitalsAsCustomEvent'));
// wait for webvital metrics
browser.sleep(5000);
element(by.id('searchInput')).sendKeys('hello');
element(by.id('searchButton')).click();
browser.sleep(1000);
element(by.id('button3')).click();
browser.sleep(1000);
element(by.id('button2')).click();
browser.sleep(1000);
await browser.sleep(5000);
await performUserActions();

const currentHandle = browser.getWindowHandle();
element(by.id('open-blank-tab')).click();
browser.sleep(3000);
browser.switchTo().window(currentHandle);
browser.sleep(3000);
async function performUserActions() {
await element(by.id('searchInput')).sendKeys('hello');
await element(by.id('searchButton')).click();
await browser.sleep(1000);
await element(by.id('button3')).click();
await browser.sleep(1000);
await element(by.id('button2')).click();
await browser.sleep(1000);

const currentHandle = browser.getWindowHandle();
await element(by.id('open-blank-tab')).click();
await browser.sleep(3000);
await browser.switchTo().window(currentHandle);
await browser.sleep(3000);
}
});
// isLCPTestApplicable
function isLCPTestApplicable(capabilities) {
const version = Number(capabilities.version);
return (
(capabilities.browserName === 'chrome' && version > 77) ||
(capabilities.browserName === 'MicrosoftEdge' && version > 79) ||
(capabilities.browserName === 'Firefox' && version > 122)
);
}

it('must report web-vitals as custom events', () => {
return retry(() => {
return getBeacons().then(beacons => {
const pageLoadBeacon = expectOneMatching(beacons, beacon => {
cexpect(beacon.ty).to.equal('pl');
});
fit('must report web-vitals as custom events', async () => {
const capabilities = await getCapabilities();

if (!isLCPTestApplicable(capabilities)) {
return true;
}
await retry(async () => {
const beacons = await getBeacons();
const pageLoadBeacon = expectOneMatching(beacons, beacon => {
cexpect(beacon.ty).to.equal('pl');
});

if (isLCPTestApplicable(capabilities)) {
expectOneMatching(beacons, beacon => {
cexpect(beacon.ty).to.equal('cus');
cexpect(beacon.ts).to.be.a('string');
Expand All @@ -47,34 +66,34 @@ describe('12_webvitalsAsCustomEvent', () => {
cexpect(beacon.pl).to.equal(pageLoadBeacon.t);
cexpect(beacon.m_id).to.match(/^v\d+(-\d+)+$/);
});
}

expectOneMatching(beacons, beacon => {
cexpect(beacon.ty).to.equal('cus');
cexpect(beacon.ts).to.be.a('string');
cexpect(beacon.n).to.equal('instana-webvitals-FID');
cexpect(beacon.l).to.be.a('string');
cexpect(beacon.pl).to.equal(pageLoadBeacon.t);
cexpect(beacon.m_id).to.match(/^v\d+(-\d+)+$/);
});
// expectOneMatching(beacons, beacon => {
// cexpect(beacon.ty).to.equal('cus');
// cexpect(beacon.ts).to.be.a('string');
// cexpect(beacon.n).to.equal('instana-webvitals-FID');
// cexpect(beacon.l).to.be.a('string');
// cexpect(beacon.pl).to.equal(pageLoadBeacon.t);
// cexpect(beacon.m_id).to.match(/^v\d+(-\d+)+$/);
// });

expectOneMatching(beacons, beacon => {
cexpect(beacon.ty).to.equal('cus');
cexpect(beacon.ts).to.be.a('string');
cexpect(beacon.n).to.equal('instana-webvitals-CLS');
cexpect(beacon.l).to.be.a('string');
cexpect(beacon.pl).to.equal(pageLoadBeacon.t);
cexpect(beacon.m_id).to.match(/^v\d+(-\d+)+$/);
});
// expectOneMatching(beacons, beacon => {
// cexpect(beacon.ty).to.equal('cus');
// cexpect(beacon.ts).to.be.a('string');
// cexpect(beacon.n).to.equal('instana-webvitals-CLS');
// cexpect(beacon.l).to.be.a('string');
// cexpect(beacon.pl).to.equal(pageLoadBeacon.t);
// cexpect(beacon.m_id).to.match(/^v\d+(-\d+)+$/);
// });

expectOneMatching(beacons, beacon => {
cexpect(beacon.ty).to.equal('cus');
cexpect(beacon.ts).to.be.a('string');
cexpect(beacon.n).to.equal('instana-webvitals-INP');
cexpect(beacon.l).to.be.a('string');
cexpect(beacon.pl).to.equal(pageLoadBeacon.t);
cexpect(beacon.m_id).to.match(/^v\d+(-\d+)+$/);
});
});
// expectOneMatching(beacons, beacon => {
// cexpect(beacon.ty).to.equal('cus');
// cexpect(beacon.ts).to.be.a('string');
// cexpect(beacon.n).to.equal('instana-webvitals-INP');
// cexpect(beacon.l).to.be.a('string');
// cexpect(beacon.pl).to.equal(pageLoadBeacon.t);
// cexpect(beacon.m_id).to.match(/^v\d+(-\d+)+$/);
// });
});
});
});
Expand Down
Loading