Thực tập tốt nghiệp báo cáo thực tập tốt nghiệp tiến hành kiểm thử hệ thống shopbase

51 10 0
Thực tập tốt nghiệp báo cáo thực tập tốt nghiệp tiến hành kiểm thử hệ thống shopbase

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Thực tập tốt nghiệp báo cáo thực tập tốt nghiệp tiến hành kiểm thử hệ thống shopbaseThực tập tốt nghiệp báo cáo thực tập tốt nghiệp tiến hành kiểm thử hệ thống shopbaseThực tập tốt nghiệp báo cáo thực tập tốt nghiệp tiến hành kiểm thử hệ thống shopbaseThực tập tốt nghiệp báo cáo thực tập tốt nghiệp tiến hành kiểm thử hệ thống shopbaseThực tập tốt nghiệp báo cáo thực tập tốt nghiệp tiến hành kiểm thử hệ thống shopbasevThực tập tốt nghiệp báo cáo thực tập tốt nghiệp tiến hành kiểm thử hệ thống shopbaseThực tập tốt nghiệp báo cáo thực tập tốt nghiệp tiến hành kiểm thử hệ thống shopbasevvv

BAN CƠ YẾU CHÍNH PHỦ  HỌC VIỆN KỸ THUẬT MẬT Mà ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯        THỰC TẬP TỐT NGHIỆP  BÁO CÁO THỰC TẬP TỐT NGHIỆP  TIẾN HÀNH KIỂM THỬ HỆ THỐNG SHOPBASE                    Ngành: An tồn thơng tin  Mã số: 7.48.02.02  Sinh viên thực hiện:  Hoàng Thị Thúy Lớp: AT15C Đơn vị thực tập:   Công ty TNHH OpenCommerce Tech Người quản lý thực tập:  ThS Hoàng Thu Phương Khoa ATTT – Học viện KTMM  Hà Nội - 2023  BAN CƠ YẾU CHÍNH PHỦ  HỌC VIỆN KỸ THUẬT MẬT Mà ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯        THỰC TẬP TỐT NGHIỆP  BÁO CÁO THỰC TẬP TỐT NGHIỆP  TIẾN HÀNH KIỂM THỬ HỆ THỐNG SHOPBASE                    Ngành: An tồn thơng tin  Mã số: 7.48.02.02  Sinh viên thực hiện:  Hồng Thị Thúy Lớp: AT15C Đơn vị thực tập:   Cơng ty TNHH OpenCommerce Tech Người quản lý thực tập:  ThS Hoàng Thu Phương Khoa ATTT – Học viện KTMM  Hà Nội - 2023  MỤC LỤC DANH MỤC HÌNH ẢNH Hình Logo cơng ty Hình ShopBase Hình PrintBase 10 Hình PlusBase .12 Hình ShopBase Creator 13 Hình Quy trình kiểm thử phần mềm 15 Hình Mục tiêu kiểm thử phần mềm .16 Hình Vòng đời phát triển phần mềm .17 Hình Test design 19 Hình 10 Checklist .21 Hình 11 Testcase 22 Hình 12 Log bug 23 LỜI CẢM ƠN Trong suốt trình học tập khoa Công nghệ thông tin trường Học viện Kỹ thuật mật mã Em xin chân thành cảm ơn quý Thầy/ Cô thời gian qua hết lòng truyền đạt kiến thức, kinh nghiệm quý báu cho em Em xin chân thành cảm ơn Anh/Chị Công ty TNHH OpenCommerce Tech truyền đạt kinh nghiệm tất nhiệt tình, lịng hăng say tận tụy Để từ giúp em có nhìn khách quan cơng việc Em xin chân thành cảm ơn Ban Tổng Giám Đốc Công ty TNHH OpenCommerce Tech tạo điều kiện cho em học hỏi nhiều kiến thức sâu rộng mà em chưa biết CHƯƠNG GIỚI THIỆU CHUNG 1.1 Giới thiệu cơng ty Hình Logo cơng ty 1.1.1 Giới thiệu chung Website: https://www.opencommercegroup.com/ Địa chỉ: 130, Trung Phụng, Đống Đa, Hà Nội Tên công ty: Công ty TNHH OpenCommerce Tech (hiện tại) Các mốc thay đổi brand name: Beeketing: - Thành lập năm 2014 - Hướng tới mục tiêu vào thị trường quốc tế tập trung vào cộng đồng - Beeketing phát triển từ 2014 tảng app marketing automations hỗ trợ doanh nghiệp vừa nhỏ thị trường global - Một tảng ứng dụng tự động hóa tiếp thị để chuyển đổi nhiều khách truy cập thành doanh thu cho trang web thương mại điện tử OpenCommerce Group (OCG): - Đã thay đổi vào tháng năm 2019 - Tạo hệ sinh thái sản phẩm Thương mại điện tử để thúc đẩy nâng cao chất lượng hoạt động Thương mại điện tử nói chung thương mại xuyên biên giới nói riêng Công ty TNHH OpenCommerce Tech - Từ tháng 02/2022, OpenCommerce Group thức đổi tên thành Cơng ty TNHH OpenCommerce Tech Sứ mệnh & Giá trị cốt lõi Sứ mệnh Mục tiêu OCG, tạo hệ sinh thái sản phẩm hỗ trợ eCommerce nhằm thúc đẩy, nâng cao chất lượng thương mại điện tử nói chung thương mại xuyên biên giới nói riêng Sau 10 năm hoạt động lĩnh vực thương mại điện tử, OCG may mắn xây dựng đội ngũ nhiệt huyết, máu lửa, đủ khả năng, thừa kinh nghiệm thấu hiểu vấn đề doanh nghiệp trực tuyến trước toán kinh doanh hiệu Từng phục vụ hàng trăm ngàn doanh nghiệp toàn cầu, đội ngũ OCG đáp ứng địi hỏi từ thị trường lớn sôi động giới Mỹ hay Trung Quốc Các giải pháp OCG giúp khách hàng khâu, từ xây dựng website cửa hàng, tối ưu tỷ lệ chuyển đổi, đến kiểm soát hàng hóa, kho bãi, quy trình giao nhận, vận chuyển Với sứ mệnh thúc đẩy nâng tầm trải nghiệm thương mại xuyên biên giới, trở thành bệ phóng cho doanh nhân, doanh nghiệp kinh doanh trực tuyến phát triển thành cơng, OCG hướng tới lộ trình sau: - Xây dựng platform giúp người bán ngành Dropshipping Print On Demand (POD) tạo websites bán hàng dễ dàng, tích hợp đầy đủ tính bổ trợ theo tiêu chí Tiện lợi - Convert tốt - Tạo lợi nhuận cao Song song với đó, giải vướng mắc mà người bán gặp phải vận hành cửa hàng - Nâng tầm trải nghiệm mua bán ngành Dropshipping POD Chuẩn hóa quy trình tìm kiếm nguồn hàng (Sourcing), nâng cao chất lượng sản phẩm quy trình chăm sóc khách hàng cho người bán, cung cấp dịch vụ giao hàng nhanh chóng Cốt để đảm bảo người bán cung cấp sản phẩm dịch vụ thật tốt, người mua chăm sóc tận tâm, có thiện cảm trở thành khách hàng thường xuyên doanh nghiệp Dropshipping POD - Xây dựng cộng đồng vững mạnh đối tác, người cung cấp dịch vụ, người bán, trở thành hệ sinh thái hỗ trợ để tạo việc làm, thu nhập, góp phần thúc đẩy sống tốt đẹp cho doanh nhân doanh nghiệp - Giúp người bán có kiến thức kinh nghiệm để tự xây dựng thương hiệu mình, hướng tới mục tiêu phát triển doanh nghiệp bền vững Những giá trị cốt lõi - Làm việc với đam mê - Khách hàng số - Tạo tác động tích cực tự hào cơng việc chúng tơi - Chăm sóc người dân - Hãy minh bạch - Xây dựng đội tích cực tinh thần gia đình - Tạo động lực cho đổi - Phấn đấu cho xuất sắc - Khiêm tốn 1.1.2 Sản phẩm cơng ty ShopBase Link sản phẩm: https://www.shopbase.com Hình ShopBase ShopBase sản phẩm flexible ShopBase Platform, cung cấp cho nhiều tập khách hàng khác nhau, giống mơ hình Shopify ShopBase gồm module Storefront, Fulfillment Payments Merchant bắt đầu dùng Storefront để tạo website bán hàng, sau dùng thêm dịch vụ ShopBase Fulfillments (PrintHub & CrossPanda) ShopBase Payments PrintBase Link sản phẩm: https://www.printbase.com/ Hình PrintBase Các doanh nghiệp ngành Print-on-demand phải đối mặt với nhiều vấn đề trình kinh doanh việc phải tạo thiết kế đẹp mắt bắt kịp xu hướng, quảng cáo sản phẩm cách hiệu quả, tiếp nhận xử lý thủ cơng hàng nghìn đơn hàng Sau đó, họ cần giải số lượng lớn đánh giá từ phía khách hàng đối mặt với tranh chấp trình hỗ trợ khách hàng bị chậm trễ khách hàng khơng hài lịng với sản phẩm, dẫn tới việc kinh doanh trì trệ khơng hiệu PrintBase mong muốn giúp doanh nghiệp giảm bớt gánh nặng việc xử lý đơn hàng dành thời gian tập trung cho việc chạy quảng cáo, đưa ý tưởng sản phẩm trau dồi kinh nghiệm bán hàng PrintBase giải pháp thương mại điện tử tích hợp hàng đầu hỗ trợ bạn việc tạo sản phẩm với thiết kế đăng bán cửa hàng cách nhanh chóng hiệu Đặc biệt, cửa hàng PrintBase bạn có đơn hàng, chúng tơi kết hợp với đối tác sản xuất giúp bạn xử lý đơn hàng bao 10 { "category": "All Over Print", "base_product": "Sleeveless Dress", "base_product_id": 10 } ], "layer_info": { "base_product_not_sync": [ { "base_product": "AOP Beach Shorts", "layers": [ { "layer_type": "Image", "layer_value": "Test value", "image_name": "Stitch Camo 3D leggings.jpg", "location_layer_x": "0", "location_layer_y": "0", "layer_size_h": "8047", "layer_size_w": "12851" }, { "layer_type": "Text", "layer_value": "Layer text 1", "location_layer_x": "0", "location_layer_y": "0", "layer_size_h": "2452", "layer_size_w": "12882" } ] }, { "base_product": "Sleeveless Dress", "layers": [ { "layer_type": "Image", "layer_value": "Test value", "image_name": "Stitch Camo 3D leggings.jpg", "location_layer_x": "0", "location_layer_y": "0", "layer_size_h": "10250", "layer_size_w": "12500" }, { "layer_type": "Text", "layer_value": "Layer text 1", "location_layer_x": "0", "location_layer_y": "0", "layer_size_h": "2378", "layer_size_w": "12510" } ] } ] } } }, { "enable": true, "case_id": "SB_PRB_LCP_7", "description": "Create thành công campaign thường base 3D mặt", 37 "campaign_info": { "pricing_info": { "title": "Campaign 3D side" }, "base_products": [ { "category": "All Over Print", "base_product": "AOP Hoodie", "base_product_id": 32 }, { "category": "All Over Print", "base_product": "AOP Zip Hoodie", "base_product_id": 36 } ], "layer_info": { "base_product_sync": { "base_products": ["AOP Hoodie", "AOP Zip Hoodie"], "layers": [ { "layer_type": "Image", "layer_value": "Test value", "image_name": "Stitch Camo 3D leggings.jpg", "location_layer_x": "0", "location_layer_y": "0", "layer_size_h": "7000", "layer_size_w": "6991", "front_or_back": "Front", "layer_name": "Stitch Camo 3D leggings", "is_sync": true }, { "layer_type": "Text", "layer_value": "Layer text 1", "location_layer_x": "133", "location_layer_y": "2237", "layer_size_h": "1918", "layer_size_w": "6734", "layer_name": "Text layer 1", "front_or_back": "Back", "is_sync": true } ] } } } }, { "enable": true, "case_id": "SB_PRB_LCP_8", "description": "Create thành cơng campaign thường có base 2D 3D", "campaign_info": { "pricing_info": { "title": "Campaign 3D mix base" }, "base_products": [ { "category": "Apparel", "base_product": "Classic Unisex T-shirt", 38 "base_product_id": 10824 }, { "category": "All Over Print", "base_product": "AOP Hoodie", "base_product_id": 32 }, { "category": "Drinkware", "base_product": "Beverage Mug", "base_product_id": 37 } ], "layer_info": { "base_product_not_sync": [ { "base_product": "AOP Hoodie", "layers": [ { "layer_type": "Text", "layer_value": "Layer text 1", "location_layer_x": "1393", "location_layer_y": "3500", "layer_size_h": "4381", "layer_size_w": "1100", "front_or_back": "Front" }, { "layer_type": "Text", "layer_value": "Layer text 1", "location_layer_x": "1677", "location_layer_y": "3500", "layer_size_h": "697", "layer_size_w": "3647", "front_or_back": "Back" } ] }, { "base_product": "Classic Unisex T-shirt", "layers": [ { "layer_type": "Text", "layer_value": "Layer text 1", "location_layer_x": "174", "location_layer_y": "0", "layer_size_h": "425", "layer_size_w": "1707", "front_or_back": "Front" }, { "layer_type": "Text", "layer_value": "Layer text back", "location_layer_x": "174", "location_layer_y": "0", "layer_size_h": "425", "layer_size_w": "1707", "front_or_back": "Back" } ] 39 } ] }, { "base_product": "Beverage Mug", "layers": [ { "layer_type": "Text", "layer_value": "Layer text 1", "location_layer_x": "24", "location_layer_y": "380", "layer_size_h": "207", "layer_size_w": "1101" } ] } } }, { "enable": true, "case_id": "SB_PRB_LCP_9", "description": "Create thành công campaign personalize", "campaign_info": { "pricing_info": { "title": "Campaign personalize" }, "base_products": [ { "category": "Accessories", "base_product": "Baseball Cap", "base_product_id": 10520 }, { "category": "Apparel", "base_product": "Classic Unisex T-shirt", "base_product_id": 10824 }, { "category": "Drinkware", "base_product": "Beverage Mug", "base_product_id": 37 } ], "layer_info": { "base_product_sync": { "base_products": ["Baseball Cap", "Classic Unisex T-shirt", "Beverage Mug"], "layers": [ { "layer_type": "Image", "layer_value": "Test value", "image_name": "hobbs_shaw_3.png", "location_layer_x": "161", "location_layer_y": "0", "layer_size_h": "3026", "layer_size_w": "3413", "layer_name": "hobbs_shaw_3", "is_sync": true }, { "layer_type": "Text", 40 ] } "layer_value": "Layer text 1", "location_layer_x": "813", "location_layer_y": "1574", "layer_size_h": "384", "layer_size_w": "1981", "layer_name": "Text layer 1", "is_sync": true } }, "custom_options": [ { "type": "Text field", "target_layer": "Text layer 1", "label": "Option 1", "max_length": "20", "allow_character": "Characters,Numbers" } ] } }, { "enable": true, "case_id": "SB_PRB_LCP_10", "description": "Create thành công campaign setup mockup cho base", "campaign_info": { "pricing_info": { "title": "Campaign setup" }, "base_products": [ { "category": "All Over Print", "base_product": "AOP Beach Shorts", "base_product_id": }, { "category": "All Over Print", "base_product": "Sleeveless Dress", "base_product_id": 10 } ], "layer_info": { "base_product_sync": { "base_products": ["AOP Beach Shorts", "Sleeveless Dress"], "layers": [ { "layer_type": "Image", "layer_value": "Test value", "image_name": "Stitch Camo 3D leggings.jpg", "location_layer_x": "0", "location_layer_y": "0", "layer_size_h": "10250", "layer_size_w": "12500", "layer_name": "Stitch Camo 3D leggings", "is_sync": true } ] } }, 41 } } } ] } } "select_mockups": [ { "base_product": "AOP Beach Shorts", "drag": { "index_from": "3", "index_to": "4" }, "message": "Update mockups successfully" }, { "base_product": "Sleeveless Dress", "drag": { "index_from": "2", "index_to": "3" }, "message": "Update mockups successfully" } ] Hình 1: Automation Testing Các hàm POM để viết case Tạo campaign automation test Hàm “Add base product” /** * Add base product from catalog * @param baseProductInfor include category and base product name */ async addBaseProduct(baseProductInfor: BaseProductInfor) { await this.page.click(`//div[@class='product-catagory']//p[text()='${baseProductInfor.category}']// ancestor::li`); const baseProducts = baseProductInfor.base_product.split(","); for (let i = 0; i < baseProducts.length; i++) { await this.page.click( `//span[@data-label='${baseProducts[i]}']//` + `ancestor::div[@class='prod-wrap']//button[contains(.,'Add product')]`, ); } } Hàm “Add layer cho base product” /** * Determine layer of front side or back side * Add info for multi layer 42 * @deprecated use function addNewLayers * @param layer */ async addNewLayer(layer: Layer): Promise { const xpathSide = `//span[contains(.,'${layer.front_or_back}')]` + `/ancestor::div[contains(@class,'s-collapse-item artwork')]`; const xpathAddLayer = `//button[child::span[normalize-space()="Add $ {layer.layer_type.toLowerCase()}"]]`; const xpathSideLayer = `${xpathSide}${xpathAddLayer}`; if (layer.front_or_back === "Front" || layer.front_or_back === "Back") { await this.page.click(xpathSideLayer); } else { await this.page.click(xpathAddLayer); } if (layer.layer_type === "Text") { await this.page.waitForTimeout(3000); if (layer.layer_value) { await this.page.fill(`//input[@placeholder='Add your text']`, layer.layer_value); } if (layer.font_size) { await this.page.fill(`//div[@class='text-form-data-custom']//div[@class='row']//input`, layer.font_size); } } else { await this.searchArtworkWithKeyword(layer.image_name); const xpathArtwork = this.genLoc( `(//div[@class='title' and child::span[@data-label="${layer.image_name}"]]//preceding-sibling::div)[1]`, ); await xpathArtwork.click(); await this.page.waitForTimeout(3000); await this.page.waitForSelector("//div[@id='editor']"); } if (layer.layer_name_new) { await this.page.dblclick(`//h3[normalize-space()='${layer.layer_name}']`); await this.page.waitForTimeout(1000); await this.page.fill(`//h3[normalize-space()='${layer.layer_name}']//parent::div//input`, layer.layer_name_new); } // Config for layer if (layer.font_size) { await this.page.fill(`//div[@class='text-form-data-custom']//div[@class='row']//input`, layer.font_size); } if (layer.rotate_layer) { await this.page.fill("//input[@placeholder='Rotation']", layer.rotate_layer); } if (layer.location_layer_x) { await this.page.fill( "//span[contains(text(),'X')]//parent::div[@class='s-input s-input prefix']//input", layer.location_layer_x, ); } if (layer.location_layer_y) { await this.page.fill( "//span[contains(text(),'Y')]//parent::div[@class='s-input s-input prefix']//input", layer.location_layer_y, 43 } ); if (layer.layer_size_h) { await this.page.fill( "//span[contains(text(),'H')]//parent::div[@class='s-input s-input prefix']//input", layer.layer_size_h, ); } if (layer.layer_size_w) { await this.page.fill( "//span[contains(text(),'W')]//parent::div[@class='s-input s-input prefix']//input", layer.layer_size_w, ); } if (layer.opacity_layer) { await this.page.fill( `//div[@class='s-form-item custom-s-form is-success is-required' and child::div[contains(.,'Opacity')]]//input`, layer.opacity_layer, ); } if (layer.stroke) { await this.page.click( "//div[contains(@class,'wrap-label effect')]//span[normalize-space()='Stroke']//parent::div// div[@class='icon effect']", ); await this.page.waitForTimeout(2000); await this.page.fill("//div[contains(@class,'input-stroke-width')]//input", layer.stroke_pt); await this.page.fill("//div[contains(@class,'input-stroke-opacity')]//input", layer.stroke_opacity); } if (layer.curve) { await this.page.click( "//div[contains(@class,'wrap-label effect')]//span[normalize-space()='Curve']//parent::div// div[@class='icon effect']", ); await this.page.waitForTimeout(2000); await this.page.fill("//div[contains(@class,'input curve')]//input", layer.curve_input); } } await this.page.waitForTimeout(2000); //click back to layer list const xpathIconBack = "//div[contains(@class,'editor')]//i[@class='mdi mdi-chevron-left mdi-36px']"; await this.page.waitForSelector(xpathIconBack); await this.page.click(xpathIconBack); await this.page.waitForSelector(xpathAddLayer); Hàm “Add custom option cho campaign” /** * * @param customOption 44 * @deprecated use function addCustomOptions */ async addCustomOption(customOption: CustomOptionProductInfo): Promise { //select type of custom option if (customOption.type) { await this.page.waitForSelector(".custom-option-detail container h3"); await this.page.selectOption(".custom-option-detail container custom-option-content s-select select", { label: customOption.type, }); } //select target layer for custom option if (customOption.target_layer) { const value = customOption.target_layer.split(">").map(item => item.trim()); for (let i = 0; i < value.length; i++) { if (i === 0) { await this.page.click("//span[normalize-space()='Please select layer']"); } else { await this.page.click("//div[contains(@class,'multiple-layer-selector container')]"); } await this.page.waitForSelector("//div[@class = 's-dropdown-content']"); await this.page.click(`//p[normalize-space() = '${value[i]}']`); } } //select target layer theo base product if (customOption.target_layer_base_product) { await this.page.uncheck("//span[contains(text(),'Select a shared layer in all products')]"); await this.page.waitForSelector("//span[normalize-space()='Target layer for every product']"); for (let i = 0; i < customOption.target_layer_base_product.length; i++) { await this.page.click("//span[contains(text(),'Please select layer')]"); await this.page.waitForSelector("//div[@class = 's-dropdown-content']"); await this.page.click(`//p[normalize-space() = '${customOption.target_layer_base_product[i]}']`); } } //fill text to label of custom option if (customOption.label) { await this.page.fill( `//div[child::label[contains(text(),'Label')]]//following-sibling::div//input`, customOption.label, ); } // input data for custom option Text field and Text area if (customOption.type === "Text field" || customOption.type === "Text area") { if (customOption.font) { await this.page.click("//input[@id='font-list-undefined' or contains(@id,'font-list-text-co')]"); const xpathFontValue = `//span[contains(@class,'s-dropdown-item')]//span[contains(.,'$ {customOption.font}')]`; await this.page.click(xpathFontValue); } if (customOption.placeholder) { await this.page.fill( `//div[child::label[contains(text(),'Placeholder')]]//following-sibling::div//input`, customOption.placeholder, ); } if (customOption.max_length) { 45 await this.page.fill( `//div[child::label[contains(text(),'Max length')]]//following-sibling::div//input`, customOption.max_length, ); } if (customOption.allow_character) { const listCharacter = await this.page locator("//div[child::label[normalize-space()='Allow the following characters']]//span[@class='scheck']") count(); for (let i = 1; i < listCharacter; i++) { const xpath = `(//div[child::label[normalize-space()='Allow the following characters']]//span[@class='scheck'])[${i}]`; await this.page.uncheck(xpath); } const character = customOption.allow_character.split(",").map(item => item.trim()); for (let i = 0; i < character.length; i++) { await this.page.check(`//span[normalize-space(text())='${character[i]}']//preceding-sibling::span`); } } } if (customOption.default_value) { await this.page.fill( `//div[child::label[contains(text(),'Default value')]]//following-sibling::div//input`, customOption.default_value, ); } // input data for custom option Picture choice if (customOption.type === "Picture choice") { const xpathSelectClipart = `(//span[normalize-space()='${customOption.value_clipart}'])[1]`; const xpathSelectType = `//span[contains(text(),'${customOption.type_clipart}')]`; const xpathDisplay = `//span[contains(text(),'${customOption.type_display_clipart}')]`; switch (customOption.type_clipart) { case "Group": await this.page.click(`//span[contains(text(),'${customOption.type_clipart}')]`); await this.page.click(xpathSelectType); await this.page.click("#pc-clipart-group-input"); await this.page.fill("#pc-clipart-group-input", customOption.value_clipart); await this.page.waitForSelector(`//span[normalize-space()='${customOption.value_clipart}']`); await this.page.click(xpathSelectClipart); if (customOption.type_display_clipart) { await this.page.click(xpathDisplay); } break; default: await this.page.click(`(//span[contains(text(),'${customOption.type_clipart}')])`); await this.page.click("#pc-clipart-folder-input"); await this.page.waitForSelector("//div[@class='s-dropdown-menu has-header']"); await this.page.locator("//input[@id='pc-clipart-folder-input']").fill(customOption.value_clipart); await this.page.waitForTimeout(2000); if (await this.page.locator(`(//span[contains(text(),'${customOption.value_clipart}')])[1]`).isVisible()) { await this.page.click(xpathSelectClipart); } else { await this.page.click(this.getXpathWithLabel("Add a clipart folder", 1)); await this.addNewClipartFolder(customOption.clipart_info); await this.clickOnBtnWithLabel("Save changes", 2); } if (customOption.type_display_clipart) { 46 } } await this.page.click(xpathDisplay); } break; if (customOption.type === "Checkbox") { if (customOption.value === "checked") { await this.verifyCheckedThenClick( "//p[contains(text(),'is checked')]//following-sibling::label//span[@class='s-check']", true, ); } else { await this.verifyCheckedThenClick( "//p[contains(text(),'is unchecked')]//following-sibling::label//span[@class='s-check']", true, ); } } // input data for custom option Radio and Droplist if (customOption.type === "Radio" || customOption.type === "Droplist") { if (customOption.font) { await this.page.click("//input[@id='font-list-undefined' or contains(@id,'font-list-text-co')]"); const xpathFontValue = `//span[contains(@class,'s-dropdown-item')]//span[contains(.,'$ {customOption.font}')]`; await this.page.click(xpathFontValue); } if (customOption.value) { const value = customOption.value.split(">").map(item => item.trim()); const xpathCount = `//div[child::div[normalize-space()='Value']]//following-sibling::div`; await this.page.waitForSelector(xpathCount, { timeout: 5000 }); const countValue = await this.page.locator(xpathCount).count(); for (let j = 0; j < value.length - countValue; j++) { await this.clickOnBtnWithLabel("Add more value"); } for (let i = 0; i < value.length; i++) { await this.page.fill(`(//div[contains(@class,'is-required')]//input)[${i + 1}]`, value[i]); } } } const xpathSaveBtn = "//span[normalize-space()='Save']"; await this.page.click(xpathSaveBtn); await this.page.isDisabled(xpathSaveBtn); //click back to CO list await this.page.click("//div[contains(@class,'custom-option')]//i[@class='mdi mdi-chevron-left mdi36px']"); //add option above or add option below if (customOption.position) { const xpathCO = `//div[contains(@class,'custom-option item') and child::div[contains(., '${customOption.label}')]]`; const xpathPosition = `${xpathCO}//div[contains(text(), 'Add option ${customOption.position}')]`; await this.page.hover(xpathCO); await this.page.isVisible(xpathPosition); await this.page.click(xpathPosition); } if (!customOption.add_fail) { await this.waitForToastMessageHide("Create custom option successfully"); } } 47 Định nghĩa object Object “BaseProductInfor” export type BaseProductInfor = { category: string; base_product: string; base_product_id: number; }; Object “Layer” export type Layer = { layer_type: string; layer_value: string; font_size: string; location_layer_x: string; location_layer_y: string; layer_size_h: string; layer_size_w: string; rotate_layer: string; opacity_layer: string; front_or_back: string; image_name: string; layer_name: string; curve?: boolean; stroke?: boolean; stroke_opacity?: string; stroke_pt?: string; curve_input?: string; font: string; is_sync: boolean; layer_name_new: string; not_back_layer_list?: boolean; not_layer_list?: boolean; no_check_button?: boolean; }; Object “CustomOptionProductInfo” export type CustomOptionProductInfo = { type: string; default_name: string; custom_name: string; label: string; allow_following: string; values: string; add_another_option: string; hide_option: string; clipart_name: string; default_value: string; placeholder?: string; 48 index: number; max_length: string; allowed_characters: string[]; help_text: string; p_o_d_data: string; name: string; target_layer?: string; target_layer_base_product?: string; font: string; allow_character?: string; image?: string; type_clipart?: string; type_display_clipart?: string; value_clipart?: string; value?: string; position?: number; default_check?: string; not_other_option?: boolean; not_edit_type?: boolean; clipart_info?: ClipartFolder; add_fail?: boolean; }; 49 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 3.1 Kết luận 3.1.1 Những điều thu hoạch từ tìm hiểu thực tế sở thực tập  Được làm việc môi trường động, thân thiện  Được công ty tạo điều kiện tốt suốt trình thực tập  Được người cơng ty hướng dẫn tận tình  Được nâng cao kỹ làm việc độc lập làm việc nhóm  Được học tập nhiều kiến thức 3.1.2 Những kiến thức kỹ vận dụng để hoàn thành nhiệm vụ  Kỹ năng:  Kỹ làm việc nhóm  Kỹ làm việc độc lập  Kỹ thuyết trình giao tiếp tốt  Kiến thức:  Cách viết test design  Cách viết Test checklist  Cách viết Test case  Cách Log bug Trello  Kiến thức lập trình Java  Kiến thức SQL  Kiến thức API 3.2 Những kiến thức kỹ cần bổ sung, cần học hỏi thêm để đáp ứng nhu cầu thực tế Kỹ viết Test Design: Việc thiết kế Test design cụ thể đầy đủ trước bắt đầu viết test checklist hay test case giúp liệt kê đầy đủ quan điểm test cho hệ thống khơng bị sót trường hợp test 50 Vì vậy, trước bắt đầu viết test checklist hay test case cần phải viết test design cụ thể Kiến thức SQL Việc sử dụng câu lệnh sql kiểm thử phần mềm cần thiết Vậy nên cần phải bổ sung kiến thức sql để đảm bảo việc thực kiểm thử nhanh chóng 3.3 Ba học có ý nghĩa đợt thực tế thực tập  Ln hồn thành cơng việc giao thời hạn  Tích cực học hỏi nâng cao kiến thức kỹ thân  Dám nhìn nhận sai thân sửa đổi người góp ý 51 ... ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯        THỰC TẬP TỐT NGHIỆP  BÁO CÁO THỰC TẬP TỐT NGHIỆP  TIẾN HÀNH KIỂM THỬ HỆ THỐNG SHOPBASE? ?                   Ngành: An tồn thơng tin  Mã số: 7.48.02.02  Sinh viên thực hiện:  Hoàng... quy trình kiểm thử phần mềm gồm có bước  Lập kế hoạch  Kiểm thử giám sát kiểm soát  Phân tích kiểm thử 18  Thiết kế kiểm thử  Triển khai kiểm thử  Thực kiểm thử  Hoàn thành kiểm thử 2.1.5... đội kiểm thử viên bắt đầu thực công việc kiểm tra sản phẩm theo testcase thiết kế Thực báo bug viết báo cáo hoàn thành xong công việc kiểm thử 17 Bước 5: Triển khai (Deployment): Sau phần mềm kiểm

Ngày đăng: 28/02/2023, 00:10

Tài liệu cùng người dùng

Tài liệu liên quan