ตอนที่ 21: โดย Brendan Hansknecht ในเมาน์เทนวิว รัฐแคลิฟอร์เนีย (พฤษภาคม 2021)
ตอนก่อนหน้า
ที่ผ่านมา การทำให้ UI ของ ChromeOS เป็นอัตโนมัติในการทดสอบจากต้นทางถึงปลายทาง (E2E) ทั้งหมด กลุ่มอุปกรณ์ส่วนใหญ่จึงเป็นเรื่องยาก ใน Tast เราได้สร้างไลบรารี UI ใหม่ ที่สร้างขึ้นซึ่งใช้โครงสร้าง A11y (การช่วยเหลือพิเศษ) ของ Chrome เพื่อควบคุม UI ของ ChromeOS ไลบรารีช่วยให้นักพัฒนาซอฟต์แวร์สร้างการทดสอบ E2E เทียบกับ แพลตฟอร์ม UI (UI บนเดสก์ท็อปของ ChromeOS, แอปที่มาพร้อมเครื่อง, เว็บแอป, UI ของเบราว์เซอร์ Chrome)
ไลบรารีมีวิธีที่เรียบง่ายและเชื่อมโยงได้เพื่ออธิบายวิธีค้นหาองค์ประกอบ UI ตัวอย่างเช่น โฟลเดอร์ดาวน์โหลดในแอป Files อาจมีลักษณะดังนี้
filesWindow := nodewith.NameStartingWith("Files")
.ClassName("RootView").Role(role.Window)
downloadsButton := nodewith.Name("Downloads")
.Role(role.TreeItem).Ancestor(filesWindow)
เมื่อคุณกำหนดตัวค้นหาโหนดแล้ว คุณสามารถโต้ตอบกับ โหนดได้หลายแบบ ตั้งแต่การคลิกง่ายๆ ไปจนถึงการรอโฟกัสนั้น UI สามารถให้สิทธิ์เข้าถึงการดำเนินการหลายอย่างได้อย่างราบรื่น เช่น ทางขวา คลิกโฟลเดอร์ดาวน์โหลด และคลิกที่ปุ่มคัดลอก คุณสามารถเขียนข้อความต่อไปนี้
ui := uiauto.New(tconn)
if err := uiauto.Combine("copy downloads",
ui.RightClick(downloadsButton),
ui.LeftClick(nodewith.Name("Copy").Role(role.MenuItem)),
)(ctx); err != nil { /* do error handling */ }
มี Wrapper ของส่วน UI ทั่วไป (การตั้งค่า, Launcher, แอปไฟล์ เป็นต้น)
ฟังก์ชัน uiauto.Run
ที่ใช้ด้านบนจะสร้างรายการการดำเนินการ ด้วยวิธีนี้
บริบท การดำเนินการจะเป็นเพียง func(context.Context) error
ด้วย
API แบบง่าย การดำเนินการประเภทอื่นๆ รวมกับการดำเนินการ UI ได้
ตัวอย่างเช่น การใช้แป้นพิมพ์นั้นง่ายมาก
if err := uiauto.Combine("do some random stuff",
ui.FocusAndWait( /* some text field */ ),
kb.TypeAction("Hello, world!"),
kb.AccelAction("Enter"),
func(ctx context.Context) error {
// My custom action!
},
)(ctx); err != nil { /* do error handling */ }
ดูคำแนะนำแบบเจาะลึกเพิ่มเติมได้ที่ Tast Codelab: Chrome UI Automation
เมื่อเขียนการทดสอบเหล่านี้ การทิ้งโค้ด Chrome a11y Tree จะมีประโยชน์มาก เพื่อแก้ไขข้อบกพร่อง เพียงเพิ่มโค้ดต่อไปนี้เพื่อดำเนินการดังกล่าว
defer faillog.DumpUITreeOnError(ctx, s.OutDir(), s.HasError, tconn)
s.Fatal("I would like to see the ui tree here")
ตอนนี้ระบบจะจัดเก็บต้นไม้ A11y พร้อมกับบันทึกการทดสอบอื่นๆ เป็น faillog/ui_tree.txt
หากมีข้อสงสัยประการใด โปรดติดต่อกลุ่มผู้ทดสอบ