faature-image-selenium-advance-interaction
faature-image-selenium-advance-interaction

หลังจากเรียนรู้การเขียนโปรแกรมเพื่อทํา Automation กันมาซักพัก เราก็มาเรียนรู้วิธีการ Interact กับ UI ในรูปแบบ Advance กันบ้าง

เพราะปกติแล้วเวลาเราเริ่มกับ Selenium ใหม่ๆเราก็จะไปยึดกับพวก deafult function ของมันที่มีให้เช่น พวก click element หรือ drag and drop ซึ่งจริงๆถ้าเราไม่ได้ใช้อะไร Advance เกินไป การใช้แค่พวก click element ก็ถือว่าพอสําหรับการทําเทสแล้ว

แต่ถ้าสมมุติต้องการที่จะ interact กับมันในแบบที่มีความลึกซึ้งยิ่งเข้าไปอีก เราก็สามารถทําได้ เช่น mouse movements, mouse button action,key press หรือ context menu ที่เรา interaction อยู่ เราก็สามารถทําได้โดยการใช้ ตัว Selenium2Library + ActionChains + TouchChains ที่ Robot Framework เองก็ใช้อยู่เหมือนกัน (ซึ่งตัวนี้มันจะแตกต่างอยู่นิดหน่อยถ้าเคยลองเขียนพวก Java + Selenium มาก่อน)

ซึ่งทั้งหมดที่พูดมานั้นก็คือเจ้า 2 ตัวนี้นั่นเอง ActionChains และ TouchChains ซึ่งเราสามารถเข้ามาดูรายละเอียดที่นี้เลย ActionChains กับ TouchChains

เจ้าสองตัวนี้และเป็นตัวที่จะช่วยให้เรา Automate Low-Level interactions ได้ โดยการทํางานของมันเนี้ยถูกสร้างออกด้วย Builder Pattern ถ้าอ่านวิกิมันยากไป อธิบายง่ายๆคือ มันจะทํางานต่อกันเป็นทอดๆๆตามลําดับไป เช่น เราเขียนโค้ดสั่งให้มัน กดปุ่ม Esc แล้วค่อยเลื่อนเม้าส์ไปกดปิดหน้าต่าง มันก็จะทําตามลําดับขั้นตอนของมันไป ไม่มีการข้ามหรือทําอย่างอื่นก่อน (Chain of Actions)

วิธีการใช้งานกับ RobotFramework

เดาว่าเขียน Library กันเป็นอยู่แล้ว เพราะฉะนั้นก็แค่ทําตาม steps ข้างล่างนี้ก็จะสามารถเล่นได้เลย ซึ่งในนี้จะรวมเอกสารที่จําเป็นไว้ให้หมดแล้วล่ะ เพื่อที่จะได้เอาไปใช้งานได้ง่ายๆเลย ไม่ต้องมาค้นเอง

steps ย่อๆก็จะเป็น

  1. สร้างไฟล์ Python แยกไว้เพื่อทําเป็น Library
  2. Import Libray ที่จําเป็นเข้ามาในไฟล์ Python นั้น เช่น action_chains หรือ touch_actions

    example-of-import-external-class
    example-of-import-external-class
  3. สร้าง function ขึ้นมาแล้วก็เรียก instance ของ Selenium2Libray มา
    example-of-actionchain-middle-element
    example-of-actionchain-middle-element

    แล้วทีนี้สมมุติถ้าเราต้องการจะ เลื่อนเม้าส์ไปตรงกลางของ element นั้นๆ เราก็สามารถสร้าง ActionChains ได้ โดยการนําเอา library เข้ามาในโปรเจคและหาตําแหน่งมันก่อน และสร้าง ActionChains ตามตัวอย่างข้างบน

  4. Build interaction
  5. Perform action

ที่เหลือก็ค่อนข้างคล้ายๆกันหมดแล้วละ อยู่ที่ว่าเราจะไปดัดแปลงยังไงให้เข้ากับ interaction ที่เราต้องการทํา

ซึ่งบางทีเราจะต้องใช้ attribute ของ Web Element (Selenium) นั้นๆในการคํานวณทํา Interact แบบพิเศษต่างๆด้วย ซึ่งสามารถดูได้จากนี้ WebElement Attribute

ดูเหมือนง่ายๆไม่มีไร แต่เอกสารบางตัวหายากนิดนึง แต่รวบรวมไว้ใน References ให้แล้ว รวมถึงถ้าอยากจะใช้ instance ของ Selenium2Libray ก็ต้องไปไล่ใน github ดูว่า เราสามารถทําไรได้บ้าง แต่หลักๆก็จะไม่พ้น

  • _current_browser()
  • _element_find()

หลังจากนั้นก็ไปใช้ method ที่มีอยู่แล้วของ ActionChains กับ TouchChains ได้เลย

References

  • ทั้งหมดของ Selenium Python Webdriver API
  • document ของ Selenium Python Bindings
  • RobotFramework Public API for writing your own tools against Robot Framework (example: Built-in)
  • ส่วน document ของการเรียกใช้ selenium2library ที่เราทําการ get instance มาแล้วดูได้จากที่นี้เลย selenium2library documentation (รับรองเปิดเข้าไปมี งง 555 ไล่เอาจาก source code น่ะ เพราะไม่มี document สําหรับ selenium2library ที่หาเจอเลย ใครเจอบอกด้วยล่ะกันน้า)

Leave a Reply

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.