Robot Framework Workshop #1 by น้องแชมป์

󰃭 2024-10-13

หลังจากที่มีน้องแชมป์มาสอนในทีมเกี่ยวกับ Test Automation ด้วย Robot Framework ไปแล้ว ก็เลยอยากจะมาเขียน Workshop ตัวนึงสำหรับพื้นฐานเกี่ยวกับ Robot Framework กัน

Workshop นี้จะเน้นเรื่องอะไรบ้าง

  • การเขียน Test Automation ด้วย Robot Framework

Let’s Start

Install Python

  1. Download Python from Python.org
  2. Install Python
  3. Check python version
python3 --version

สร้าง Virtual Environment

สร้าง Virtual Environment สำหรับการทำงานของ Robot Framework

python3 -m venv venv

Activate Virtual Environment

source venv/bin/activate

Setup Robot Framework

ติดตั้ง Robot Framework ผ่าน pip3

pip3 install robotframework
pip3 install robotframework-seleniumlibrary

ก่อนที่จะใช้งานควรติดติดตั้ง Browser Driver ก่อน

[MACOS]

หลังจากดาวน์โหลด chromedriver เรียบร้อยแล้วจากนั้นให้ย้ายไปไว้ใน /usr/local/bin

mv ~/Downloads/chromedriver /usr/local/bin

[MACOS] ตั้งค่า Permission สำหรับ chromedriver

sudo xattr -cr 'chromedriver'
chmod +x /usr/local/bin/chromedriver

# test chromedriver
chromedriver --version

Workshop

Website: demo-website

โจทย์
1. เขียน 2 Test Case ให้ทำการ Login ที่ https://www.saucedemo.com/
    1.1. Test Case 001 - Login ด้วย Username: standard_user และ Password: secret_sauce
    1.2. Test Case 002 - Login ด้วย Username: problem_user และ Password: secret_sauce
2. เมื่อรันทั้ง 2 Test Case ต้องเปิดและปิด Browser แค่ครั้งเดียว
3. username และ password ต้องรับค่ามาจาก yaml (ทำ data driven)
4. Verify Product Page หลังจาก Login สำเร็จ **ทำให้รู้ว่า Login ผ่านแล้ว**
5. Logut หลังจาก Verify Product Page สำเร็จ

เริ่มสร้างไฟล์ workshop.robot และ data.yaml

data.yaml

Test_01:
  input_data:
    username: standard_user
    password: secret_sauce

Test_02:
  input_data:
    username: problem_user
    password: secret_sauce

workshop.robot ทดสอบสร้าง Keyword สำหรับเปิด Browser และ เรียกใช้งาน

*** Settings ***
Library    SeleniumLibrary
Variables    data.yaml

*** Keywords ***
Open Browser with Chrome
    ${chromedriver_path}    Set Variable    /usr/bin/chromedriver
    Open Browser    https://www.saucedemo.com/    GC    executable_path=${chromedriver_path}

*** Test Cases ***
Test_01
    Open Browser with Chrome
    Sleep   2s

ทดสอบรัน workshop.robot

robot workshop.robot

ทำการเก็บ XPATH ของ Element ต่าง ๆ

โดยเราได้รวบรวม XPATH สำหรับ saucedemo ไว้เรียบร้อยแล้วดังนี้

  • Text Input Username: //*[@data-test="username"]
  • Text Input Password: //*[@data-test="password"]
  • Login Button: //*[@data-test="login-button"]
  • Menu Bar: //*[@id="react-burger-menu-btn"]
  • Logout Button: //a[@id='logout_sidebar_link']

หลังจากนั้นให้แก้ไข workshop.robot เพื่อเก็บ XPATH ของ Element ต่างๆ ใน Veriables

*** Variables ***
${Test_Data}

# Login Page
${username}    //*[@data-test="username"]
${password}    //*[@data-test="password"]
${login_button}    //*[@data-test="login-button"]

# Product Page
${menu}    //*[@id="react-burger-menu-btn"]
${logout}   //a[@id='logout_sidebar_link'] 

จากนั้นเขียน Settings สำหรับ Workshop.robot

เนื่องจาก requirement บอกว่าต้องการให้ Open Close Browser แค่ครั้งเดียว เราเลยตั้งค่า Suite Setp, Suite Teardown เพื่อ Open Close Browser ดังนี้

*** Settings ***
Library    SeleniumLibrary
Variables    data.yaml
Suite Setup    Open Browser with Chrome
Suite Teardown    Close All Browsers

เขียนดึง Data จาก data.yaml

โดยหลักการที่เราต้องเขียนคือเราจะดึงค่า value จาก [key]: value โดยใช้ key เป็น Test Case Name ตัวอย่าง data.yaml

Test_01:
  input_data: 
    username: standard_user
    password: secret_sauce

Test_02:
  input_data: 
    username: problem_user
    password: secret_sauce

เราสามารถดึง username จาก data.yaml ได้ดังนี้ ${Test_Data['input_data']['username']} เขียน Keywords เพิ่มในการ Prepare Data

อัพเดท Keyword Prepare Data เพื่อทำการดึัง data จาก yaml

*** Variables ***
${Test_Data}

*** Keywords ***
Prepare Data
  Set Test Variable    ${Test_Data}    ${${TEST_NAME}}

DONE

workshop.robot

*** Test Cases ***
*** Settings ***
Library    SeleniumLibrary
Variables    data.yaml
Suite Setup    Open Browser with Chrome
Suite Teardown    Close All Browsers
Test Setup    Prepare Data
Test Teardown    Logout Browser

*** Variables ***
${Test_Data}

# Login Page
${username}    //*[@data-test="username"]
${password}    //*[@data-test="password"]
${login_button}    //*[@data-test="login-button"]

# Product Page
${menu}    //*[@id="react-burger-menu-btn"]
${logout}   //a[@id='logout_sidebar_link'] 

*** Keywords ***

Prepare Data
  Set Test Variable    ${Test_Data}    ${${TEST_NAME}}

Open Browser with Chrome
    ${chromedriver_path}    Set Variable    /usr/bin/chromedriver
    Open Browser    https://www.saucedemo.com/    GC    executable_path=${chromedriver_path}

Logout Browser
    Sleep    2s
    Click Element    ${logout}
    Sleep    5s

# Login Page
# ---- Insert Login Page Keyword Below ----

# Product Page
# ---- Insert Product Page Keyword Below ----
    
*** Test Cases ***
Test_01
    Input Text    ${username}    ${Test_Data['input_data']['username']}
    Input Text    ${password}    ${Test_Data['input_data']['password']}
    Click Element    ${login_button}
    Wait Until Element Is Visible    ${menu}
    Click Element    ${menu}
    Wait Until Element Is Visible    ${logout}

Test_02
    Input Text    ${username}    ${Test_Data['input_data']['username']}
    Input Text    ${password}    ${Test_Data['input_data']['password']}
    Click Element    ${login_button}
    Wait Until Element Is Visible    ${menu}
    Click Element    ${menu}
    Wait Until Element Is Visible    ${logout}