Skip to content

Commit 9587808

Browse files
Merge pull request #39 from nesrineabdmouleh/AddMethods
Add methods in Cart and home page interface in FO
2 parents 23ffc1e + b260f7d commit 9587808

File tree

7 files changed

+138
-16
lines changed

7 files changed

+138
-16
lines changed

src/interfaces/FO/cart/index.ts

+31
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,39 @@
11
import {FOBasePagePageInterface} from '@interfaces/FO';
2+
import type {ProductAttribute} from '@data/types/product';
23
import type {Page} from '@playwright/test';
34

45
export interface FoCartPageInterface extends FOBasePagePageInterface {
6+
readonly alertChooseDeliveryAddressWarningText: string;
7+
readonly cartRuleAlertMessageText: string;
8+
readonly cartRuleAlreadyInYourCartErrorText: string;
9+
readonly cartRuleAlreadyUsedErrorText: string;
10+
readonly cartRuleLimitUsageErrorText: string;
11+
readonly cartRuleMustEnterVoucherErrorText: string;
12+
readonly cartRuleNotExistingErrorText: string;
13+
readonly noItemsInYourCartMessage: string;
514
readonly pageTitle: string;
615

16+
addPromoCode(page: Page, code: string, clickOnPromoCodeLink?: boolean): Promise<void>;
717
clickOnProceedToCheckout(page: Page): Promise<void>;
18+
clickOnPromoCode(page: Page): Promise<void>;
19+
deleteProduct(page: Page, productID: number): Promise<void>;
20+
editProductQuantity(page: Page, productID: number, quantity: number | string): Promise<void>;
21+
getATIPrice(page: Page): Promise<number>;
22+
getAlertWarning(page: Page): Promise<string>;
23+
getAlertWarningForPromoCode(page: Page): Promise<string>;
24+
getCartRuleErrorMessage(page: Page): Promise<string>;
25+
getCartRuleName(page: Page, line?: number): Promise<string>;
26+
getDiscountValue(page: Page, line?: number): Promise<number>;
27+
getHighlightPromoCode(page: Page): Promise<string>;
28+
getNoItemsInYourCartMessage(page: Page): Promise<string>;
29+
getNotificationMessage(page: Page): Promise<string>;
30+
getProductAttributes(page: Page, row: number): Promise<ProductAttribute[]>;
31+
getProductDetail(page: Page, row: number): Promise<object>;
32+
getProductsNumber(page: Page): Promise<number>;
33+
getSubtotalDiscountValue(page: Page): Promise<number>;
34+
isAlertWarningForMinimumPurchaseVisible(page: Page): Promise<boolean>;
35+
isCartRuleNameVisible(page: Page, line?: number): Promise<boolean>;
36+
isProceedToCheckoutButtonDisabled(page: Page): Promise<boolean>;
37+
removeVoucher(page: Page, line?: number): Promise<void>;
38+
setProductQuantity(page: Page, productRow?: number, quantity?: number): Promise<number>;
839
}

src/interfaces/FO/home/index.ts

+40
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,50 @@
11
import {FOBasePagePageInterface} from '@interfaces/FO';
2+
// Import data
3+
import type {CartProductDetails} from '@data/types/cart';
4+
import type {ProductAttribute} from '@data/types/product';
5+
26
import type {Page} from '@playwright/test';
37

48
export interface FoHomePageInterface extends FOBasePagePageInterface {
9+
readonly pageTitle: string;
10+
readonly successAddToCartMessage: string;
11+
512
addProductToCartByQuickView(page: Page, id: number, quantityWanted?: number): Promise<string>;
13+
addToCartByQuickView(page: Page): Promise<void>;
14+
changeAttributes(page: Page, attributes: ProductAttribute): Promise<void>;
15+
changeAttributesAndAddToCart(page: Page, attributes: ProductAttribute[], quantity: number): Promise<void>;
16+
changeQuantity(page: Page, quantity: number): Promise<void>;
17+
clickOnLeftOrRightArrow(page: Page, direction: string): Promise<void>;
18+
closeBlockCartModal(page: Page): Promise<boolean>;
19+
closeQuickViewModal(page: Page): Promise<boolean>;
20+
continueShopping(page: Page): Promise<boolean>;
21+
getBlockTitle(page: Page, blockID?: number): Promise<string>;
22+
getProductAttributesFromBlockCartModal(page: Page): Promise<ProductAttribute[]>;
23+
getProductAttributesFromQuickViewModal(page: Page): Promise<ProductAttribute[]>;
24+
getProductAvailabilityText(page: Page): Promise<string>;
25+
getProductDetailsFromBlockCartModal(page: Page): Promise<CartProductDetails>;
26+
getProductDetailsFromQuickViewModal(page: Page): Promise<object>;
27+
getProductWithDiscountDetailsFromQuickViewModal(page: Page): Promise<object>;
28+
getProductsBlockNumber(page: Page, blockID?: number): Promise<number>;
29+
getProductsNumber(page: Page): Promise<number>
30+
getSelectedAttributesFromQuickViewModal(page: Page, attribute: ProductAttribute): Promise<ProductAttribute[]>;
31+
getSliderURL(page: Page): Promise<string>;
32+
getSocialSharingLink(page: Page, socialSharing: string): Promise<string>;
33+
goToAllProductsBlockPage(page: Page, blockID?: number): Promise<void>;
634
goToAllProductsPage(page: Page): Promise<void>;
735
goToProductPage(page: Page, id: number): Promise<void>;
36+
isAddToCartButtonDisabled(page: Page): Promise<boolean>;
37+
isAddToCartButtonEnabled(page: Page): Promise<boolean>;
38+
isBannerVisible(page: Page): Promise<boolean>;
39+
isBlockCartModalVisible(page: Page): Promise<boolean>;
40+
isCustomTextBlockVisible(page: Page): Promise<boolean>;
841
isHomePage(page: Page): Promise<boolean>;
42+
isNewFlagVisible(page: Page, id?: number): Promise<boolean>;
43+
isPriceVisible(page: Page, id?: number): Promise<boolean>;
44+
isQuickViewProductModalVisible(page: Page): Promise<boolean>;
45+
isSliderVisible(page: Page, position: number): Promise<boolean>;
946
proceedToCheckout(page: Page): Promise<void>;
47+
quickViewProduct(page: Page, id: number): Promise<void>;
48+
selectProductColor(page: Page, id: number, color: string): Promise<void>;
49+
subscribeToNewsletter(page: Page, email: string): Promise<string>;
1050
}

src/interfaces/FO/product/index.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ export interface FoProductPageInterface extends FOBasePagePageInterface {
1717
addProductReview(page: Page, productReviewData: FakerProductReview): Promise<boolean>;
1818
addProductToTheCart(
1919
page: Page,
20-
quantity: number | string,
21-
combination: ProductAttribute[],
22-
proceedToCheckout: boolean | null,
23-
customizedText: string)
20+
quantity?: number | string,
21+
combination?: ProductAttribute[],
22+
proceedToCheckout?: boolean | null,
23+
customizedText?: string)
2424
: Promise<void>
2525
clickAddReviewButton(page: Page): Promise<void>;
2626
clickOnAddToCartButton(page: Page): Promise<void>;

src/interfaces/index.ts

+45-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,56 @@
1-
import type {PageWaitForSelectorOptionsState} from '@data/types/playwright';
2-
import type {BrowserContext, Frame, Page} from '@playwright/test';
1+
import type {PageWaitForSelectorOptionsState, WaitForNavigationWaitUntil} from '@data/types/playwright';
2+
import type {
3+
BrowserContext, ElementHandle, Frame, JSHandle, Locator, Page,
4+
} from '@playwright/test';
35

46
export interface CommonPageInterface {
57
changePage(browserContext: BrowserContext, tabId?: number): Promise<Page>;
8+
clearInput(page: Frame | Page, selector: string): Promise<void>;
9+
clickAndWaitForDownload(page: Page, selector: string, targetBlank?: boolean): Promise<string | null>;
10+
clickAndWaitForLoadState(page: Frame | Page, selector: string, state?: string, timeout?: number): Promise<void>;
11+
clickAndWaitForURL(page: Frame | Page, selector: string, waitUntil?: WaitForNavigationWaitUntil, timeout?: number)
12+
: Promise<void>
613
closePage(browserContext: BrowserContext, page: Page, tabId?: number): Promise<Page>;
14+
dialogListener(page: Page, accept?: boolean, text?: string): Promise<void>;
15+
dragAndDrop(page: Page, source: string, target: string): Promise<void>;
16+
elementNotVisible(page: Frame | Page, selector: string, timeout?: number): Promise<boolean>;
17+
elementVisible(page: Frame | Page, selector: string, timeout?: number): Promise<boolean>;
18+
getAttributeContent(page: Frame | Page, selector: string, attribute: string): Promise<string>;
19+
getClipboardText(page: Page): Promise<string>;
20+
getCurrentURL(page: Page): Promise<string>;
21+
getInputValue(page: Page, selector: string): Promise<string>;
22+
getNumberFromText(page: Page | Frame, selector: string, timeout?: number): Promise<number>;
723
getPageTitle(page: Page): Promise<string>;
24+
getParentElement(page: Frame | Page, selector: string)
25+
: Promise<ElementHandle<HTMLElement> | JSHandle<undefined> | JSHandle<null>>;
26+
getPriceFromText(page: Frame|Page, selector: string, timeout?: number, waitForSelector?: boolean): Promise<number>;
27+
getTextContent(page: Page | Frame, selector: string, waitForSelector?: boolean): Promise<string>;
828
goTo(page: Page, url: string): Promise<void>;
29+
goToBO(page: Page): Promise<void>;
930
goToFo(page: Page): Promise<void>;
31+
goToPreviousPage(page: Page, waitUntil?: WaitForNavigationWaitUntil): Promise<void>;
32+
isChecked(page: Frame | Page, selector: string): Promise<boolean>;
33+
isDisabled(page: Page, selector: string): Promise<boolean>;
34+
openLinkWithTargetBlank(page: Page, selector: string, newPageSelector?: string, state?:string): Promise<Page>;
35+
reloadPage(page: Page): Promise<void>;
1036
reloadPage(page: Page): Promise<void>;
1137
resize(page: Page, mobileSize: boolean): Promise<void>;
12-
waitForSelector(page: Page | Frame, selector: string, state: PageWaitForSelectorOptionsState, timeout?: number): Promise<void>
38+
scrollTo(page: Page, selector: string): Promise<void>;
39+
selectByValue(page: Frame | Page, selector: string, valueToSelect: number|string, force?: boolean): Promise<void>;
40+
selectByVisibleText(page: Frame | Page, selector: string, textValue: string | number, force?: boolean,): Promise<void>;
41+
setChecked(page: Frame | Page, checkboxSelector: string, valueWanted?: boolean, force?: boolean): Promise<void>;
42+
setCheckedWithIcon(page: Frame | Page, checkboxSelector: string, valueWanted?: boolean): Promise<void>;
43+
setHiddenCheckboxValue(page: Frame | Page, checkboxSelector: string, valueWanted?: boolean): Promise<void>;
44+
setInputValue(page: Page, selector: string, value: string): Promise<void>;
45+
setValue(page: Frame | Page, selector: string, value: string | number): Promise<void>;
46+
uploadFile(page: Page | Frame, selector: string, filePath: string): Promise<void>;
47+
uploadOnFileChooser(page: Page, selector: string, filePath: string[]): Promise<void>;
48+
waitForAttachedSelector(page: Page, selector: string, timeout?: number): Promise<void>;
49+
waitForHiddenSelector(page: Frame | Page, selector: string, timeout?: number): Promise<void>;
50+
waitForPageTitleToLoad(page: Page): Promise<void>;
51+
waitForSelector(page: Page | Frame, selector: string, state: PageWaitForSelectorOptionsState, timeout?: number)
52+
: Promise<void>;
1353
waitForSelectorAndClick(page: Frame | Page, selector: string, timeout?: number): Promise<void>
54+
waitForVisibleLocator(locator: Locator, timeout?: number): Promise<void>;
55+
waitForVisibleSelector(page: Page | Frame, selector: string, timeout?: number): Promise<void>;
1456
}
+9-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
import type {BOProductsPageInterface} from '@interfaces/BO/catalog/products';
2+
import semver from 'semver';
3+
import testContext from '@utils/test';
4+
5+
const psVersion = testContext.getPSVersion();
26

37
/* eslint-disable global-require */
48
function requirePage(): BOProductsPageInterface {
5-
return require('@versions/develop/pages/BO/catalog/products').productsPage;
9+
if (semver.gte(psVersion, '0.0.0')) {
10+
return require('@versions/develop/pages/BO/catalog/products');
11+
}
12+
return require('@versions/develop/pages/BO/catalog/products');
613
}
14+
715
/* eslint-enable global-require */
816

917
export default requirePage();

src/versions/develop/pages/FO/classic/cart/index.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ class CartPage extends FOBasePage implements FoCartPageInterface {
337337
* @param page {Page} Browser tab
338338
* @returns {boolean}
339339
*/
340-
isProceedToCheckoutButtonDisabled(page: Page): Promise<boolean> {
340+
async isProceedToCheckoutButtonDisabled(page: Page): Promise<boolean> {
341341
return this.elementVisible(page, this.disabledProceedToCheckoutButton, 1000);
342342
}
343343

@@ -346,7 +346,7 @@ class CartPage extends FOBasePage implements FoCartPageInterface {
346346
* @param page {Page} Browser tab
347347
* @returns {boolean}
348348
*/
349-
isAlertWarningForMinimumPurchaseVisible(page: Page): Promise<boolean> {
349+
async isAlertWarningForMinimumPurchaseVisible(page: Page): Promise<boolean> {
350350
return this.elementVisible(page, this.alertWarning, 1000);
351351
}
352352

@@ -355,7 +355,7 @@ class CartPage extends FOBasePage implements FoCartPageInterface {
355355
* @param page {Page} Browser tab
356356
* @returns {Promise<string>}
357357
*/
358-
getAlertWarning(page: Page): Promise<string> {
358+
async getAlertWarning(page: Page): Promise<string> {
359359
return this.getTextContent(page, this.alertWarning);
360360
}
361361

@@ -364,7 +364,7 @@ class CartPage extends FOBasePage implements FoCartPageInterface {
364364
* @param page {Page} Browser tab
365365
* @returns {Promise<string>}
366366
*/
367-
getAlertWarningForPromoCode(page: Page): Promise<string> {
367+
async getAlertWarningForPromoCode(page: Page): Promise<string> {
368368
return this.getTextContent(page, this.alertPromoCode);
369369
}
370370

@@ -374,7 +374,7 @@ class CartPage extends FOBasePage implements FoCartPageInterface {
374374
* @param line {number} Cart summary line
375375
* @returns {Promise<boolean>}
376376
*/
377-
isCartRuleNameVisible(page: Page, line: number = 1): Promise<boolean> {
377+
async isCartRuleNameVisible(page: Page, line: number = 1): Promise<boolean> {
378378
return this.elementVisible(page, this.cartRuleName(line), 1000);
379379
}
380380

@@ -419,7 +419,7 @@ class CartPage extends FOBasePage implements FoCartPageInterface {
419419
* @param line {number} Cart summary line
420420
* @returns {Promise<number>}
421421
*/
422-
getCartRuleName(page: Page, line: number = 1): Promise<string> {
422+
async getCartRuleName(page: Page, line: number = 1): Promise<string> {
423423
return this.getTextContent(page, this.cartRuleName(line));
424424
}
425425

@@ -438,7 +438,7 @@ class CartPage extends FOBasePage implements FoCartPageInterface {
438438
* @param line {number} Cart summary line
439439
* @returns {Promise<number>}
440440
*/
441-
getDiscountValue(page: Page, line: number = 1): Promise<number> {
441+
async getDiscountValue(page: Page, line: number = 1): Promise<number> {
442442
return this.getPriceFromText(page, this.discountValue(line), 2000);
443443
}
444444

src/versions/develop/pages/FO/classic/home/index.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -775,7 +775,7 @@ class HomePage extends FOBasePage implements FoHomePageInterface {
775775
* @param page {Page} Browser tab
776776
* @returns {Promise<boolean>}
777777
*/
778-
isBlockCartModalVisible(page: Page): Promise<boolean> {
778+
async isBlockCartModalVisible(page: Page): Promise<boolean> {
779779
return this.elementVisible(page, this.blockCartModalDiv, 2000);
780780
}
781781

@@ -831,6 +831,7 @@ class HomePage extends FOBasePage implements FoHomePageInterface {
831831
*/
832832
async continueShopping(page: Page): Promise<boolean> {
833833
await this.waitForSelectorAndClick(page, this.continueShoppingButton);
834+
834835
return this.elementNotVisible(page, this.blockCartModalDiv, 2000);
835836
}
836837

0 commit comments

Comments
 (0)