ช่วงนี้หากใครตามข่าวสารการทำ automate test โดยเฉพาะการเทส Web Application น่าจะเคยได้ยิน เทส framework ตัวใหม่ๆ อย่าง cypress หรือ Katalon กันมาบ้าง โดยหลายเจ้าพยายามแก้ไขปัญหาความไม่เสถียรของการเทส Web Application

ทำไม Selenium ไม่เสถียร

  • Selenium ใช้งาน Web driver เป็นหลัก ปัญหานี้ทำให้ ผู้ใช้งานต้องคอยมาอัพเดท Web driver อยู่บ่อยๆ หากลืม เทสอาจรันไม่ได้ ใครใช้ Chrome จะรู้ดีว่าอัพเดทจนตามแทบไม่ทันครับ
  • พอมี Web driver ก็ทำให้การส่ง command เป็นการส่งจาก Test Script –> Web driver –> Web browser อีกที ทำให้การสั่งงานต้องผ่านหลายขั้นตอนนั่นเอง
  • Wait ของ Robot framework Selenium ยังเน้นไปที่การรอการแสดงผลหน้าจอเพียงอย่างเดียว หากเว็บเพื่อนๆเป็น Ajax หรือ Single page application แล้วล่ะก็บอกเลยว่า ปวดหัวแน่นอน

Robot framework Puppeteer คืออะไร

ถ้าให้สรุปง่ายคือ Robot framework Puppeteer เป็น Library ที่สร้างมาเพื่อตอบโจทย์ 3 อย่าง

  1. เร็วกว่า เนื่องจากเป็นการใช้งาน native library ตรงๆ ไม่มี Layer มาขั้นอย่าง Selenium ทำให้การทำงานเป็นไปได้อย่างราบรื่น
  2. ง่ายกว่า Robot framework Puppeteer ถูกออกแบบมาให้ใช้งานได้ง่าย ไม่เหมือนการใช้งาน Library ภาษาอื่นๆที่ต้องเข้าใจหลักการเขียนโปรแกรมค่อนข้างมาก (คุณเขียน Selenium ได้ก็เขียน Puppeteer ได้)
  3. เสถียรกว่า โดย Puppeteer สามารถ control network event ทำให้การ Wait แบบเก่าๆ หรือ Sleep ที่ต้อง work around ไม่จำเป็นอีกต่อไปครับ อีกทั้งยังเหมาะกับการใช้ทดสอบ Application สมัยใหม่ที่เขียนด้วย Angular หรือ React มากกว่าครับ

Robot framework Puppeteer เป็น Library ที่ทำมาครอบ Puppeteer เพื่อให้ Robot framework ใช้งานได้ง่าย โดย Keyword ต่างๆจะเหมือนกับการใช้งาน Selenium Library เลย ทำให้ใครที่ใช้งาน Selenium Library อยู่แล้วสามารถปรับตัว รวมไปจนถึง การเปลี่ยนมาใช้ Puppeteer ทำได้ง่ายมากๆครับ เช่น

Selenium:

Input Text    id:username     demo

Puppeteer:

Input Text    id:username     demo

จะเห็นว่าไม่มีความแตกต่างกันเลยครับ

โดยทีมพัฒนาจะใช้วิธีเพิ่มความสามารถของ Puppeteer ไปที่ Keyword เดิม หรือเพิ่มเติม Keyword ใหม่ๆ เข้ามา ทำให้การเปลี่ยนมาใช้งานนั้นแทบไม่ต้องแก้ไขอะไรเลยครับ

เริ่มการติดตั้ง

รัน Command เดียวเลยครับจบ ง่ายๆ ไม่ต้องโหลด Chrome driver หรือ Setup Path เพิ่มเติมให้ปวดหัว

pip install --upgrade robotframework-puppeteerlibrary

ตัวอย่าง Puppeteer Test Script

Example login form submit
    ${HEADLESS}     Get variable value    ${HEADLESS}    ${False}
    &{options} =    create dictionary   headless=${HEADLESS}
    Open browser    http://127.0.0.1:7272   options=${options}
    Maximize Browser Window
    Input text    id:username_field    demo
    Input text    id:password_field    mode
    Run Async Keywords
    ...    Click Element    id:login_button    AND
    ...    Wait For Response Url    http://127.0.0.1:7272/welcome.html
    Wait Until Page Contains    Login succeeded

โดย Scrip จะทำการเปิดหน้า Login และกรอก username และ password และ Submit login form
แต่สิ่งที่เพิ่มเข้ามาคือ Run Async Keywords และ Wait For Response URL

  • Wait For Response URL จะเป็นตัวช่วยรอจน Response การ login สำเร็จ และถูกส่งข้อมูลกลับมาที่ Browser ของเรานั่นเอง
  • Run Async Keywords Keyword ที่จะทำให้ Keyword ที่ต้องการรันภายใต้ Keyword นี้ทั้งหมดทำงานแบบพร้อมกันแบบ Asynchronous จากตัวอย่างจะหมายความว่า เราสั่งให้ Browser click element ปุ่ม login ไปพร้อมๆกับรอว่าเมื่อไหร่ login จะสำเร็จนั่นเอง ทำให้การทำงานไวมากขึ้น และเร็วกว่าการไปเช็คการแสดงผลของ Element บนหน้าจอนั่นเอง

Download Example Script

ใครอยากลองใช้งาน Download Example Script จาก link นี้ได้เลยทีมงามเตรียมไว้เพียบเลยครับ

Credit cover image: Designed by Dooder / Freepik

Previous articleดึงข้อมูลที่ซับซ้อนมาตรวจสอบด้วย Regular Expression
Next articleแก้ปัญหา Selenium Flaky Test หน้า loading ด้วย Robot Framework Puppeteer

1 COMMENT

  1. […] เนื่องจากเป็น Opensource เราเลือกที่จะใช้งาน Github เป็นที่เก็บ source code ใครสนใจลอง checkout มาดูกันได้ครับ Robot Framework Puppeteer เป็น web test library สนใจรายละเอียดเพิ่มเติม […]