OBA Website automated using playwright
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

530 lines
17 KiB

const {test, expect} =require('@playwright/test')
import { LoginPage } from '../pages/LoginPage';
import { OrderPage } from '../pages/OrderPage';
import { AppConfig } from '../pages/AppConfig';
import { CouponPage } from '../pages/Couponpage';
import { UserPage } from '../pages/UserPage';
import { CatlogPage } from '../pages/CatlogPage';
import { ProductPage } from '../pages/ProductPage';
//dont put commented code in repo
//its better to give discription for the steps you are following in comments
//add the ids of manual testcases in test.describe also suggest if the testcase is from regression suit or not and add tags respectively
const baseURL="https://dev.orderbookings.com/api";
// Validate Orders by UserID(In regression suite)
test('TC_API_01: Validate Get Orders API by User ID)',async ({request,page})=>{
// Get Request and store response
const response = await request.get(baseURL+'/order/syncOrders?user_id=670766e4272db54e96e423e0&phone=919480111222&lastupdatetime=0&merchantCode=919480707707&role=ROLE_TYPE_MERCHANT');
const res = await response.json();
// Navigate to login page
const login = new LoginPage(page);
await login.gotoLoginPage();
await login.loginWithCrtPassword();
await page.waitForTimeout(5000);
// Navigate to order page and search
const order = new OrderPage(page);
await order.textBoxSearch('ORDER_STATUS_COMPLETE', 'Shubya');
//Assertions
expect.soft(order.orderName).toContain(res.data[0].ordered_by_name);
expect.soft(order.orderEmail).toContain(res.data[0].ordered_by_email);
expect.soft(order.orderPhone).toContain((res.data[0].ordered_by_address.phone).toString());
expect.soft(order.orderCost).toContain((res.data[0].order_cost).toString());
expect.soft(order.orderQty).toContain((res.data[0].ordered_items_qty[0]).toString());
})
//Validate App Config Page (In regression suite)
test('TC-API-11: complete AppConfig page to check API',async ({page,request})=>{
// Navigate to login page
const login = new LoginPage(page);
await login.gotoLoginPage();
await login.loginWithCrtPassword();
await page.waitForTimeout(5000);
// Navigate to App Config Page
const config = new AppConfig(page);
await config.functionalityAppConfig('UAE dirham (د.إ;)','7','5', '400', '35', '9565456737', 'City','Tamil Nadu');
//get request and response
const response = await request.get(baseURL+'/config/919480707707?merchantCode=919480707707');
const res = await response.json();
//Assertions
expect.soft(config.merchantCode).toContain(res.data.merchantCode);
const cancellationTillResponse = await page.locator(config.cancellationTillAPI).inputValue();
expect.soft(cancellationTillResponse).toContain((res.data.cancellation_till).toString());
const minimumCartPrizeResponse = await page.locator(config.minimumCartPrizeAPI).inputValue();
expect.soft( minimumCartPrizeResponse).toContain((res.data.minimum_cart_price).toString());
const deliveryChargeResponse = await page.locator(config.deliveryChargeAPI).inputValue();
expect.soft( deliveryChargeResponse).toContain((res.data.delivery_charge).toString());
})
//Validate API Testing to get coupon details as user(In Regression Suite)
test('TC_API_16: APITesting_Coupon Get Details as User',async ({request,page})=>{
//Get request and response
const response = await request.get(baseURL+'/available-coupon/670e14cf14f563f755f3e2a1/919480707707');
const res = await response.json();
//Navigate to Login Page
const login = new LoginPage(page);
await login.gotoLoginPage();
await login.loginWithCrtPassword();
await page.waitForTimeout(5000);
//Navigate to coupon page
const coupon = new CouponPage(page);
await coupon.viewCoupon();
//Assertions
expect.soft(coupon.shortDescription).toContain(res.data[1].name);
expect.soft(coupon.descriptionCheck).toContain(res.data[1].description);
expect.soft(coupon.internalCouponValue).toContain(res.data[1].code);
expect.soft(coupon.couponCode).toContain(res.data[1].campaign_code);
})
//Validate Coupon details as Guest(In Regression Suite)
test('TC_API_16: APITesting_Coupon Get Details as Guest',async ({request,page})=>{
//get request and response
const response = await request.get(baseURL+'/available-coupon-guest/919480707707');
const res = await response.json();
//Navigate to login Page
const login = new LoginPage(page);
await login.gotoLoginPage();
await login.loginWithCrtPassword();
await page.waitForTimeout(5000);
//Navigate to coupon page
const coupon = new CouponPage(page);
await coupon.viewCoupon();
//Assertions
expect.soft(coupon.shortDescriptionGuest).toContain(res.data[0].name);
expect.soft(coupon.descriptionCheckGuest).toContain(res.data[0].description);
expect.soft(coupon.internalCouponValueGuest).toContain(res.data[0].code);
expect.soft(coupon.couponCodeGuest).toContain(res.data[0].campaign_code);
})
//get order by order id and compare with web ui in the order list.(In Regression Suite)
test('TC_API_06: GET ORDER BY ORDER_ID',async ({request,page})=>{
//Get request and response
const response1 = await request.get(baseURL+'/order/getorder/670e249314f563f755f3e2a5');
const res = await response1.json();
//Navigate to Login Page
const login = new LoginPage(page);
await login.gotoLoginPage();
await login.loginWithCrtPassword();
await page.waitForTimeout(5000);
//Navigate to order page
const order = new OrderPage(page);
await order.textBoxSearch('ORDER_STATUS_PENDING', 'DAYA');
//Assertions
expect.soft(order.userid).toContain(res.data.id); //id
expect.soft(order.username).toContain(res.data.ordered_by_name); //name
expect.soft(order.useremail).toContain(res.data.ordered_by_email); //email
expect.soft(order.userphone).toContain(res.data.ordered_by_phone); //phone
const element = await page.locator(order.userorderitems);
const text = await element.textContent();
expect(text).toContain(res.data.ordered_items[0]); //order items
expect.soft(order.orderqty).toContain((res.data.ordered_items_qty[0]).toString()); // order qty
await page.close();
})
//get order by order id and compare with web ui in the order list.(In Regression Suite)
test('TC_API_10: GET USER Details',async ({request,page})=>{
//Get request and response
const response2 = await request.get(baseURL+'/user/userreg?phone=919480111111&merchantCode=919480707707');
const res = await response2.json();
//Navigate to login page
const login = new LoginPage(page);
await login.gotoLoginPage();
await login.loginWithCrtPassword();
await page.waitForTimeout(5000);
//Navigate to user page
const user = new UserPage(page);
await user.userAPI();
//Assertions
expect.soft(user.userNameAPI).toContain(res.data.name);
expect.soft(user.userPhoneAPI).toContain(res.data.phone);
expect.soft(user.userEmailAPI).toContain(res.data.email);
expect.soft(user.merchantCode).toContain(res.data.merchantCode);
expect.soft(user.addressAPI).toContain(res.data.area[0]);
expect.soft(user.addressAPI).toContain(res.data.area[1]);
expect.soft(user.addressAPI).toContain(res.data.area[2]);
await page.close();
})
//Validate Categories(In Regression Suite)
test('TC-API-12: Get Categories and products',async ({page,request})=>{
//Main Page Element locating
//Get request and response
const response = await request.get(baseURL+'/bud/919480707707');
const res = await response.json();
//Navigate to Login Page
const login = new LoginPage(page);
await login.gotoLoginPage();
await login.loginWithCrtPassword();
await page.waitForTimeout(5000);
//Navigate to categories Page
const catlog = new CatlogPage(page);
await catlog.clickCatalogButton();
//Assertions
const obaBudView = page.locator('//select[@id="oba_bud_view"]');
const obaProductView = page.locator('//select[@id="oba_product_view"]');
const budValue = await obaBudView.inputValue();
const productValue = await obaProductView.inputValue();
expect.soft(budValue).toContain(res.data.buds[0].childview);
expect.soft(productValue).toContain(res.data.buds[0].product_childview);
// Mens Page
//Navigate to Login Page
await login.gotoLoginPage();
await login.loginWithCrtPassword();
await page.waitForTimeout(5000);
//Navigate to Catlog Page
await catlog.clickCatalogButton();
let Category1 = await catlog.NavigateToMens();
//Initialize values
let Name1 = await Category1.catnames;
let catlogViewType1 = await Category1.selecteddcattype;
let Productviewtype1 = await Category1.selecctedprodtype;
let Catislive1 = await Category1.isActive;
let merchantid = await Category1.merchatcode;
let cat1 =res.data.buds[1].name;
let catlog1ViewType1 =res.data.buds[1].childview;
let cat1Productviewtype =res.data.buds[1].product_childview;
let cat1islive = res.data.buds[1].is_live;
let merchantcode =res.data.buds[1].merchantCode;
var cat2 = res.data.buds[2].name; //womens
var cat3 = res.data.buds[3].name; //kids
//Assertions
expect.soft(Name1).toEqual(cat1);
expect.soft(merchantid).toEqual(merchantcode)
expect.soft(catlogViewType1).toEqual(catlog1ViewType1);
expect.soft(Productviewtype1).toEqual(cat1Productviewtype);
expect.soft(Catislive1).toEqual(cat1islive);
// Womens Page
//Initialize values
let Category2 = await catlog.NavigateToWomens();
const Name2 = await Category2.catnames;
const catlogViewType2 = await Category2.selecteddcattype;
const Productviewtype2 = await Category2.selecctedprodtype;
const Catislive2 = Category2.isActive;
let cat2logViewType =res.data.buds[2].childview;
let cat2Productviewtype =res.data.buds[2].product_childview;
let cat2islive = res.data.buds[2].is_live;
let merchantcode2 =res.data.buds[2].merchantCode;
//Assertions
expect.soft(Name2).toEqual(cat2);
expect.soft(merchantid).toEqual(merchantcode2)
expect.soft(catlogViewType2).toEqual(cat2logViewType);
expect.soft(Productviewtype2).toEqual(cat2Productviewtype);
expect.soft(Catislive2).toEqual(cat2islive);
//this cat3 is kids
let Category3 = await catlog.NavigateToKids();
const Name3 = await Category3.catnames;
const catlogViewType3 = await Category3.selecteddcattype;
const Productviewtype3 = await Category3.selecctedprodtype;
const Catislive3 = Category3.isActive;
let cat3ogViewType =res.data.buds[3].childview;
let cat3Productviewtype =res.data.buds[3].product_childview;
let cat3islive = res.data.buds[3].is_live;
let merchantcode3 =res.data.buds[3].merchantCode;
//Assertions
expect.soft(Name3).toEqual(cat3);
expect.soft(merchantid).toEqual(merchantcode3);
expect.soft(catlogViewType3).toEqual(cat3ogViewType);
expect.soft(Productviewtype3).toEqual(cat3Productviewtype);
expect.soft(Catislive3).toEqual(cat3islive);
})
//Get products(In regression suite)
test('TC-API-12: Get Products',async ({request,page})=>{
//Get request and response
const response = await request.get(baseURL+'/bud/919480707707');
const res = await response.json();
//Navigate to Login Page
const login = new LoginPage(page);
await login.gotoLoginPage();
await login.loginWithCrtPassword();
await page.waitForTimeout(5000);
//Navigate to product page
const product = new ProductPage(page);
await product.clickProductlistButton();
//Assertions
const productName = await page.textContent("//td[normalize-space()='T-Shirt']");
expect.soft(productName.trim()).toContain(res.data.products[0].name.trim());
expect.soft(product.priceAPI).toContain((res.data.products[0].price).toString());
expect.soft(product.quantityAPI).toContain((res.data.products[0].quantity).toString());
const productBoolean =
{
availableAPI: await page.textContent("//td[normalize-space()='true']")
};
expect.soft(productBoolean.availableAPI.trim()).toBe(String(res.data.products[0].available));
expect.soft(product.orderlimitAPI).toContain((res.data.products[0].order_limit).toString());
})
//Complete address list process(In regression suite)
test('TC_API-02,03,01,17: Complete Address API',async({page,request})=>{
let resourceId;
// 1. Post Response
const postResponse = await request.post(baseURL+'/user/addnewaddress',{
data: {
"addressLine1": "35",
"addressLine2": "Mount Main Road ",
"city": "Chennai",
"stateOrProvince": "Tamil Nadu",
"postalCode": "123111",
"phone": "919480111111",
"deliveryInstructions": null,
"isDefault": true,
"user_id": "670e14cf14f563f755f3e2a1",
"title": "test address",
"area": "Chennai"
},
});
//Navigate to login
const login = new LoginPage(page);
await login.gotoLoginPage();
await login.loginWithCrtPassword();
await page.waitForTimeout(5000);
//Navigate to user
const user = new UserPage(page);
await user.addressListAPI();
expect(postResponse.status()).toBe(200);
const postResponseBody = await postResponse.json();
// Validate response body
expect(postResponseBody.data).toHaveProperty('id'); // Assuming the API returns an `id` for the new resource
resourceId = postResponseBody.data.id;
//Assertion for post
expect.soft(user.addressList).toContain(postResponseBody.data.addressLine1);
expect.soft(user.addressList).toContain(postResponseBody.data.addressLine2);
expect.soft(user.addressList).toContain(postResponseBody.data.stateOrProvince);
expect.soft(user.addressList).toContain((postResponseBody.data.postalCode).toString());
//2. Get address list
const getResponse = await request.get(baseURL+'/user/addresslist?user_id=670e14cf14f563f755f3e2a1');
const getResponseBody = await getResponse.json();
//Navigate to Login Page
await login.gotoLoginPage();
await login.loginWithCrtPassword();
await page.waitForTimeout(5000);
//Navigate to User Page
await user.addressListAPI();
//Assertions
expect.soft(user.addressList).toContain(getResponseBody.data[1].addressLine1);
expect.soft(user.addressList).toContain(getResponseBody.data[1].addressLine2);
expect.soft(user.addressList).toContain(getResponseBody.data[1].stateOrProvince);
expect.soft(user.addressList).toContain((getResponseBody.data[1].postalCode).toString());
//3.Patch Request
const patchResponse = await request.patch(baseURL+'/user/updateaddress',{
data: {
"addressLine1": "35",
"addressLine2": "Mount Kitchen Main Road",
"city": "",
"stateOrProvince": "Tamil Nadu",
"postalCode": "123111",
"phone": "91948011111",
"deliveryInstructions": null,
"isDefault": true,
"user_id": "670e14cf14f563f755f3e2a1",
"title": "test address",
"area": "Chennai",
"address_id": resourceId
},
});
const patchResponseBody = await patchResponse.json();
//Navigate to Login Page
await login.gotoLoginPage();
await login.loginWithCrtPassword();
//Navigate to user page
await user.addressListAPI();
//Assertions
expect.soft(user.addressPatch).toContain(patchResponseBody.data.addressLine1);
expect.soft(user.addressPatch).toContain(patchResponseBody.data.addressLine2);
expect.soft(user.addressPatch).toContain(patchResponseBody.data.stateOrProvince);
expect.soft(user.addressPatch).toContain((patchResponseBody.data.postalCode).toString());
// 4. Delete Request
const deleteResponse = await request.delete(baseURL+'/user/deleteaddress', {
data:{
"user_id": "670e14cf14f563f755f3e2a1",
"address_id": resourceId,
}
});
// Validate DELETE response
expect(deleteResponse.status()).toBe(200); // Typically, HTTP 200 or 204 is expected for successful deletions
const deleteResponseBody = await deleteResponse.text();
})
test('TC-API-03,17: Post and Delete Address API',async({request})=>{
// 1. Post Response
const postResponse = await request.post(baseURL+'/user/addnewaddress',{
data: {
"addressLine1": "52",
"addressLine2": "25",
"city": "",
"stateOrProvince": "",
"postalCode": "123123",
"phone": "919480111111",
"deliveryInstructions": null,
"isDefault": false,
"user_id": "670e14cf14f563f755f3e2a1",
"title": "test address",
"area": "Chennai"
},
});
expect(postResponse.status()).toBe(200);
const postResponseBody = await postResponse.json(); // Parse the response body
// Validate response body
expect(postResponseBody.data).toHaveProperty('id'); // Assuming the API returns an `id` for the new resource
const resourceId = postResponseBody.data.id;
// 2. Delete Request
const deleteResponse = await request.delete(baseURL+'/user/deleteaddress', {
data:{
"user_id": "670e14cf14f563f755f3e2a1",
"address_id": resourceId,
}
});
// Validate DELETE response
expect(deleteResponse.status()).toBe(200);
const deleteResponseBody = await deleteResponse.text();
})
/*--------------------------------------------------------------------------------------------------------------------*/
//Order Page cannot be automated, since the API datas are missing, as it is continued from place order, products are missing