ลอง Playwright เทสแอพ React + Vite แบบง่ายๆ
หลังจากวันก่อน ได้ลองใช้งาน Playwright ไป วันนี้ก็เลยลองเอาตัว Playwright มาลองทำ testing ง่ายๆ ด้วยการจำลองเว็บ โดยใช้ default เว็บ ของ React + Vite (เว็บที่เป็น counter)
ลองใช้งาน Playwright ในการทำ e2e testingสวัสดีครับ บทความนี้มาลองเล่น Playwright เพื่อเอามาทำ automate e2e testing ครับ Playwright เป็น e2e testing framework (end to end) ที่พัฒนาโดย Microsoft ตัว API มีความคล้ายกับ Puppeteer (แน่นอนแหละ main contributor ของ puppeteer ย้ายมา playwright) Fast and reliable end-to-end testingDEVAHOYChai Phonbopit
สร้างโปรเจ็คไว้เทส
เริ่มแรก ผมสร้างเว็บ เพื่อจะเอาไว้เทสก่อน ซึ่งใช้ starter ของ React + Vite เลย
จากนั้น ก็ install
ผมมีการเพิ่ม Input นิดหน่อย เพื่อให้เวลา Input และกด Set Title ให้มันไปเปลี่ยนค่า React + Vite เป็นค่าที่เราใส่ ไฟล์ src/App.tsx ผมปรับแต่งนิดหน่อย แบบนี้
เมื่อลองรัน dev server จะเป็น url http://localhost:5173 และหน้าตาก็ประมาณนี้
ซึ่งถ้าเราดูตัวเว็บ React สิ่งที่มีคือ
- มี document title ชื่อ Vite + React + TS
- มีปุ่ม count ( count is 0 เริ่มต้น) เมื่อเรากด ค่ามันก็จะเพิ่มทีละ 1
- มี input เพื่อ set ค่า title ( h1)
ทีนี้ ส่วนของเทส ผมก็จะตั้งเทสเคส ไว้ 3 ตัว คร่าวๆ คือ
- เทสว่า เว็บมี document title หรือไม่
- เทสว่า เมื่อกด count ค่าจะเพิ่มตามจำนวนคลิ๊กมั้ย
- เทสว่า เมื่อพิมพ์ input และกด Set Title ค่า heading 1 จะเปลี่ยนมั้ย
สร้างโปรเจ็ค Playwright
เช็ค document title
เทสนี้ไม่มีอะไรมาก
- สั่งให้เปิดเว็บด้วย page.goto()
- เช็คว่า page มี document title มั้ย ด้วย .toHaveTitle()
- ลอง screenshot ถ่ายรูปไว้ด้วย ด้วยคำสั่ง page.screenshot
เทส click count button
- ก็เปิดเว็บ React ด้วย
goto()
เหมือนเดิม - จากนั้น ใช้ page.locator เพื่อหา element ด้วย selector .card button แบบเดียวกับ css / js
- เมื่อได้ element ก็ทำการกด click 1 ที
element.click()
- สุดท้าย expect ว่า element ต้องมี text เป็น count is 1
เรื่องของ locator เราสามารถใช้ ได้หลายวิธีเช่น หา button ในเพจนี้
page.locator('.card button')
page.getByRole('button')
- มีโอกาสได้ หลาย elementspage.getByText('count is 0')
- ใช้ได้เฉพาะเริ่มต้นครั้งแรก
ส่วนตัวผมชอบใช้ selector มากกว่า เพราะถ้าเคสนี้ใช้ getByRole()
หรือ getByText()
เวลา expect ก็จะหา element นั้นไม่เจอ เพราะค่า มันเปลี่ยนแล้ว
อ่าน Locators เพิ่มเติม
เทส set heading title
เทสสุดท้าย เริ่มจาก
- page.goto เพื่อเปิดเว็บ
- หา element ด้วย page.locator เนื่องจากเว็บมี input ที่เดียว
- ทำการกรอกค่าด้วย
input.fill()
- หา element button ที่เป็น type=submit จากนั้นกด click
- expect หา h1 ต้องมีค่า Hello World
- สุดท้าย screenshots ไว้ซักหน่อย
ลองรันเทส playwright ดูผลลัพธ์
สุดท้าย ไฟล์ test ของผม react-vite.spec.ts
เผื่ออยากลองเอาไปรัน
สรุป
วันนี้ก็ลองเทส Playwright ด้วยการใช้ Selector ง่ายๆ มีการ fill input และก็ take screenshot ไป หวังว่าบทความนี้ะเป็นไอเดีย และแนวทางให้ใครหลายๆ คนที่ลองใช้ Playwright ลองไปเล่นกันดูนะครับ
Happy Coding ❤️
- Authors
-
Chai Phonbopit
เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust