Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

Selenium :: Implicit vs Explicit vs Fluent waiting ใช้งานกันอย่างไร ?

$
0
0

วันนี้มีคำถามเกี่ยวกับการใช้งาน Waiting ใน Selenium สำหรับการรอให้ element มีใน DOM (Document Object Model) สำหรับการรอให้ element มีใน DOM แต่ยังไม่แสดง (Not visible) สำหรับการรอให้ element มีใน DOM แต่ยังไม่สามารถทำอะไรได้ (Not enable, Not clickable) ซึ่งเจออย่างมากสำหรับระบบ frontend ที่พัฒนาด้วยภาษา JavaScript เป็นหลัก คำถามคือ ถ้าใช้ Selenium ในการทดสอบระดับ UI (User Interface) จะต้องทำอย่างไร ? เนื่องจากถ้าเขียนแบบปกติแล้ว test case จะพังง่ายมาก ๆ บางครั้งทดสอบผ่าน บางครั้งทดสอบผิด ทำให้ชุดการทดสอบไม่น่าเชื่อถือเลย คำตอบก็คือ ทำการ delay ไงล่ะ เช่น sleep(5000) คือรอ 5 วินาที ซึ่งเป็นวิธีการที่ง่ายที่สุดแล้ว ใคร ๆ ก็ทำ แต่ข้อเสียคือ จากตัวอย่างต้องรอไป 5 วินาที ลองคิดดูสิว่า ถ้าทำแบบนี้เยอะ ๆ เวลารวมในการทดสอบจะเป็นอย่างไร ? [gist id="d925783ea8e5f706f3bb58c3ce1ef7eb" file="0.cs"] น่าจะใช้เวลามากมาย ซึ่งไม่ค่อยดีต่อการทดสอบแน่ ๆ !! ดังนั้นมาหาวิธีอื่นกันดีกว่านะ

ใน Selenium นั้นมีการรอ (Waiting) ดังต่อไปนี้คือ

1. Implicit waiting 2. Explicit waiting 3. Fluent waiting มาดูรายละเอียดของแต่ละตัวกัน

1. Implicit waiting

เป็นการบอกให้ selenium รู้ว่า เวลาในการหา element แต่ละตัวบนหน้าจอหรือใน DOM เป็นเท่าไร ถ้าหาไม่เจอในเวลาที่กำหนดแล้ว selenium จะทำการโยน exception ออกมา ซึ่ง implicit waiting จะกำหนดก่อนการเปิด browser ขึ้นมา และจะถูกใช้งานในทุก ๆ ครั้งที่หา element ตัวอย่าง code [gist id="d925783ea8e5f706f3bb58c3ce1ef7eb" file="1.cs"]

2. Explicit waiting หรือ Smart waiting

เป็นการรอแบบมีเงื่อนไขที่กำหนด แต่ถ้าไม่เจอ element ตามเงื่อนไนในเวลาที่กำหนด ก็จะทำการโยน exception ออกมา ตัวอย่างของเงื่อนไขเช่น Element นั้นแสดงหรือไม่ ? Element นั้นซ่อนหรือไม่ ? Element นั้น click ได้หรือไม่ ? โดยที่ Explicit waiting จะทำการตรวจสอบค่าใน DOM ประมาณทุก ๆ 500 millisecond [gist id="d925783ea8e5f706f3bb58c3ce1ef7eb" file="2.cs"]

3. Fluent waiting

เป็นการรอขั้นกว่า Explicit waiting นั่นก็คือ การรอแบบมีเงื่อนไขในเวลาที่กำหนด แต่ยังไม่พอนะ เพิ่มความถี่ในการตรวจสอบอีกด้วย (Polling interval) ยังไม่พออีกนะ สามารถ ignore exception ที่เราไม่ต้องการ ทำให้การรอมีความยึดหยุ่นมากขึ้นอีกเยอะ แสดงการทำงานดังรูป จะทำการตรวจสอบทุก ๆ 250 millisecond ตัวอย่าง code [gist id="d925783ea8e5f706f3bb58c3ce1ef7eb" file="3.cs"]

ดังนั้นลองดูสิว่า ระบบที่ทำการทดสอบนั้นเป็นอย่างไร ?

ตัวอย่างเช่น ถ้า element ที่ต้องการหานั้น ต้องสามารถ click ได้ด้วย คำถามคือ คุณจะใช้ implicit waiting หรือไม่ ? ถ้าใช้สิ่งที่ตามมาก็คือ อาจจะหา element เจอ แต่ไม่สามารถ click ได้ เพราะว่า implicit waiting จะจบการทำงานเมื่อเจอ element เท่านั้น ดังนั้นวิธีการที่น่าจะดีกว่าคือ Explicit waiting และ Fluent waiting นะครับ Reference Websites http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp http://toolsqa.com/selenium-webdriver/c-sharp/advance-explicit-webdriver-waits-in-c/ http://toolsqa.com/selenium-webdriver/implicit-explicit-n-fluent-wait/

Viewing all articles
Browse latest Browse all 1997

Trending Articles