| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_ASH_ACCESSIBILITY_AUTOMATION_TEST_UTILS_H_ |
| #define CHROME_BROWSER_ASH_ACCESSIBILITY_AUTOMATION_TEST_UTILS_H_ |
| |
| #include <string> |
| |
| #include "ui/gfx/geometry/rect.h" |
| |
| namespace ash { |
| |
| // Class that provides Ash browsertests support via the Automation API. |
| class AutomationTestUtils { |
| public: |
| explicit AutomationTestUtils(const std::string& extension_id); |
| ~AutomationTestUtils(); |
| AutomationTestUtils(const AutomationTestUtils&) = delete; |
| AutomationTestUtils& operator=(const AutomationTestUtils&) = delete; |
| |
| // Should be called once the extension under test is loaded. |
| void SetUpTestSupport(); |
| |
| // Waits for the root web area with the given URL to be loaded. |
| // Note that the URL should not use backtick quotes, or if so they |
| // should be escaped, to avoid collisions with the Javascript |
| // strings. |
| void WaitForPageLoad(const std::string& url); |
| |
| // Gets the bounds of the root web area with the given URL in |
| // density-independent pixels. |
| // Note that the URL should not use backtick quotes, or if so they |
| // should be escaped, to avoid collisions with the Javascript |
| // strings. |
| gfx::Rect GetBoundsOfRootWebArea(const std::string& url); |
| |
| // Gets the value of the node with the given `class_name`. |
| std::string GetValueForNodeWithClassName(const std::string& class_name); |
| |
| // Waits for the node with the given `class_name` to have the value `value`. |
| void WaitForNodeWithClassNameAndValue(const std::string& class_name, |
| const std::string& value); |
| |
| // Gets the bounds of the automation node with the given |
| // `name` and `role` in density-independent pixels. Will wait |
| // for the node to exist if it does not exist already. |
| gfx::Rect GetNodeBoundsInRoot(const std::string& name, |
| const std::string& role); |
| |
| // Gets the bounds of the automation node with the given |
| // `class_name` in density-independent pixels. Will wait |
| // for the node to exist if it does not exist already. |
| gfx::Rect GetBoundsForNodeInRootByClassName(const std::string& class_name); |
| |
| // Sets focus on the automation node with the given `name` and `role`. |
| // Will wait for the node to exist if it does not exist already. |
| void SetFocusOnNode(const std::string& name, const std::string& role); |
| |
| // Checks if a given node exists in the tree. Does not wait if the |
| // node does not exist. |
| bool NodeExistsNoWait(const std::string& name, const std::string& role); |
| |
| // Does the default action on the node with `name` and `role`. |
| void DoDefault(const std::string& name, const std::string& role); |
| |
| // Various event waiters. This is the automation equivalent of |
| // AccessibilityNotificationWaiter. |
| |
| // Waits for a chrome.automation.EventType.TEXT_SELECTION_CHANGED event to be |
| // fired on the desktop node. |
| void WaitForTextSelectionChangedEvent(); |
| |
| // Waits for a chrome.automation.EventType.VALUE_CHANGED event to be fired |
| // on the desktop node. |
| void WaitForValueChangedEvent(); |
| |
| // Waits for a chrome.automation.EventType.CHILDREN_CHANGED event to be fired |
| // on the desktop node. |
| void WaitForChildrenChangedEvent(); |
| |
| // Waits for there to be `num` tabs in the tabstrip with regex name `name`. |
| void WaitForNumTabsWithRegexName(int num, const std::string& name); |
| |
| private: |
| std::string ExecuteScriptInExtensionPage(const std::string& script); |
| std::string extension_id_; |
| }; |
| |
| } // namespace ash |
| |
| #endif // CHROME_BROWSER_ASH_ACCESSIBILITY_AUTOMATION_TEST_UTILS_H_ |