จาก post ของกลุ่ม Robot framework 66 ที่ Facebook

ปัญหา

จะรับมือกับpop up ยังไงดี?
สถานการณ์คือเข้าเว็บไซต์ไป เจอป๊อบอัพ ให้กดปุ่มปิดป๊อบอัพ
ตัวอย่างเช่นระบบ http://www.kuala-lumpur.ws/
จะมี popup ขึ้นมาดังรูป

Screen Shot 2558-03-17 at 7.30.02 AM

วิธีการแก้ไขปัญหา

ในการรับมือนั้นมันมีหลายแบบเช่นกัน
โดยขึ้นอยู่กับความต้องการ หรือ test case ที่ต้องการนั่นเอง
เช่น

  1. ต้องการให้ popup มันแสดงขึ้นมา แล้วทำการปิดไป เพื่อทดสอบด้วยว่า popup มันแสดงถูกไหม ?
  2. ไม่ต้องการให้ popupม มันขึ้นมาเลย
  3. ขึ้นก็ได้ แต่เราไม่ต้องการมันจริงๆ นะ ดังนั้นก็กดปิดไป ก่อนทำการทดสอบส่วนอื่นๆ

จากความต้องการ หรือ test case ทั้งสามข้อนั้น
ในข้อ 1 และ ข้อ 3 มีการตอบไปล่ะ คือ

Screen Shot 2558-03-17 at 7.33.50 AM

และ

Screen Shot 2558-03-17 at 7.34.20 AM

แต่เหลือข้อ 2 นั่นคือไม่ต้องการให้ขึ้นมาเลยนะ จะทำอย่างไรดี ?

ในการเขียน Robot framework นั้นคนเขียนคือ Team พัฒนา
และเขียนก่อน หรือ ไปพร้อมกับการพัฒนา
ดังนั้น ผู้เขียนจะรู้ว่าเทคนิค หรือ วิธีในการพัฒนาระบบเป็นแบบไหนอยู่แล้ว
แต่ถ้าโชคไม่ดี …. เราก็สามารถแก้ไขได้ด้วยการตามล่าหาความจริง
แต่ไม่แนะนำเท่าไรนะครับ

จำไว้ว่า ถ้าระบบมันทดสอบยาก การพัฒนามันขึ้นมาก็ยากเช่นกัน !!

มาดูกันในมุมมองของคนไม่ได้พัฒนาระบบ
เริ่มจากคำถาม
รูปแบบของ popup ถูกพัฒนาด้วยอะไร ?
ทำไม popup ถึงขึ้นเพียงครั้งแรกที่เข้า web ล่ะ ?

สิ่งที่เราต้องทำก็คือ การหาคำตอบ
เริ่มด้วยการพัฒนา popup นั้นใช้ html นี่แหละ
ไม่ได้ใช้พวก alert/confirm box ของ Javascript นะ

ต่อจากนั้น
ผมพบว่า ระบบมีการเขียน cookie เมื่อเข้าใช้งาน web ดังรูป

Screen Shot 2558-03-17 at 7.23.57 AM

ดังนั้นจึงลองลบ cookie จากทั้งสอง site ทิ้งไป
สิ่งที่เกิดขึ้นก็คือ popup จะแสดงขึ้นมาทุกครั้ง
แต่ถ้าผมไม่ลบมันออกไป popup จะขึ้นเพียงครั้งแรกที่ผมเข้าใช้งาน web เท่านั้น

จากตรงนี้แสดงว่า เราเริ่มเข้าใจพฤติกรรมการทำงานของระบบล่ะ
ว่า popup มันขึ้นอยู่กับ cookie นะ
ที่สำคัญเราสามารถ ทดสอบแบบ manual ได้ด้วยขั้นตอนเดิมๆ
ดังนั้น เราสามารถทำให้มันทดสอบแบบอัตโนมัติได้เช่นกัน

แต่ถ้าสังเกตจากระบบ จะทำการ redirect นิดหน่อย คือจะไปที่

http://www.kuala-lumpur.ws/#promo แทนนะครับ
นั่นคือ การใช้ Javascript
แสดงว่า ถ้าเราทดสอบด้วย Robot framework หรือ Selenium มันจะไม่เปิด popup อยู่แล้ว
เนื่องจาก Selenium จะไม่ทำการ execute Javascript นะครับ

แต่ถ้าเราต้องการทดสอบผ่าน http://www.kuala-lumpur.ws/#promo จริงๆ
ก็ต้องทำการสร้าง cookie ขึ้นมา และให้การทดสอบมัน execute Javascript

แล้วถ้าต้องการเขียน Automate test ด้วย Robot framework ล่ะ ทำอย่างไรดี ?

อย่างแรกต้องไปดูที่ Keyword Document ของ library Selenium2Library ก่อนนะ
จะมี keyword ที่เกี่ยวกับการจัดการ cookie ดังนี้

  • Add Cookie
  • Delete cookie
  • Delete All Cookies
  • Get Cookie Value
  • Get Cookies

คำถาม
สิ่งที่เราต้องการคืออะไร ?
คำตอบ
เราไม่ต้องการให้ popup มันแสดงขึ้นมาเมื่อเข้าใช้งานหรือทดสอบ web นะสิ
ลองไปเปิด code เจอ Javascript ดังนี้นะ

Screen Shot 2558-03-17 at 8.30.00 AM

คำอธิบาย
จะทำการเปิด popup หรือการ redirect ไปยัง http://www.kuala-lumpur.ws/#promo
เมื่อค่าใน cookie ชื่อ cms_COUT_Domain มีค่าเป็น null
ดังนั้น ถ้าเราจะปิดหน้า popup ก็ให้กำหนดค่าใน cookie ไปก่อนสิ ใช่ไหม ?

ดังนั้นสามารถเขียน Robot framework เพื่อปิดหรือเปิด popup ดังนี้

คำอธิบายขั้นตอนการทำงาน

  • เปิดหน้า web ที่ต้องการทดสอบมาก่อน
  • ทำการสร้าง cookie เข้าไปใน domain และ path ที่ต้องการ
  • ทำการสั่งให้ run Javascript โดยใน web นี้ใช้ jQuery นั่นเอง

เพียงเท่านี้เราก็จัดการกับ popup ได้แล้วครับ

แต่การทำแบบนี้ไม่ดีนะ !!

เนื่องจาก เราเขียนการทดสอบหลังจากที่พัฒนาระบบเสร็จแล้ว
พอจะเห็นความลำบาก หรือ หายนะ หรือไม่ ?
ซึ่งมันไม่สนุกเลย ใช่ไหม ?
ทดสอบแบบ manual ง่ายกว่าไหม ?

ดังนั้นการเขียนการทดสอบเหล่านี้

ควรจะเขียนก่อนการพัฒนา หรือ แก้ไขไประหว่างการพัฒนา
และควรแยกการเขียนเป็น flow การทำงานไปด้วยเช่นกัน
เพื่อทำให้เห็นค่า acceptance criteria ของแต่ละ feature เป็นอย่างไรนั่นเอง
แล้วจะทำให้การเขียนการทดสอบมันสนุก และ มีประโยชน์ครับ