The Chromium Chronicle #21: การทำงานอัตโนมัติของ UI จากต้นทางถึงปลายทางใน ChromeOS

ตอนที่ 21: โดย Brendan Hansknecht ใน Mountain View แคลิฟอร์เนีย (พฤษภาคม 2021)
ตอนก่อนหน้า

ที่ผ่านมา การทำให้ UI ของ ChromeOS เป็นแบบอัตโนมัติในการทดสอบแบบเอนด์ทูเอนด์ (E2E) ทั่วทั้งกลุ่มอุปกรณ์นั้นเป็นเรื่องยาก ใน Tast มีการสร้างไลบรารี UI ใหม่ ที่ใช้โครงสร้าง Chrome a11y (การช่วยเหลือพิเศษ) เพื่อควบคุม 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 */ }

โดยจะมีแถบล้อมรอบพื้นที่ UI ทั่วไปอยู่แล้ว (การตั้งค่า, Launcher, แอป Files ฯลฯ)

ฟังก์ชัน 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: การทำงานอัตโนมัติของ UI ของ Chrome

เมื่อเขียนการทดสอบเหล่านี้ ข้อมูลที่เป็นประโยชน์มากคือข้อมูลโค้ดที่สร้างจากทรี a11y ของ Chrome เพื่อแก้ไขข้อบกพร่อง เพียงเพิ่มโค้ดต่อไปนี้

defer faillog.DumpUITreeOnError(ctx, s.OutDir(), s.HasError, tconn)
s.Fatal("I would like to see the ui tree here")

ตอนนี้ ระบบจะจัดเก็บโครงสร้าง a11y ไว้กับบันทึก tast อื่นๆ เป็น faillog/ui_tree.txt

หากมีข้อสงสัยใดๆ โปรดติดต่อกลุ่มผู้ใช้ผู้ทดสอบ