const chalk = require("chalk");
const snakeCase = require("lodash/snakeCase");
const takeScreenshot = function(browser, counter, name) {
let prefix = String(counter).padStart(2, "0");
let filename = `screens/${prefix}_${snakeCase(name)}.png`;
browser.pause(2000);
browser.saveScreenshot(filename, () => {
console.log(chalk.green("â") + " Saved screenshot " + chalk.yellow(`'${filename}'`));
});
};
module.exports = {
"Take screenshots": (browser) => {
let i = 1;
let pageId = "";
browser.resizeWindow(1200, 1024);
browser.init();
browser.waitForElementVisible("body");
//----- Login page -----
pageId = "loginPage";
takeScreenshot(browser, i++, `${pageId}`);
browser.lskLogin();
//----- Invoice index page -----
pageId = "invoiceIndexPage";
takeScreenshot(browser, i++, `${pageId}`);
browser.lskClick(`#${pageId}MenuActivator`);
browser.lskClick(`#${pageId}AddInvoiceMenuItem`);
takeScreenshot(browser, i++, `${pageId}AddInvoiceDialog`);
browser.lskClick(`#${pageId}AddInvoiceDialogCancelButton`);
browser.lskClick(`#${pageId}Table tbody tr td:nth-child(9) .mdi-delete`);
takeScreenshot(browser, i++, `${pageId}DeleteInvoiceDialog`);
browser.lskClick(`#${pageId}DeleteInvoiceDialogCancelButton`);
browser.lskClick(`#${pageId}Table tbody tr td:nth-child(9) .mdi-monitor`);
//----- Invoice show page -----
pageId = "invoiceShowPage";
takeScreenshot(browser, i++, `${pageId}`);
browser.lskClick(`#${pageId}MenuActivator`);
browser.lskClick(`#${pageId}EditInvoiceMenuItem`);
takeScreenshot(browser, i++, `${pageId}EditInvoiceDialog`);
browser.lskClick(`#${pageId}EditInvoiceDialogCancelButton`);
browser.lskClick(`#${pageId}MenuActivator`);
browser.lskClick(`#${pageId}EditInvoiceCustomerMenuItem`);
takeScreenshot(browser, i++, `${pageId}EditInvoiceCustomerDialog`);
browser.lskClick(`#${pageId}EditInvoiceCustomerDialogCancelButton`);
browser.lskClick(`#${pageId}MenuActivator`);
browser.lskClick(`#${pageId}EditInvoiceBillerMenuItem`);
takeScreenshot(browser, i++, `${pageId}EditInvoiceBillerDialog`);
browser.lskClick(`#${pageId}EditInvoiceBillerDialogCancelButton`);
browser.lskClick(`#${pageId}InvoiceLineMenuActivator`);
browser.lskClick(`#${pageId}AddInvoiceLineMenuItem`);
takeScreenshot(browser, i++, `${pageId}AddInvoiceLineDialog`);
browser.lskClick(`#${pageId}AddInvoiceLineDialogCancelButton`);
browser.lskClick(`#${pageId}InvoiceLineTable tbody tr td:nth-child(7) .mdi-delete`);
takeScreenshot(browser, i++, `${pageId}DeleteInvoiceLineDialog`);
browser.lskClick(`#${pageId}DeleteInvoiceLineDialogCancelButton`);
browser.lskClick(`#${pageId}InvoiceLineTable tbody tr td:nth-child(7) .mdi-pencil`);
takeScreenshot(browser, i++, `${pageId}EditInvoiceLineDialog`);
browser.lskClick(`#${pageId}EditInvoiceLineDialogCancelButton`);
browser.lskClick(`#customerTab`);
//----- Customer index page -----
pageId = "customerIndexPage";
browser.lskClick(`#${pageId}Title`);
takeScreenshot(browser, i++, `${pageId}`);
browser.lskClick(`#${pageId}MenuActivator`);
browser.lskClick(`#${pageId}AddCustomerMenuItem`);
takeScreenshot(browser, i++, `${pageId}AddCustomerDialog`);
browser.lskClick(`#${pageId}AddCustomerDialogCancelButton`);
browser.lskClick(`#${pageId}Table tbody tr td:nth-child(5) .mdi-delete`);
takeScreenshot(browser, i++, `${pageId}DeleteCustomerDialog`);
browser.lskClick(`#${pageId}DeleteCustomerDialogCancelButton`);
browser.lskClick(`#${pageId}Table tbody tr td:nth-child(5) .mdi-monitor`);
//----- Customer show page -----
pageId = "customerShowPage";
takeScreenshot(browser, i++, `${pageId}`);
browser.lskClick(`#${pageId}MenuActivator`);
browser.lskClick(`#${pageId}EditCustomerMenuItem`);
takeScreenshot(browser, i++, `${pageId}EditCustomerDialog`);
browser.lskClick(`#${pageId}EditCustomerDialogCancelButton`);
browser.lskClick(`#billerTab`);
//----- Biller index page -----
pageId = "billerIndexPage";
browser.lskClick(`#${pageId}Title`);
takeScreenshot(browser, i++, `${pageId}`);
browser.lskClick(`#${pageId}MenuActivator`);
browser.lskClick(`#${pageId}AddBillerMenuItem`);
takeScreenshot(browser, i++, `${pageId}AddBillerDialog`);
browser.lskClick(`#${pageId}AddBillerDialogCancelButton`);
browser.lskClick(`#${pageId}Table tbody tr td:nth-child(7) .mdi-delete`);
takeScreenshot(browser, i++, `${pageId}DeleteBillerDialog`);
browser.lskClick(`#${pageId}DeleteBillerDialogCancelButton`);
browser.lskClick(`#${pageId}Table tbody tr td:nth-child(7) .mdi-monitor`);
//----- Biller show page -----
pageId = "billerShowPage";
takeScreenshot(browser, i++, `${pageId}`);
browser.lskClick(`#${pageId}MenuActivator`);
browser.lskClick(`#${pageId}EditBillerMenuItem`);
takeScreenshot(browser, i++, `${pageId}EditBillerDialog`);
browser.end();
},
};
import { Selector, t } from 'testcafe'
import { ROOT_PATH } from '../src/utils/config'
import { createUserRole } from '../testcafe/helpers/roles'
import fetchSandbox from '../testcafe/helpers/sandboxes'
fixture('Quality Assurance,').page(ROOT_PATH)
test('captures dâécran de toutes les pages du site', async () => {
await takeScreenshot('connexion')
await takeScreenshot('mot-de-passe-perdu')
await takeScreenshot('inscription')
await takeScreenshot('inscription/confirmation')
const { user } = await fetchSandbox(
'pro_03_offerers',
'get_existing_pro_validated_user_with_validated_offerer_validated_user_offerer'
)
await t.useRole(createUserRole(user))
await takeScreenshot('404')
await t
.navigateTo('/accueil')
.takeScreenshot(optionsOfScreenshot('accueil'))
.click(Selector('button').withText('Fred Leopold'))
.takeScreenshot(optionsOfScreenshot('menu'))
const token = Selector('label').withText('Contremarque')
await t
.navigateTo('/guichet')
.typeText(token, 'FAAKEE', { replace: true })
.takeScreenshot(optionsOfScreenshot('guichet-FAAKEE'))
await t
.navigateTo('/guichet')
.typeText(token, '100004', { replace: true })
.takeScreenshot(optionsOfScreenshot('guichet'))
await t
.navigateTo('/offres')
.click(Selector('input[type="checkbox"]'))
.click(Selector('.field-date-end .period-filter-input'))
.takeScreenshot(optionsOfScreenshot('offres'))
.typeText(Selector('label').withText('Nom de lâoffre ou ISBN'), 'search without result')
.click(Selector('button').withText('Lancer la recherche'))
.takeScreenshot(optionsOfScreenshot('offres-search-without-result'))
await t
.navigateTo('/offres')
.click(Selector('table a'))
.takeScreenshot(optionsOfScreenshot('offre-edition'))
.click(Selector('.of-placeholder'))
.click(Selector('.tna-toggle'))
.takeScreenshot(optionsOfScreenshot('thumbnail-upload-from-computer'))
.click(Selector('.thumbnail-dialog .bc-step:not(.active) a'))
.takeScreenshot(optionsOfScreenshot('thumbnail-upload-from-url'))
.typeText(
Selector('.thumbnail-dialog .tnf-form input[name="url"]'),
'https://pass.culture.fr/wp-content/uploads/2020/11/N_PASS_CULTURE_HD.png'
)
.click(Selector('.thumbnail-dialog .tnf-url-button'))
.takeScreenshot(optionsOfScreenshot('thumbnail-credit'))
.click(Selector('.thumbnail-dialog .tnd-actions .primary-button'))
.takeScreenshot(optionsOfScreenshot('thumbnail-image-editor'))
.click(Selector('.thumbnail-dialog .tnd-actions .primary-button'))
.takeScreenshot(optionsOfScreenshot('thumbnail-preview'))
.click(Selector('.thumbnail-dialog .tnd-actions .primary-button'))
.click(Selector('a').withText('Stock et prix'))
.takeScreenshot(optionsOfScreenshot('offre-stocks'))
await t
.navigateTo('/offres/creation')
.click(Selector('select').withText('Choisir un type'))
.click(Selector('select option').withText('Jeux - abonnements'))
.typeText(Selector('label').withText("Titre de l'offre"), 'Un titre dâoffre')
.click(Selector('select').withText('Sélectionnez une structure'))
.click(Selector('select option').withText('Club Dorothy'))
.click(Selector('select').withText('Sélectionnez un lieu'))
.click(Selector('select option').withText('Maison de la Brique'))
.typeText(Selector('label').withText('URL dâaccès à lâoffre'), 'https://example.com')
.click(Selector('input[name="noDisabilityCompliant"]'))
.takeScreenshot(optionsOfScreenshot('offre-creation'))
.click(Selector('button').withText('Enregistrer et passer aux stocks'))
.click(Selector('button').withText('Ajouter un stock'))
.takeScreenshot(optionsOfScreenshot('offre-stocks'))
.click(Selector('button').withText('Enregistrer'))
.takeScreenshot(optionsOfScreenshot('offre-confirmation'))
await t
.navigateTo('/reservations')
.click(Selector('img[alt="Filtrer par statut"]'))
.takeScreenshot(optionsOfScreenshot('reservations'))
.typeText(Selector(`input[placeholder="Rechercher par nom d'offre"]`), 'search without result')
.takeScreenshot(optionsOfScreenshot('reservations-search-without-result'))
await t
.navigateTo('/profil')
.takeScreenshot(optionsOfScreenshot('profil'))
.click(Selector('button').withText('Enregistrer'))
.takeScreenshot(optionsOfScreenshot('profil-success-banner'))
await t
.navigateTo('/structures')
.takeScreenshot(optionsOfScreenshot('structures'))
.click(Selector('a').withText('Club Dorothy'))
.takeScreenshot(optionsOfScreenshot('structure'))
.click(Selector('a').withText('+ Ajouter un lieu'))
.takeScreenshot(optionsOfScreenshot('lieu-creation'))
.click(Selector('button').withText('Annuler'))
.click(Selector('a').withText('Maison de la Brique'))
.takeScreenshot(optionsOfScreenshot('lieu'))
.click(Selector('a').withText('Modifier le lieu'))
.takeScreenshot(optionsOfScreenshot('lieu-edition'))
await takeScreenshot('structures?mots-cles=search-without-result')
await takeScreenshot('structures/creation')
await takeScreenshot('styleguide')
await takeScreenshot('remboursements')
// TODO: Pourquoi vois-je du JS ?
await takeScreenshot('remboursements/detail')
})
const takeScreenshot = async path => {
await t.navigateTo(`/${path}`).takeScreenshot(optionsOfScreenshot(path))
}
const optionsOfScreenshot = path => ({
path: `branch/${path.replace(/(\/|\?|=)/g, '-')}.png`,
fullPage: true,
})
const navigationPage = require("../page-objects/navigation-page");
const pagePageObject = require("../page-objects/page-page");
const faker = require("faker");
const config = require("../credentials");
const fs = require("fs");
describe("Create Page", () => {
const pathImages = "../Results/Puppeteer/v3.42.5/CreatePage";
beforeAll(async () => {
await fs.promises.rmdir(pathImages, { recursive: true });
await fs.promises.mkdir(pathImages, { recursive: true });
jest.setTimeout(50000);
await navigationPage.navigate(page);
await navigationPage.login(page, config.user, config.password);
await page.screenshot({
path: `${pathImages}/homepage.jpg`,
});
});
// beforeEach(async () => {
// jest.setTimeout(50000);
// await navigationPage.navigate(page);
// await navigationPage.login(page, config.user, config.password);
// });
// afterEach(async () => {
// await navigationPage.logout(page);
// });
it("Create Page and publish it successfully", async () => {
const pageTitle = faker.random.word();
const pageContent = faker.lorem.lines(1);
let counter = 0;
const slug = "PageCreated";
async function takeScreenshot(slug) {
await page.screenshot({
path: `${pathImages}/${slug}${counter++}.jpg`,
});
}
await pagePageObject.createPage(page, slug, takeScreenshot);
await pagePageObject.addContent(
page,
pageTitle,
pageContent,
slug,
takeScreenshot
);
await pagePageObject.publishPage(page, slug, takeScreenshot);
await expect(page).toMatch("Published");
await page.click('a[href="#/pages/"]');
await new Promise((r) => setTimeout(r, 1000));
await page.click(".gh-notification-close");
await expect(page).toMatch(pageTitle);
});
it("Create Page and schedule it successfully", async () => {
const pageTitle = faker.random.word();
const pageContent = faker.lorem.lines(1);
let counter = 0;
const slug = "PageScheduled";
async function takeScreenshot(slug) {
await page.screenshot({
path: `${pathImages}/${slug}${counter++}.jpg`,
});
}
await pagePageObject.createPage(page, slug, takeScreenshot);
await pagePageObject.addContent(
page,
pageTitle,
pageContent,
slug,
takeScreenshot
);
await pagePageObject.schedulePage(page, slug, takeScreenshot);
await expect(page).toMatch("Scheduled");
await page.click('a[href="#/pages/"]');
await new Promise((r) => setTimeout(r, 1000));
await page.click(".gh-notification-close");
await expect(page).toMatch(pageTitle);
});
it("Create draft Page", async () => {
const pageTitle = faker.random.word();
const pageContent = faker.lorem.lines(1);
let counter = 0;
const slug = "PageDraft";
async function takeScreenshot(slug) {
await page.screenshot({
path: `${pathImages}/${slug}${counter++}.jpg`,
});
}
await pagePageObject.createPage(page, slug, takeScreenshot);
await pagePageObject.addContent(
page,
pageTitle,
pageContent,
slug,
takeScreenshot
);
await page.click('a[href="#/pages/"]');
await new Promise((r) => setTimeout(r, 1000));
await expect(page).toMatch(pageTitle);
});
it("Create Page, try to edit the first page but discard changes", async () => {
const pageTitle = faker.random.word();
const pageContent = faker.lorem.lines(1);
const pageTitleEdit = faker.random.word();
let counter = 0;
const slug = "PageDiscardChanges";
async function takeScreenshot(slug) {
await page.screenshot({
path: `${pathImages}/${slug}${counter++}.jpg`,
});
}
await pagePageObject.createPage(page, slug, takeScreenshot);
await pagePageObject.addContent(
page,
pageTitle,
pageContent,
slug,
takeScreenshot
);
await pagePageObject.publishPage(page, slug, takeScreenshot);
await expect(page).toMatch("Published");
await page.click('a[href="#/pages/"]');
await new Promise((r) => setTimeout(r, 1000));
await page.click(".gh-notification-close");
await expect(page).toMatch(pageTitle);
await pagePageObject.selectFirstPageFromList(page, slug, takeScreenshot);
await pagePageObject.addContent(
page,
pageTitleEdit,
null,
slug,
takeScreenshot
);
await pagePageObject.discardChanges(page, slug, takeScreenshot);
});
});
Accelerate Your Automation Test Cycles With LambdaTest
Leverage LambdaTest’s cloud-based platform to execute your automation tests in parallel and trim down your test execution time significantly. Your first 100 automation testing minutes are on us.