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

एपिसोड 21: माउंटेन व्यू, कैलिफ़ोर्निया में ब्रेंडन हैंस्कनेच की पेशकश (मई, 2021)
पिछले एपिसोड

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

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

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

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

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

अगर आपका कोई सवाल है, तो टेस्ट करने वाले लोगों के ग्रुप से संपर्क करें.