问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

快速上手App自动化测试利器:Toast原理解析及操作实例

创作时间:
作者:
@小白创作中心

快速上手App自动化测试利器:Toast原理解析及操作实例

引用
1
来源
1.
https://developer.aliyun.com/article/1463595

简介

Toast 是一种轻量级的消息提示,常常以小弹框的形式出现,一般显示 1 到 2 秒后自动消失,可以出现在屏幕上的中下任意位置。

Toast 具有以下特点:

  • 无法被点击,不同于 Dialog,永远不会获得焦点。
  • Toast 显示的时间有限,会根据用户设置的显示时间后自动消失。
  • 是系统级别的控件,属于系统 settings。

Toast 的设计理念是:尽可能不引人注意,同时还向用户显示信息,希望用户看到。

Toast 定位

Appium 在抓取 Toast 时,使用的是 uiautomator 底层,然后将 Toast 元素放入控件树中。需要注意的是,Toast 本身并不属于常规的用户界面控件,而是一种短暂的消息提示,在这个过程中,Appium 使用的是 uiautomator2。

Toast 出现的时间一般比较短,可以通过等待或者打印页面元素的方式判断是否存在,并且通过 XPath 或者 Accessibility ID 的定位方式找到 Toast 元素。在页面结构中,Toast 元素大致如下所示:

<!-- 在这里可以看到Toast消息提示框的class是android.widget.Toast,且一个页面一般只有一个 -->
<android.widget.Toast index="1" package="com.android.settings" class="android.widget.Toast" text="Clicked popup menu item Search" displayed="true" />

配置 driver 的初始化和关闭

class TestToast:
    def setup_class(self):
        caps = {
            'platformName': 'android',
            'appium:appPackage': 'io.appium.android.apis',
            'appium:appActivity': 'io.appium.android.apis.view.PopupMenu1',
            "appium:noReset": True,
            "appium:shouldTerminateApp": True
        }
        self.driver = webdriver.Remote("http://127.0.0.1:4723", options=UiAutomator2Options().load_capabilities(caps))
        self.driver.implicitly_wait(15)

    def teardown_class(self):
        self.driver.quit()

定位 toast 消息提示框

def test_get_toast(self):
    # 定位到 Make a Popup! 按钮并点击
    self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, "Make a Popup!").click()
    # 消息框类型选择search
    self.driver.find_element(AppiumBy.XPATH, "//*[@text='Search']").click()
    # 获取 Toast 弹框文本信息
    result = self.driver.find_element(AppiumBy.XPATH, "//*[contains(@text, 'Clicked popup')]").text
    assert result == "Clicked popup menu item Search"

总结

Toast 消息提示框是一个出现时间短并且无法被点击的控件,一般可以用 XPath 或者 Accessibility ID 的方式去定位。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号