Chromium Chronicle #21: ChromeOS का एंड-टू-एंड यूज़र इंटरफ़ेस (यूआई) ऑटोमेशन

एपिसोड 21: Mountain View, CA से ब्रेंडन हैनस्कनेख्त ने (मई 2021)
पिछले एपिसोड

अब तक, सभी डिवाइसों पर एंड-टू-एंड (E2E) टेस्ट में ChromeOS यूज़र इंटरफ़ेस (यूआई) को ऑटोमेट करना मुश्किल रहा है. Tast में, एक नई यूज़र इंटरफ़ेस (यूआई) लाइब्रेरी बनाई गई है. यह लाइब्रेरी, ChromeOS यूज़र इंटरफ़ेस (यूआई) को कंट्रोल करने के लिए, Chrome a11y (सुलभता) ट्री का इस्तेमाल करती है. इस लाइब्रेरी की मदद से डेवलपर, दिखने वाले किसी भी यूज़र इंटरफ़ेस (यूआई) प्लैटफ़ॉर्म (ChromeOS डेस्कटॉप यूज़र इंटरफ़ेस (यूआई), नेटिव ऐप्लिकेशन, वेब ऐप्लिकेशन, Chrome ब्राउज़र यूआई) के लिए आसानी से E2E टेस्ट बना सकते हैं.

लाइब्रेरी में, यूज़र इंटरफ़ेस (यूआई) एलिमेंट को ढूंढने का तरीका बताने का आसान और चेन वाला तरीका मौजूद है. उदाहरण के लिए, Files ऐप्लिकेशन में डाउनलोड फ़ोल्डर को इस तरह से परिभाषित किया जा सकता है:

filesWindow := nodewith.NameStartingWith("Files")
  .ClassName("RootView").Role(role.Window)
downloadsButton := nodewith.Name("Downloads")
  .Role(role.TreeItem).Ancestor(filesWindow)

नोड फ़ाइंडर तय करने के बाद, नोड से कई तरह से इंटरैक्ट किया जा सकता है. आसान क्लिक से लेकर फ़ोकस के लिए इंतज़ार करने तक, यूज़र इंटरफ़ेस (यूआई) लाइब्रेरी से कई कार्रवाइयों के लिए स्थायी ऐक्सेस मिलता है. उदाहरण के लिए, डाउनलोड फ़ोल्डर पर राइट क्लिक करने और कॉपी बटन पर बायां क्लिक करने के लिए, यह लिखा जा सकता है:

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 */ }

सामान्य यूज़र इंटरफ़ेस (यूआई) वाली जगहों के आस-पास रैपर मौजूद होते हैं (सेटिंग, लॉन्चर, फ़ाइल ऐप्लिकेशन वगैरह).

ऊपर इस्तेमाल किया गया uiauto.Run फ़ंक्शन, कार्रवाइयों की एक सूची लेता है. इस संदर्भ में, कार्रवाई सिर्फ़ एक func(context.Context) error है. इस आसान एपीआई की मदद से, यूज़र इंटरफ़ेस (यूआई) कार्रवाइयों के साथ दूसरी तरह की कार्रवाइयों को भी शामिल किया जा सकता है. उदाहरण के लिए, कीबोर्ड का इस्तेमाल करना उतना ही आसान है:

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 */ }

ज़्यादा जानकारी वाली गाइड के लिए, टेस्ट कोडलैब (कोड बनाना सीखना): Chrome यूज़र इंटरफ़ेस (यूआई) ऑटोमेशन देखें

इन टेस्ट को लिखते समय, डीबग करने के लिए Chrome a11y ट्री को डंप करना बहुत मददगार होता है. ऐसा करने के लिए बस नीचे दिया गया कोड जोड़ें:

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 के तौर पर सेव किया जाएगा

अगर आपका कोई सवाल है, तो पसंद-उपयोगकर्ताओं के ग्रुप से संपर्क करें.