ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC KINH TẾ KHOA THỐNG KÊ TIN HỌC BÁO CÁO THỰC TẬP NGHỀ NGHIỆP NGÀNH HỆ THỐNG THÔNG TIN QUẢN LÝ CHUYÊN NGÀNH QUẢN TRỊ HỆ THỐNG THÔNG TIN TÊN ĐỀ TÀI KIỂM THỬ TỰ ĐỘNG WEBSITE[.]
ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC KINH TẾ KHOA THỐNG KÊ - TIN HỌC BÁO CÁO THỰC TẬP NGHỀ NGHIỆP NGÀNH: HỆ THỐNG THÔNG TIN QUẢN LÝ CHUYÊN NGÀNH: QUẢN TRỊ HỆ THỐNG THÔNG TIN TÊN ĐỀ TÀI: KIỂM THỬ TỰ ĐỘNG WEBSITE ORANGEHRM BẰNG ROBOT FRAMEWORK Đơn vị thực tập : TMA Bình Định MỤC LỤC LỜI CẢM ƠN IV LỜI CAM ĐOAN V MỤC LỤC VI LỜI MỞ ĐẦU CHƯƠNG 1: TỔNG QUAN VỀ CÔNG TY VÀ VỊ TRÍ TESTER 1.1 Tổng quan cơng ty 1.1.1 Giới thiệu công ty 1.1.2 Tầm nhìn sứ mệnh 1.1.3 Giá trị cốt lõi 1.2 Tổng quan vị trí Tester 1.2.1 Mơ tả vị trí Tester 1.2.2 Các kỹ cần có Tester 1.2.3 Cơ hội nghề nghiệp 1.2.4 Mức lương ngành CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 Tổng quan kiểm thử phần mềm 2.1.1 Giới thiệu kiểm thử phần mềm 2.1.2 Các nguyên tắc kiểm thử phần mềm 2.1.3 QA & QC 2.1.4 Vòng đời phát triển phần mềm 2.1.5 Vòng đời kiểm thử phần mềm 2.2 Các loại kiểm thử phần mềm 2.2.1 Manual Testing 2.2.2 Automation Testing 2.3 Các phương pháp kiểm thử 2.3.1 Black Box Testing 2.3.2 White Box Testing 2.4 Cấp bậc kiểm thử 9 2.4.1 Unit Test 2.4.2 Integration Test 10 2.4.3 System Test 10 2.5 Các kỹ thuật Test Case 10 VI 2.5.1 Boundary Value Analysis (BVA) 10 2.5.2 Equivalence Class Partitioning 10 2.5.3 Decision Table Based Testing 11 2.5.4 State Transition 11 2.5.5 Error Guessing 11 2.6 Vòng đời Bug 11 2.7 Tổng quan ngôn ngữ python 12 12 2.7.1 Ngôn ngữ python 2.8 Tổng quan Robot Framework 12 2.8.1 Robot Framework 12 2.8.2 Ưu & nhược điểm Robot Framework 13 2.9 Kết chương 14 CHƯƠNG 3: SỬ DỤNG ROBOT FRAMEWORK KIỂM THỬ TỰ ĐỘNG WEBSITE ORANGEHRM 14 3.1 Tổng quan website OrangeHRM 14 3.1.1 Giới thiệu website OrangeHRM 14 3.1.2 Giao diện website OrangeHRM 14 3.1.2: Đặc tả số chức website OrangeHRM 15 3.1.2.1: Chức tìm kiếm Users 16 3.1.2.2: Chức Add Users 18 3.1.2.3: Chức Add Job Titles 20 3.1.2.4: Chức xoá tất Job Titles 22 3.1.2.5: Chức chỉnh sửa Job Titles 24 3.2 Thiết kế Test case 25 3.3 Viết Test case tự động ngôn ngữ python Robot Framework 30 3.4 Kết 45 3.5 Kết chương 48 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 48 TÀI LIỆU THAM KHẢO 49 CHECK LIST CỦA BÁO CÁO 50 PHỤ LỤC 51 VII DANH MỤC HÌNH ẢNH Hình 1: Vịng đời Bug 12 Hình 2: Màn hình đăng nhập website OrangeHRM 15 Hình 3: Màn hình trang chủ website OrangeHRM 15 Hình 4: Module Admin 16 Hình 5: Tìm kiếm Users 16 Hình 6: Add Users 18 Hình 7: Add Users 18 Hình 8: Add Job Titles 20 Hình 9: Add Job Titles 20 Hình 10: Xố tất Job Titles 22 Hình 11: Xố tất Job Titles 22 Hình 12: Chỉnh sửa Job Titles 24 Hình 13: Chỉnh sửa Job Titles 24 VIII LỜI MỞ ĐẦU • Lý chọn đề tài: Trong thời đại công nghệ số phát triển nhanh chóng ứng dụng web, việc đảm bảo chất lượng tính ổn định trang web vơ quan trọng Trong q trình phát triển phần mềm, kiểm thử đóng vai trị quan trọng việc phát lỗi đảm bảo ứng dụng hoạt động dự kiến Để tối ưu hóa q trình kiểm thử, tơi định chọn đề tài "Kiểm thử tự động website OrangeHRM Robot Framework." OrangeHRM hệ thống quản lý nguồn nhân lực phổ biến phức tạp, đó, sử dụng Robot Framework - công cụ kiểm thử tự động mã nguồn mở, giúp tối ưu hóa q trình kiểm thử, nâng cao hiệu tiết kiệm thời gian • Mục tiêu nghiên cứu: Xây dựng test case chi tiết đa dạng để kiểm thử chức nâng cao website OrangeHRM Áp dụng kỹ thuật kiểm thử tự động lập kịch bản, thao tác giao diện người dùng, xử lý liệu trình kiểm thử Đánh giá hiệu suất hiệu trình kiểm thử tự động so với kiểm thử thủ công truyền thống Đề xuất cải tiến tối ưu hóa cho q trình kiểm thử tự động tương lai • Phương pháp nghiên cứu: Trong q trình nghiên cứu, tiến hành thu thập thông tin chức yêu cầu website OrangeHRM, từ xây dựng test case thiết lập mơi trường kiểm thử tự động Robot Framework Tôi sử dụng kỹ thuật kiểm thử tự động để thực kiểm thử thu thập liệu để đánh giá hiệu suất trình kiểm thử Các kết thu thập phân tích giúp tơi đưa kết luận xác đáng tin cậy • Đối tượng phạm vi nghiên cứu: Đối tượng nghiên cứu website OrangeHRM, hệ thống quản lý nguồn nhân lực phổ biến sử dụng rộng rãi Phạm vi nghiên cứu tập trung vào việc xây dựng triển khai hệ thống kiểm thử tự động Robot Framework cho chức website OrangeHRM • Kết cấu đề tài Đề tài tổ chức gồm phần mở đầu, chương nội dung phần kết luận • Chương 1: Tổng quan công ty vị trí Tester • Chương 2: Cơ sở lý thuyết • Chương 3: Sử dụng Robot framework kiểm thử tự động website OrangeHRM • Kết luận hướng phát triển CHƯƠNG 1: TỔNG QUAN VỀ CƠNG TY VÀ VỊ TRÍ TESTER 1.1 Tổng quan công ty 1.1.1 Giới thiệu cơng ty Cơng ty TMA Bình Định cơng ty cơng nghệ hàng đầu Bình Định, Việt Nam Với 20 năm kinh nghiệm lĩnh vực phát triển phần mềm dịch vụ công nghệ, TMA Bình Định xây dựng danh tiếng vững trở thành đối tác đáng tin cậy cho khách hàng ngồi nước Với tầm nhìn cam kết mình, TMA Bình Định tạo dựng môi trường làm việc chuyên nghiệp sáng tạo, tập trung vào phát triển truyền cảm hứng cho đội ngũ nhân viên Công ty đặt giá trị người lên hàng đầu tạo điều kiện thuận lợi để nhân viên phát triển nghề nghiệp khám phá tiềm 1.1.2 Tầm nhìn sứ mệnh Tầm nhìn TMA Bình Định hướng đến việc trở thành công ty công nghệ hàng đầu, góp phần vào phát triển ngành cơng nghiệp công nghệ thông tin khu vực Tạo môi trường làm việc sáng tạo cung cấp giải pháp cơng nghệ đột phá, nhằm tối ưu hóa giá trị mang lại lợi ích bền vững cho khách hàng cộng đồng Sứ mệnh TMA Bình Định mang đến giải pháp công nghệ đáng tin cậy chất lượng cao cho khách hàng Xây dựng mối quan hệ đối tác lâu dài tạo giá trị bền vững cho khách hàng thông qua việc cung cấp dịch vụ sản phẩm công nghệ chất lượng cao, đáp ứng nhanh chóng linh hoạt yêu cầu họ 1.1.3 Giá trị cốt lõi Chất lượng: Cam kết mang đến chất lượng cao sản phẩm dịch vụ, không tập trung vào việc đáp ứng yêu cầu kỹ thuật, mà cịn ln tìm kiếm cách nâng cao chất lượng hiệu suất giải pháp công nghệ Sáng tạo: TMA Bình Định coi sáng tạo yếu tố quan trọng khía cạnh cơng việc Khuyến khích đổi mới, tư sáng tạo tạo giải pháp công nghệ đột phá để giúp khách hàng cộng đồng vượt qua thách thức tận dụng hội 1.2 Tổng quan vị trí Tester 1.2.1 Mô tả vị trí Tester Vị trí Tester vai trị quan trọng trình phát triển phần mềm Người làm Tester chịu trách nhiệm kiểm tra đảm bảo chất lượng sản phẩm phần mềm trước triển khai đưa thị trường Mô tả tổng quan vị trí tester: Kiểm tra xác nhận chức năng: Tester có nhiệm vụ kiểm tra xác minh tính phần mềm dựa yêu cầu tài liệu liên quan Bằng cách sử dụng kịch kiểm thử công cụ phù hợp, tester đảm bảo phần mềm hoạt động theo yêu cầu đáp ứng mục tiêu chức Vị trí tester u cầu kiến thức vững quy trình kiểm thử phần mềm, kỹ phân tích ghi nhận lỗi, tỉ mỉ khả làm việc theo nhóm Người làm tester cần có khả tư logic, kiên nhẫn khả tìm hiểu nhanh ứng dụng công nghệ 1.2.2 Các kỹ cần có Tester Kiến thức quy trình kiểm thử phần mềm: Tester cần hiểu áp dụng quy trình kiểm thử phần mềm, bao gồm lập kế hoạch, thiết kế kiểm thử, thực kiểm thử, phân tích kết báo cáo lỗi Sự hiểu biết phương pháp kiểm thử, loại kiểm thử kỹ thuật kiểm thử giúp tester thực công việc cách hiệu Kỹ phân tích ghi nhận lỗi: Tester cần có khả phân tích yêu cầu chức thiết kế để tìm trường hợp kiểm thử cần thiết Sự kiên nhẫn tỉ mỉ: Tester cần có kiên nhẫn việc thực kịch kiểm thử lặp lặp lại xử lý tình kiểm thử phức tạp Khả tư logic: Tester cần có khả tư logic để phân tích vấn đề, xác định nguyên nhân lỗi đưa giải pháp kiểm thử hiệu 1.2.3 Cơ hội nghề nghiệp Vị trí tester mở nhiều hội nghề nghiệp hấp dẫn lĩnh vực công nghệ thông tin Automation tester: Automation tester người sử dụng công cụ kỹ thuật tự động hóa để thực kịch kiểm thử Với gia tăng tự động hóa kiểm thử, hội trở thành automation tester mở rộng Automation tester làm việc cơng ty phát triển phần mềm, công ty công nghệ dự án phần mềm lớn Chuyên gia kiểm thử phần mềm: Tester có hội phát triển thành chuyên gia lĩnh vực kiểm thử phần mềm Với kinh nghiệm kiến thức sâu rộng, chuyên gia kiểm thử phần mềm đảm nhận vai trị lãnh đạo, tham gia vào việc thiết kế quy trình kiểm thử, đào tạo nhân viên tư vấn chiến lược kiểm thử 1.2.4 Mức lương ngành o Mức lương chuyên viên kiểm thử phần mềm Đối với người trường, lương dao động từ triệu đến triệu/tháng Kinh nghiệm từ – năm nhận lương Tester trung bình triệu đến 12 triệu/ tháng Kinh nghiệm từ đến 10 năm có hội nhận mức lương tốt hơn, trung bình 17 triệu/ tháng Đa số tester kinh nghiệm năm có đủ khả dẫn dắt đội nhóm, quản lý dự án tổ chức đánh giá, cải thiện quy trình test Vì mức thu nhập cao CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 Tổng quan kiểm thử phần mềm 2.1.1 Giới thiệu kiểm thử phần mềm Kiểm thử phần mềm quy trình quan trọng q trình phát triển phần mềm Nó nhằm đảm bảo sản phẩm phần mềm hoạt động mong đợi, đáp ứng yêu cầu người dùng đảm bảo chất lượng Quy trình kiểm thử phần mềm bao gồm việc xác định kịch kiểm thử, thực kịch phân tích kết kiểm thử Mục tiêu kiểm thử phần mềm tìm lỗi, cố không phù hợp phần mềm đảm bảo hoạt động cách đáng tin cậy xác 2.1.2 Các nguyên tắc kiểm thử phần mềm Kiểm thử chứng minh diện lỗi: Nguyên tắc cho kiểm thử phần mềm chứng minh khơng có lỗi phần mềm Kiểm thử tồn khơng thể: Ngun tắc cho khơng thể kiểm thử tồn khía cạnh trường hợp xảy phần mềm phức tạp Kiểm thử sớm tốt: Nguyên tắc nhấn mạnh việc bắt đầu kiểm thử sớm trình phát triển phần mềm Bằng cách kiểm thử từ giai đoạn sớm, lỗi phát khắc phục sớm, giúp giảm thiểu rủi ro chi phí liên quan đến việc khắc phục lỗi sau Lỗi thường phân bố tập trung: Nguyên tắc cho lỗi phần mềm thường tập trung số thành phần khu vực cụ thể Nghịch lý thuốc trừ sâu: Nghịch lý thể việc kiểm thử khơng thể đảm bảo khơng có lỗi phần mềm, mà giảm thiểu khả tồn chúng Kiểm thử phụ thuộc vào ngữ cảnh: Nguyên tắc nhấn mạnh trình kiểm thử phải xem xét dựa ngữ cảnh phần mềm Quan niệm sai lầm việc "hết lỗi": Ngun tắc nhấn mạnh khơng có khái niệm "hết lỗi" kiểm thử phần mềm Thậm chí sau tìm khắc phục số lỗi, tồn lỗi khác 2.1.3 QA & QC • QA [Arguments] ${INPUT_USERROLE} ${INPUT_EMPLOYEENAME} ${INPUT_STATUS} UT_USERNAME} ${INPUT_PASSWORD} ${INPUT_CONFIRMPASSWORD} Click Element ${XPATH_USERROLE} Click Element //div[@role='listbox']//*[contains(text(),'${INPUT_USERROLE}')] Click Element ${XPATH_STATUS} Click Element //div[@role='listbox']//*[contains(text(),'${INPUT_STATUS}')] Input Text ${XPATH_EMPLOYEE} ${INPUT_EMPLOYEENAME} Sleep 3s Click Element //div[@role='listbox'] Sleep 3s Input Text ${XPATH_USERNAME} ${INPUT_USERNAME} Input Text ${XPATH_PASSWORD} ${INPUT_PASSWORD} Input Text ${XPATH_CONFIRMPASSWORD} ${INPUT_CONFIRMPASSWORD} Click Button //button[text()=" Save "] Load_message Sleep seconds Message Element Should Be Visible //h6[text()="Add User"] Clear_Text [Arguments] ${selector} click element ${selector} press keys ${selector} CTRL+a+BACKSPACE sleep 0.3 Clear_Text_All_Field Scroll Element Into View ${XPATH_USERROLE} Clear_Text ${XPATH_USERROLE} Scroll Element Into View ${XPATH_STATUS} Clear_Text ${XPATH_STATUS} Scroll Element Into View ${XPATH_EMPLOYEE} Clear_Text ${XPATH_EMPLOYEE} Scroll Element Into View ${XPATH_USERNAME} Clear_Text ${XPATH_USERNAME} Scroll Element Into View ${XPATH_PASSWORD} Clear_Text ${XPATH_PASSWORD} Scroll Element Into View ${XPATH_CONFIRMPASSWORD} Clear_Text ${XPATH_CONFIRMPASSWORD} Capture_page_all_field_with_data Capture Page Screenshot • Source code chức Add Job Titles - Source code Add Job Titles với input hợp lệ 62 ${INP - - - - - - *** Settings *** Documentation Check the Add Users function in the User Management dropdown list Library SeleniumLibrary Library BuiltIn Library Collections *** Variables *** ${BROWSER} Chrome ${LOGIN_URL} https://opensourcedemo.orangehrmlive.com/web/index.php/auth/login ${VALID_USERNAME} Admin ${VALID_PASSWORD} admin123 ${PAGE_ADMIN} (//a[@class="oxd-main-menu-item"])[1] ${ADDUSER_BUTTON} //div[@class="orangehrm-header-container"]/button ${XPATH_USERROLE} //label[text()="User Role"]//ancestor::div[@class="oxd-input-group oxd-input-field-bottomspace"]//div[@class="oxd-select-text-input"] ${XPATH_STATUS} //label[text()="Status"]//ancestor::div[@class="oxdinput-group oxd-input-field-bottom-space"]//div[@class="oxd-select-textinput"] ${XPATH_EMPLOYEE} //label[text()="Employee Name"]//ancestor::div[@class="oxd-input-group oxd-input-field-bottomspace"]//input[@placeholder="Type for hints "] ${XPATH_USERNAME} //label[text()="Username"]//ancestor::div[@class="ox d-input-group oxd-input-field-bottom-space"]//input[@class="oxd-input oxdinput active"] ${XPATH_PASSWORD} //label[text()="Password"]//ancestor::div[@class="ox d-input-group oxd-input-field-bottom-space"]//input[@type="password"] ${XPATH_CONFIRMPASSWORD} //label[text()="Confirm Password"]//ancestor::div[@class="oxd-input-group oxd-input-field-bottomspace"]//input[@type="password"] *** Keywords *** Login to OrangeHRM website Open Browser ${LOGIN_URL} ${BROWSER} Maximize Browser Window Set Selenium Implicit Wait Input Text //input[@name="username"] ${VALID_USERNAME} Input Text //input[@name="password"] ${VALID_PASSWORD} Click Button //button[@type="submit"] *** Test Cases *** TC_14 Check all fields with valid data in Add Users Login to OrangeHRM website Click Element ${PAGE_ADMIN} Click Button ${ADDUSER_BUTTON} 63 - Click Element ${XPATH_USERROLE} Click Element //div[@role='listbox']//*[contains(text(),'ESS')] Click Element ${XPATH_STATUS} Click Element //div[@role='listbox']//*[contains(text(),'Enabled')] Input Text ${XPATH_EMPLOYEE} Peter Mac Anderson Sleep 3s Click Element //div[@role='listbox'] Input Text ${XPATH_USERNAME} Alice Input Text ${XPATH_PASSWORD} Ptlc123 Input Text ${XPATH_CONFIRMPASSWORD} Ptlc123 Click Button //button[text()=" Save "] ${Check} Set Variable Sleep 5s ${row} Get Element Count //div[@class="oxd-table-row oxd-tablerow with-border"] ${col} Get Element Count //div[@role="columnheader"] Log To Console ${row} Log To Console ${col} FOR ${counter1} IN RANGE ${row} ${value} Get Text //div[@class="orangehrmcontainer"]//div[@class="oxd-table-card"][${counter1}]//div[@role="cell"][2] ${element} Get WebElement //div[@class="orangehrmcontainer"]//div[@class="oxd-table-card"][${counter1}] Scroll Element Into View ${element} IF '${value}' == 'Alice' Execute Javascript arguments[0].setAttribute('style', 'background-color:yellow;') ARGUMENTS ${element} Capture Page Screenshot Log User added to the table successfully ${Check} Set Variable BREAK END END IF ${Check} == Capture Page Screenshot Fail Users are not added to the table END Close Browser TC_23 Check all fields and press cancel button Login to OrangeHRM website Click Element ${PAGE_ADMIN} Click Button ${ADDUSER_BUTTON} Click Element ${XPATH_USERROLE} Click Element //div[@role='listbox']//*[contains(text(),'ESS')] 64 - - Click Element ${XPATH_STATUS} Click Element //div[@role='listbox']//*[contains(text(),'Enabled')] Input Text ${XPATH_EMPLOYEE} Alice Duval Sleep 3s Click Element //div[@role='listbox'] Input Text ${XPATH_USERNAME} Alice Input Text ${XPATH_PASSWORD} Ptlc123 Input Text ${XPATH_CONFIRMPASSWORD} Ptlc123 Click Button //button[text()=" Cancel "] Sleep 2s Element Should Be Visible //div[@class="orangehrm-paper-container"] Close Browser Source code Add Job Titles với input không hợp lệ Source code data driven - - - *** Settings *** Library SeleniumLibrary Resource screensho/AddJobTitles.robot Suite Setup Open website OrangeHRM Suite Teardown Close Browser Test Template AddJobTitles_operation *** Variables *** ${BROWSER} Chrome ${LOGIN_URL} https://opensourcedemo.orangehrmlive.com/web/index.php/auth/login *** Test Cases *** ${Input_Job Titles} ${Input_Job Description} ${Input_Job Specification} ${Input_Note} TC_26 Check with Job Title field blank and fill in all remaining fields ${EMPTY} Financial planning, budget forecasting D:\\Chi_Robot\\Add_jobtitles.xlsx Not available TC_28 Check the Job Specification field upload an invalid file Developer write code, create programs, software D:\\Chi_Robot\\a.pptx Not available ***Keyword*** AddJobTitles_operation [Arguments] ${Input_Job Titles} ${Input_Job Description} ${Input_Job Specification} ${Input_Note} Enter_input ${Input_Job Titles} ${Input_Job Description} ${Input_Job Specification} ${Input_Note} Load_message Message Clear_Text_All_Field 65 Source code Resource screensho/AddJobTitles.robot *** Settings *** Library SeleniumLibrary *** Variables *** ${BROWSER} Chrome ${LOGIN_URL} https://opensourcedemo.orangehrmlive.com/web/index.php/auth/login ${VALID_USERNAME} Admin ${VALID_PASSWORD} admin123 ${PAGE_ADMIN} (//a[@class="oxd-main-menu-item"])[1] ${JOB} (//span[@class="oxd-topbar-body-nav-tab-item"])[2] ${JOB_TITLES} //li/a[text()="Job Titles"] ${ADD_JOBTITLES_BUTTON} //div[@class="orangehrm-header-container"]//button ${Xpath_Job Title} //label[text()="Job Title"]//ancestor::div[@class="oxdinput-group oxd-input-field-bottom-space"]//input ${Xpath_Job Description} //textarea[@placeholder="Type description here"] ${Xpath_Job Specification} //input[@type="file"] ${Xpath_Note} //textarea[@placeholder="Add note"] ${Save} //button[@type="submit"] ***Keyword*** Open website OrangeHRM Open Browser ${LOGIN_URL} ${BROWSER} Maximize Browser Window Set Selenium Implicit Wait Input Text //input[@name="username"] ${VALID_USERNAME} Input Text //input[@name="password"] ${VALID_PASSWORD} Click Button //button[@type="submit"] Click Element ${PAGE_ADMIN} Click Element ${JOB} Click Element ${JOB_TITLES} Click Element ${ADD_JOBTITLES_BUTTON} Sleep 5s Enter_input [Arguments] ${Input_Job Titles} ${Input_Job Description} ${Input_Job Specification} ${Input_Note} Input Text ${Xpath_Job Title} ${Input_Job Titles} Input Text ${Xpath_Job Description} ${Input_Job Description} Choose File ${Xpath_Job Specification} ${Input_Job Specification} Input Text ${Xpath_Note} ${Input_Note} Click Button ${Save} Load_message 66 Sleep seconds Message # Xác minh hợp lệ # Element Should Be Visible //div[@class="oxd-toast-container oxd-toastcontainer bottom"] # Xác minh không hợp lệ # Element Should Be Visible //span[@class="oxd-text oxd-text span oxdinput-field-error-message oxd-input-group message"] Element Should Be Visible //div[@class="orangehrm-card-container"] Clear_Text [Arguments] ${selector} Scroll Element Into View //label[text()="Job Title"]//ancestor::div[@class="oxd-input-group oxd-input-field-bottomspace"]//input Sleep 3s click element ${selector} press keys ${selector} CTRL+a+BACKSPACE sleep 0.3 Clear_Text_All_Field Scroll Element Into View ${Xpath_Job Title} Sleep 3s Clear_Text ${Xpath_Job Title} Clear_Text ${Xpath_Job Description} Clear_Text ${Xpath_Note} Capture_page_all_field_with_data Capture Page Screenshot • Source code chức Delete Selected Job Titles • • • • • • • • • • • • • *** Settings *** Library SeleniumLibrary Library Collections *** Variables *** ${BROWSER} Chrome ${LOGIN_URL} https://opensourcedemo.orangehrmlive.com/web/index.php/auth/login ${VALID_USERNAME} Admin ${VALID_PASSWORD} admin123 ${PAGE_ADMIN} (//a[@class="oxd-main-menu-item"])[1] ${JOB} (//span[@class="oxd-topbar-body-nav-tab-item"])[2] ${JOB_TITLES} //li/a[text()="Job Titles"] ${CHECKBOX} //div[text()="Job Titles"]//ancestor::div[@class="oxd-tablerow oxd-table-row with-border"]//span[@class="oxd-checkbox-input oxdcheckbox-input active label-right oxd-checkbox-input"] ${DELETEBUTTON} //button[text()=" Delete Selected "] 67 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • ${POPUP} //div[@role="document"] ${YESDELETE_BUTTON} //button[text()=" Yes, Delete "] ${NOCANCEL_BUTTON} //button[text()=" No, Cancel "] ${CHECKBOX} //div[text()="Account Assistant"]//ancestor::div[@class="oxd-table-row oxd-table-row withborder"]//div[contains(@class,"oxd-table-card-cell-checkbox")] *** Keywords *** Login to OrangeHRM website Open Browser ${LOGIN_URL} ${BROWSER} Maximize Browser Window Set Selenium Implicit Wait Input Text //input[@name="username"] ${VALID_USERNAME} Input Text //input[@name="password"] ${VALID_PASSWORD} Click Button //button[@type="submit"] *** Test Cases *** TC_33 Check the "Delete Selected" button appears in the Job Titles panel Login to OrangeHRM website Click Element ${PAGE_ADMIN} Click Element ${JOB} Click Element ${JOB_TITLES} Click Element ${CHECKBOX} Element Should Be Visible ${DELETEBUTTON} Close Browser TC_34 Check pop-up "Are you sure?" appears when clicking the "Delete Selected" button Login to OrangeHRM website Click Element ${PAGE_ADMIN} Click Element ${JOB} Click Element ${JOB_TITLES} Click Element ${CHECKBOX} Click Element ${DELETEBUTTON} Element Should Be Visible ${POPUP} Close Browser TC_36 Check "Delete Selected" button when deleting all Job Titles and presses "No, Cancel" button Login to OrangeHRM website Click Element ${PAGE_ADMIN} Click Element ${JOB} Click Element ${JOB_TITLES} Click Element ${CHECKBOX} Click Element ${DELETEBUTTON} Click Element ${NOCANCEL_BUTTON} Element Should Not Be Visible //div[@role="document"] 68 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • Close Browser TC_37 Check the "Delete Selected" button when deleting Job Titles and press the "Yes, Delete" button Login to OrangeHRM website Click Element ${PAGE_ADMIN} Click Element ${JOB} Click Element ${JOB_TITLES} ${List} Create List HR Associate HR Manager IT Manager Network Administrator Head of Support FOR ${counter} IN RANGE ${value} Get From List ${List} ${counter} ${element2} Get WebElement //div[text()="${value}"]//ancestor::div[@class="oxd-table-row oxd-table-row with-border"]//div[contains(@class,"oxd-table-card-cellcheckbox")] Scroll Element Into View ${element2} Click Element //div[text()="${value}"]//ancestor::div[@class="oxdtable-row oxd-table-row with-border"]//div[contains(@class,"oxd-table-cardcell-checkbox")] END Sleep 3s Scroll Element Into View //h6[@class="oxd-text oxd-text h6 orangehrmmain-title"] Click Element ${DELETEBUTTON} Click Element ${YESDELETE_BUTTON} Sleep 3s ${Check} Set Variable Sleep 5s ${row} Get Element Count //div[@class="oxd-table-row oxd-tablerow with-border"] Log To Console ${row} FOR ${counter1} IN RANGE ${row} ${value} Get Text //div[@class="orangehrmcontainer"]//div[@class="oxd-table-card"][${counter1}]//div[@role="cell"][2] ${element} Get WebElement //div[@class="orangehrmcontainer"]//div[@class="oxd-table-card"][${counter1}] Scroll Element Into View ${element} IF ('${value}' == 'HR Associate') or ('${value}' == 'HR Manager') or ('${value}' == 'IT Manager') or ('${value}' == 'Network Administrator') or ('${value}' == 'Head of Support') Execute Javascript arguments[0].setAttribute('style', 'background-color:yellow;') ARGUMENTS ${element} Capture Page Screenshot Fail 69 • • • • • • • • • • • • • • • • • • • • • • • • • • • ${Check} BREAK Set Variable END END IF ${Check} == # Scroll Element Into View //div[@data-v0dea79bd]//span[@class="oxd-text oxd-text span"] Capture Page Screenshot Log Pass END # Xác minh Job Titles vừa tạo xuất table Close Browser TC_35 Check "Delete Selected" button when deleting all Job Titles and presses "Yes, Delete" button Login to OrangeHRM website Click Element ${PAGE_ADMIN} Click Element ${JOB} Click Element ${JOB_TITLES} Click Element ${CHECKBOX} Click Element ${DELETEBUTTON} Click Element ${YESDELETE_BUTTON} Sleep 2s Element Should Be Visible //div[@class="oxd-toast-container oxd-toastcontainer bottom"] Element Should Be Visible //span[text()="No Records Found"] # Xác minh tất Job Titles xố Close Browser • Source code chức Edit Job Titles • • • • • • • • • • • • *** Settings *** Library SeleniumLibrary Resource setup_before.robot *** Variables *** ${BROWSER} Chrome ${LOGIN_URL} https://opensourcedemo.orangehrmlive.com/web/index.php/auth/login ${VALID_USERNAME} Admin ${VALID_PASSWORD} admin123 ${PAGE_ADMIN} (//a[@class="oxd-main-menu-item"])[1] ${JOB} (//span[@class="oxd-topbar-body-nav-tab-item"])[2] ${JOB_TITLES} //li/a[text()="Job Titles"] 70 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • ${PENCIL} //div[text()="Financial Analyst"]//ancestor::div[@class="oxdtable-row oxd-table-row with-border"]//i[@class="oxd-icon bi-pencil-fill"] ${INPUT JOB TITLES} //label[text()="Job Title"]//ancestor::div[@class="oxdinput-group oxd-input-field-bottom-space"]//input ${Xpath_Job Title} //div[@class="oxd-form-row"]//input ${Xpath_Job Description} //textarea[@placeholder="Type description here"] ${Xpath_Job Specification} //input[@type="file"] ${Xpath_Note} //textarea[@placeholder="Add note"] ${Save} //button[@type="submit"] ${Cancel} //button[text()=" Cancel "] *** Test Cases *** TC_36 Check when Editing a Job Titles field Open Browser ${LOGIN_URL} ${BROWSER} Maximize Browser Window Set Selenium Implicit Wait Input Text //input[@name="username"] ${VALID_USERNAME} Input Text //input[@name="password"] ${VALID_PASSWORD} Click Button //button[@type="submit"] Click Element ${PAGE_ADMIN} Click Element ${JOB} Click Element ${JOB_TITLES} Click Element //div[text()="Financial Analyst"]//ancestor::div[@class="oxd-table-row oxd-table-row withborder"]//i[@class="oxd-icon bi-pencil-fill"] sleep 5s Clear_Text ${INPUT JOB TITLES} Input Text ${INPUT JOB TITLES} Business man Click Button ${Save} Sleep 2s Element Should Be Visible //div[@class="oxd-toast-container oxd-toastcontainer bottom"] ${Check} Set Variable Sleep 5s ${row} Get Element Count //div[@class="oxd-table-row oxd-tablerow with-border"] ${col} Get Element Count //div[@role="columnheader"] Log To Console ${row} Log To Console ${col} FOR ${counter1} IN RANGE ${row} ${value} Get Text //div[@class="orangehrmcontainer"]//div[@class="oxd-table-card"][${counter1}]//div[@role="cell"][2] ${element} Get WebElement //div[@class="orangehrmcontainer"]//div[@class="oxd-table-card"][${counter1}] Scroll Element Into View ${element} 71 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • IF '${value}' == 'Business man' Execute Javascript arguments[0].setAttribute('style', 'background-color:yellow;') ARGUMENTS ${element} Capture Page Screenshot Log Pass ${Check} Set Variable BREAK END END IF ${Check} == Capture Page Screenshot Fail Fail END # Xác minh Job Titles vừa edit edit thành công table Close Browser TC_37 Check when Editing Job Title field then press cancel button Open Browser ${LOGIN_URL} ${BROWSER} Maximize Browser Window Set Selenium Implicit Wait Input Text //input[@name="username"] ${VALID_USERNAME} Input Text //input[@name="password"] ${VALID_PASSWORD} Click Button //button[@type="submit"] Click Element ${PAGE_ADMIN} Click Element ${JOB} Click Element ${JOB_TITLES} Click Element //div[text()="QA Engineer"]//ancestor::div[@class="oxdtable-row oxd-table-row with-border"]//i[@class="oxd-icon bi-pencil-fill"] sleep 5s Clear_Text ${INPUT JOB TITLES} Input Text ${INPUT JOB TITLES} Business man Click Button ${Cancel} Sleep 5s Element Should Be Visible //div[@class="orangehrm-paper-container"] ${Check} Set Variable Sleep 5s ${row} Get Element Count //div[@class="oxd-table-row oxd-tablerow with-border"] ${col} Get Element Count //div[@role="columnheader"] Log To Console ${row} Log To Console ${col} FOR ${counter1} IN RANGE ${row}+1 ${value} Get Text //div[@class="orangehrmcontainer"]//div[@class="oxd-table-card"][${counter1}]//div[@role="cell"][2] 72 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • ${element} Get WebElement //div[@class="orangehrmcontainer"]//div[@class="oxd-table-card"][${counter1}] Scroll Element Into View ${element} IF '${value}' == 'QA Engineer' Execute Javascript arguments[0].setAttribute('style', 'background-color:yellow;') ARGUMENTS ${element} Capture Page Screenshot Log Pass ${Check} Set Variable BREAK END END IF ${Check} == Capture Page Screenshot Fail Fail END Close Browser TC_38 Check when editing all fields then press save button Open Browser ${LOGIN_URL} ${BROWSER} Maximize Browser Window Set Selenium Implicit Wait Input Text //input[@name="username"] ${VALID_USERNAME} Input Text //input[@name="password"] ${VALID_PASSWORD} Click Button //button[@type="submit"] Click Element ${PAGE_ADMIN} Click Element ${JOB} Click Element ${JOB_TITLES} Click Element //div[text()="Content Specialist"]//ancestor::div[@class="oxd-table-row oxd-table-row withborder"]//i[@class="oxd-icon bi-pencil-fill"] sleep 5s Clear_Text ${INPUT JOB TITLES} Input Text ${Xpath_Job Title} Software Testing Input Text ${Xpath_Job Description} Write test case manual, automattion Choose File ${Xpath_Job Specification} D:\\Chi_Robot\\Add_jobtitles.xlsx Input Text ${Xpath_Note} Not available Click Button //button[@type="submit"] Sleep 2s Element Should Be Visible //div[@class="oxd-toast-container oxd-toastcontainer bottom"] ${Check} Set Variable Sleep 5s 73 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • ${row} Get Element Count //div[@class="oxd-table-row oxd-tablerow with-border"] ${col} Get Element Count //div[@role="columnheader"] Log To Console ${row} Log To Console ${col} FOR ${counter1} IN RANGE ${row} ${value} Get Text //div[@class="orangehrmcontainer"]//div[@class="oxd-table-card"][${counter1}]//div[@role="cell"][2] ${element} Get WebElement //div[@class="orangehrmcontainer"]//div[@class="oxd-table-card"][${counter1}] Scroll Element Into View ${element} IF '${value}' == 'Software Testing' Execute Javascript arguments[0].setAttribute('style', 'background-color:yellow;') ARGUMENTS ${element} Capture Page Screenshot Log Pass ${Check} Set Variable BREAK END END IF ${Check} == Capture Page Screenshot Fail Fail END Close Browser TC_39 Check when editing all fields then press cancel button Open Browser ${LOGIN_URL} ${BROWSER} Maximize Browser Window Set Selenium Implicit Wait Input Text //input[@name="username"] ${VALID_USERNAME} Input Text //input[@name="password"] ${VALID_PASSWORD} Click Button //button[@type="submit"] Click Element ${PAGE_ADMIN} Click Element ${JOB} Click Element ${JOB_TITLES} Click Element //div[text()="Finance Manager"]//ancestor::div[@class="oxd-table-row oxd-table-row withborder"]//i[@class="oxd-icon bi-pencil-fill"] sleep 5s Clear_Text ${INPUT JOB TITLES} Input Text ${Xpath_Job Title} HR Input Text ${Xpath_Job Description} personnel recruitment Choose File ${Xpath_Job Specification} D:\\Chi_Robot\\Add_jobtitles.xlsx 74 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • Input Text ${Xpath_Note} Not available Click Button ${Cancel} Sleep 2s Element Should Be Visible //div[@class="orangehrm-paper-container"] ${Check} Set Variable Sleep 5s ${row} Get Element Count //div[@class="oxd-table-row oxd-tablerow with-border"] ${col} Get Element Count //div[@role="columnheader"] Log To Console ${row} Log To Console ${col} FOR ${counter1} IN RANGE ${row} ${value} Get Text //div[@class="orangehrmcontainer"]//div[@class="oxd-table-card"][${counter1}]//div[@role="cell"][2] ${element} Get WebElement //div[@class="orangehrmcontainer"]//div[@class="oxd-table-card"][${counter1}] Scroll Element Into View ${element} IF '${value}' == 'Finance Manager' Execute Javascript arguments[0].setAttribute('style', 'background-color:yellow;') ARGUMENTS ${element} Capture Page Screenshot Log Pass ${Check} Set Variable BREAK END END IF ${Check} == Capture Page Screenshot Fail Fail END Close Browser TC_40 Check when click edit but don't edit any field then press save button Open Browser ${LOGIN_URL} ${BROWSER} Maximize Browser Window Set Selenium Implicit Wait Input Text //input[@name="username"] ${VALID_USERNAME} Input Text //input[@name="password"] ${VALID_PASSWORD} Click Button //button[@type="submit"] Click Element ${PAGE_ADMIN} Click Element ${JOB} Click Element ${JOB_TITLES} Click Element //div[text()="Customer Success Manager"]//ancestor::div[@class="oxd-table-row oxd-table-row withborder"]//i[@class="oxd-icon bi-pencil-fill"] 75 • • • • • • • • • • • • • • • • • • • • • • • • • • • • sleep 5s Click Button ${Save} Sleep 2s Element Should Be Visible //div[@class="oxd-toast-container oxd-toastcontainer bottom"] ${Check} Set Variable Sleep 5s ${row} Get Element Count //div[@class="oxd-table-row oxd-tablerow with-border"] ${col} Get Element Count //div[@role="columnheader"] Log To Console ${row} Log To Console ${col} FOR ${counter1} IN RANGE ${row} ${value} Get Text //div[@class="orangehrmcontainer"]//div[@class="oxd-table-card"][${counter1}]//div[@role="cell"][2] ${element} Get WebElement //div[@class="orangehrmcontainer"]//div[@class="oxd-table-card"][${counter1}] Scroll Element Into View ${element} IF '${value}' == 'Customer Success Manager' Execute Javascript arguments[0].setAttribute('style', 'background-color:yellow;') ARGUMENTS ${element} Capture Page Screenshot Log Pass ${Check} Set Variable BREAK END END IF ${Check} == Capture Page Screenshot Fail Fail END Close Browser 76