Chromium Chronicle #21: ChromeOS End-to-End UI Automation

قسمت 21: توسط برندان هانسنکت در Mountain View، CA (مه، 2021)
قسمت های قبلی

از لحاظ تاریخی، خودکار کردن رابط کاربری ChromeOS در آزمایش‌های سرتاسر (E2E) در سراسر ناوگان دستگاه‌ها دشوار بوده است. در Tast، یک کتابخانه رابط کاربری جدید ایجاد شده است که از درخت Chrome a11y (دسترسی) برای کنترل رابط کاربری ChromeOS استفاده می کند. این کتابخانه به توسعه دهندگان این امکان را می دهد تا به راحتی آزمایش های E2E را در برابر هر سطح رابط کاربری قابل مشاهده (واسط کاربری دسکتاپ ChromeOS، برنامه های بومی، برنامه های وب، رابط کاربری مرورگر Chrome) ایجاد کنند.

این کتابخانه روشی ساده و زنجیره‌ای برای توضیح نحوه یافتن یک عنصر رابط کاربری دارد. به عنوان مثال، پوشه Downloads در برنامه Files را می توان به صورت زیر تعریف کرد:

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

هنگامی که یک گره یاب را تعریف کردید، امکان تعامل با گره از طرق مختلف وجود دارد. از کلیک‌های ساده گرفته تا انتظار برای تمرکز، کتابخانه UI به بسیاری از عملیات دسترسی پایدار می‌دهد . به عنوان مثال، برای کلیک راست روی پوشه Downloads و کلیک چپ روی دکمه کپی، می توانید بنویسید:

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 است. با چنین 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 مراجعه کنید

هنگام نوشتن این تست ها، خالی کردن درخت کروم 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 ذخیره می‌شود.

اگر سوالی دارید با گروه tast-users تماس بگیرید.