จากคราวที่แล้วเรามีใช้งาน NSP locator ไปแล้ว แต่จะเห็นจากตัวอย่าง NSP ไม่เก่งในเรื่องการหา locator แบบเป็น Hierarchy หรือแบบเดียวกับ XPath ซึ่ง iOS ก็มีทางออกที่สองให้คือใช้ Chain locator แทน โดยเจ้า Chain ยังไม่มี Document บน Appium Document ของ Robot Framework ครับ แต่ถ้าเราลองคุ้ยๆดูจะเห็นว่า Appium library 1.5 ของ Robot มีเจ้า locator นี้ติดมาแล้วครับ
File Robot Framework Appium Element Finder
มาดู Chain Syntax กันครับ
- Indirect Search และ Element name
Indirect Search เราจะใช้สัญลักษณ์ **/ เพื่อระบุว่าหาจากชั้นไหนก็ได้ที่มี Element ที่ต้องการ
การค้นหาจาก ชื่อ Element โดยจะหา Element ทั้งหมดที่ชื่อ XCUIElementTypeButton
1chain=**/XCUIElementTypeButton - Index
สามารถเลือก Element จาก index ได้โดยใช้สัญลักษณ์ [n] ครับ โดย n เริ่มนับจาก 1 เหมือน XPath ครับ และถ้าอยากหาตัวสุดท้ายสามารถใช้ [-1] ได้เลย
1chain=**/XCUIElementTypeButton[1] - Attribute
Attribute ก็เป็นเครื่องมือที่ช่วยให้การค้นหาระบุชี้ชัดได้มากขึ้น ทำให้เราบีบการค้นหาให้แคบลงอีก จากตัวอย่างจะเป็นการค้นหา ปุ่ม ซึ่งมีชื่อว่า btnLogin
1chain=**/XCUIElementTypeButton[`name == "btnLogin"`]
นอกจากนี้เรายังสามารถใส่ condition อื่นๆได้อีกเช่น- Contain
1[`name CONTAINS "blabla"`] - Or condition
1[`value == "bla1" OR label == "bla2"`] - And condition
1[`value == "bla1" AND label == "bla2"`]
- Contain
- Direct Child Search
จะเป็นการหาแบบเป็นขั้นต่อๆกันครับ เช่น
1chain=XCUIElementTypeWindow/XCUIElementTypeButton[3]
มี Syntax อื่นๆ อีกเพียบลองดู References จาก link ด้านล่างครับ
https://github.com/facebookarchive/WebDriverAgent/wiki/Class-Chain-Queries-Construction-Rules