Extract pw common functions

This commit is contained in:
Alex P 2023-05-29 09:47:42 +03:00
parent 9b15b70e63
commit 87ac3f1650
No known key found for this signature in database
GPG key ID: 54487A734A204D71
6 changed files with 137 additions and 155 deletions

View file

@ -0,0 +1,38 @@
import {expect} from "@playwright/test";
const {
CUSTOMER_EMAIL,
CUSTOMER_FIRST_NAME,
CUSTOMER_LAST_NAME,
CUSTOMER_COUNTRY,
CUSTOMER_ADDRESS,
CUSTOMER_POSTCODE,
CUSTOMER_CITY,
CUSTOMER_PHONE,
} = process.env;
export const fillCheckoutForm = async (page) => {
await page.fill('#billing_first_name', CUSTOMER_FIRST_NAME);
await page.fill('#billing_last_name', CUSTOMER_LAST_NAME);
await page.selectOption('select#billing_country', CUSTOMER_COUNTRY);
await page.fill('#billing_address_1', CUSTOMER_ADDRESS);
await page.fill('#billing_postcode', CUSTOMER_POSTCODE);
await page.fill('#billing_city', CUSTOMER_CITY);
await page.fill('#billing_phone', CUSTOMER_PHONE);
await page.fill('#billing_email', CUSTOMER_EMAIL);
const differentShippingLocator = page.locator('[name="ship_to_different_address"]');
if (await differentShippingLocator.count() > 0) {
await differentShippingLocator.uncheck();
}
const termsLocator = page.locator('[name="terms"]');
if (await termsLocator.count() > 0) {
await termsLocator.check();
}
}
export const expectOrderReceivedPage = async (page) => {
const title = await page.locator('.entry-title');
await expect(title).toHaveText('Order received');
}

View file

@ -0,0 +1,59 @@
import {expect} from "@playwright/test";
const {
CUSTOMER_EMAIL,
CUSTOMER_PASSWORD,
} = process.env;
/**
* Opens the PayPal popup by pressing the button, and returns the popup object.
* @param page
* @param {boolean} retry Retries the button click if the popup did not appear after 5 sec.
*/
export const openPaypalPopup = async (page, retry = true) => {
try {
await page.locator('.component-frame').scrollIntoViewIfNeeded();
const [popup] = await Promise.all([
page.waitForEvent('popup', {timeout: 5000}),
page.frameLocator('.component-frame').locator('[data-funding-source="paypal"]').click(),
]);
await popup.waitForLoadState();
return popup;
} catch (err) {
if (retry) {
return openPaypalPopup(page, false);
}
throw err;
}
}
export const loginIntoPaypal = async (popup) => {
await Promise.any([
popup.locator('[name="login_email"]'),
popup.click("text=Log in"),
]);
await popup.fill('[name="login_email"]', CUSTOMER_EMAIL);
await popup.locator('#btnNext').click();
await popup.fill('[name="login_password"]', CUSTOMER_PASSWORD);
await popup.locator('#btnLogin').click();
}
/**
* Waits up to 15 sec for the shipping methods list to load.
* @param popup
* @returns {Promise<void>}
*/
export const waitForPaypalShippingList = async (popup) => {
await expect(popup.locator('#shippingMethodsDropdown')).toBeVisible({timeout: 15000});
}
export const completePaypalPayment = async (popup) => {
await Promise.all([
popup.waitForEvent('close', {timeout: 20000}),
popup.click('#payment-submit-btn'),
]);
}

View file

@ -0,0 +1,26 @@
const {
WP_MERCHANT_USER,
WP_MERCHANT_PASSWORD,
WP_CUSTOMER_USER,
WP_CUSTOMER_PASSWORD,
} = process.env;
export const loginAsAdmin = async (page) => {
await page.goto('/wp-admin');
await page.locator('input[name="log"]').fill(WP_MERCHANT_USER);
await page.locator('input[name="pwd"]').fill(WP_MERCHANT_PASSWORD);
await Promise.all([
page.waitForNavigation(),
page.locator('text=Log In').click()
]);
}
export const loginAsCustomer = async (page) => {
await page.goto('/wp-admin');
await page.locator('input[name="log"]').fill(WP_CUSTOMER_USER);
await page.locator('input[name="pwd"]').fill(WP_CUSTOMER_PASSWORD);
await Promise.all([
page.waitForNavigation(),
page.locator('text=Log In').click()
]);
}