qe-fe-automation
Version:
FE test automation framework using cypress
110 lines (101 loc) • 4.39 kB
text/typescript
import { Timeouts, utilitySelector } from '@utility-lib/index';
import { HttpStatusCodes } from 'cypress/support/base';
export const rentalCarSearchResultSelector = {
carCard: '[class^="ta-car-card__main"]',
agencyLogo: '[data-testid = "carLogo"]',
agencyFilter: '[qaid="agencyFilter"] [data-testid="activeFilter"]',
agencyCheckbox: '[class^="filter-boolean__wrapper"]',
selectCar: '[qaid="selectCarButton"]',
mapPoint: '[class^="cars-map__pin-container"]',
filterLocation: '[class^="marker-body__car-types"] .ta-button__content',
filteredLocation: '[class^="marker-body__filter"]',
carLogo: '[class^="marker-body__single-car-logo"][alt="National"]',
filterLocationButton: '[class^="marker-body__button"]',
searchCarFromSearchResults: '[class="cars-header"] [type="submit"]',
dAndCLocationButton: '[class="ta-car-features__item"] button',
locationDetail: '[class="car-location-popup__title"]',
hotelLocationsPopup: '[class="car-location-popup__details"]',
carOptionsFilter: '[qaid="carOptionsFilter"]',
directBillTags: '[class^="ta-car-tags__container"]',
searchLoader: '[class="ta-search__track"]',
policyBanner: '[class="out-of-policy-banner__max-price"]',
policyPopUp: '[class="out-of-policy-banner__policy-link"] a',
policyText: '[class="basic-row"] [class="basic-row__text"]',
closePolicyPopUp:
'[class^="ta-modal-header ta-modal-header--no-bottom-padding"] button',
policyIcon: '[class="ta-car-card__price-info"] [icon="policy-slash"]',
popOverText: '[class^="popover-content--text"]'
};
export class RentalCarSearchResults {
static selectCar() {
cy.allure().logStep(`Select car from the search result`);
cy.get(rentalCarSearchResultSelector.selectCar).eq(0).click();
cy.wait('@waitForSelectCar').then((Interception) => {
if (Interception.response?.statusCode !== HttpStatusCodes.Ok) {
cy.log(`Retrying to find the new car.`);
cy.get(rentalCarSearchResultSelector.selectCar).eq(1).click();
}
});
}
static chooseCarFromMap() {
cy.allure().logStep('find and select car from map');
cy.wait('@waitForMapLoad');
cy.get(rentalCarSearchResultSelector.mapPoint).eq(0).click();
cy.get(utilitySelector.bodySelector).then((filterAgencies) => {
if (
filterAgencies.find(rentalCarSearchResultSelector.filterLocationButton).length > 0
) {
cy.contains('Filter to this location').click({ force: true });
} else {
cy.get(rentalCarSearchResultSelector.filterLocation).eq(0).click();
}
});
}
static expectFilteredLocationShowedInList() {
cy.allure().logStep('expect filtered location showed in list');
cy.get(rentalCarSearchResultSelector.filteredLocation).eq(0).should('be.exist');
}
static searchCarFromSearchResults() {
cy.get(rentalCarSearchResultSelector.searchCarFromSearchResults).click();
cy.wait('@waitForCarSearchResults');
}
static getCarLocation() {
cy.get('[data-testid="locationSearchField"] input')
.invoke('val')
.then((hotelLocation) => {
const hotelLocationString = JSON.stringify(hotelLocation);
cy.log(hotelLocationString);
cy.task('putDataInCache', {
key: 'hotelLocation',
data: hotelLocationString
});
});
}
static expectPolicyMaximumPriceIs() {
cy.get(rentalCarSearchResultSelector.policyBanner).should(
'contain',
`$5 and up is out of policy.`
);
this.expectPolicyTypeIsPresent('Maximum price for this search is $5');
}
static expectPolicyTypeIsPresent(policyDetails: string) {
cy.get(rentalCarSearchResultSelector.policyPopUp).click({ force: true });
cy.wait('@waitForPolicyFile');
cy.get(rentalCarSearchResultSelector.policyText).contains(`${policyDetails}`);
cy.get(rentalCarSearchResultSelector.closePolicyPopUp).click({
timeout: 10000,
force: true
});
cy.wait(Timeouts.SHORT_TIMEOUT_2_SEC.timeout);
}
static expectCarTypeIsPresent() {
this.expectPolicyTypeIsPresent(
'Allowed car types: Electric, Standard, Economy and Compact'
);
}
static expectOutOfPolicyIconAndReasonIsPresent(reason: string) {
cy.wait(Timeouts.SHORT_TIMEOUT_2_SEC.timeout);
cy.get(rentalCarSearchResultSelector.policyIcon).eq(0).click();
cy.get(rentalCarSearchResultSelector.popOverText).should('contain', `${reason}`);
}
}