• 软件测试 app自动化03 toast元素的定位 滑屏操作 触屏操作


    1 toast元素的定位

    toast元素就是建议的消息提示框,toast显示窗口显示的时间一般3s左右。
    使用显示等待,等到toast元素出现才执行下面的操作。
    例子:考研帮app输入用户名点击【登录】按钮,弹出“邮箱账户密码不能为空”的toast元素。如下图所示:
    在这里插入图片描述

    代码如下:

    import time
    
    from appium import webdriver
    from appium.webdriver.common.mobileby import MobileBy
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    # 设置操控终端的配置参数
    desired_caps = {
        'automationName':'UiAutomator2',
        'platformName':'Android',# 指定操作系统
        'platformVersion':'7.1.2', # 指定系统版本
        'deviceName':'127.0.0.1:62001', # 指定设备名称
        'appPackage':'com.tal.kaoyan', # 被操作的应用程序包名
        'appActivity':'com.tal.kaoyan.ui.activity.SplashActivity', # 启动页面
        'noReset':'true' #true 不重置 ;flase 重置
    }
    # 发送指令给appium server
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
    
    # 定位用户名文本框
    username_ele = driver.find_element(MobileBy.ID,'com.tal.kaoyan:id/login_email_edittext')
    # 在用户名输入123
    username_ele.send_keys("123")
    # 定位【登录】按钮
    login_button = driver.find_element(MobileBy.ID,'com.tal.kaoyan:id/login_login_btn')
    # 点击【登录】按钮
    login_button.click()
    #
    toast_loc = (MobileBy.XPATH,"//*[contains(@text,'邮箱账户密码不能为空')]")
    # toast_loc = (MobileBy.XPATH,'//*[ocntains(@text,"邮箱账户密码不能为空")]')
    # print(1)
    # 显示等待 修改轮询时间为0.01s
    WebDriverWait(driver,15,0.01).until(EC.presence_of_element_located(toast_loc))
    time.sleep(3)
    # 获取toast元素的文本内容
    toast_ele_text = driver.find_element(*toast_loc).text
    print("获取toast元素的文本内容",toast_ele_text)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    分析上述代码:
    toast元素使用XPTH定位。
    toast元素使用显示等待,轮询的时间设置为0.01s。

    2 滑屏操作

    滑屏操作就是页面的切换或页面王某一个方面移动。

    2.1 坐标

    以左上角为原点,水平方向为X轴,竖直方向为Y轴,如下图所示:
    在这里插入图片描述

    2.2 滑屏分类

    左滑:Y轴不变,X轴从大变小
    右滑:Y轴不变,X轴从小到大
    上滑:X轴不变,Y轴从大到小
    下滑:X轴不变,Y轴从小到大

    例子:考研帮app欢迎页面,需要左滑2次才能进入登录页面。
    刚刚安装完考研帮app,点击app,需要点击【取消】按钮,如下图所示:
    在这里插入图片描述

    进入欢迎页面,需要左滑两次,如下图所示:
    在这里插入图片描述
    编写自动化脚本,如下代码所示:

    from appium import webdriver
    from appium.webdriver.common.mobileby import MobileBy
    desired_caps = {
        'automationName':'UiAutomator2',
        'platformName':'Android',# 指定操作系统
        'platformVersion':'7.1.2', # 指定系统版本
        'deviceName':'127.0.0.1:62001', # 指定设备名称
        'appPackage':'com.tal.kaoyan', # 被操作的应用程序包名
        'appActivity':'com.tal.kaoyan.ui.activity.SplashActivity', # 启动页面
        'noReset':'true' #true 不重置 ;flase 重置
    }
    # 发送指令给appium server
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
    # 点击【取消】按钮
    driver.find_element(MobileBy.ID,"android:id/button2").click()
    # 获取整个页面的大小
    size = driver.get_window_size()
    # 水平方向的大小
    x = size["width"]
    # 垂直方向的大小
    y = size["height"]
    for i in range(2):
        driver.swipe(start_x=x*0.9,end_x=x*0.2,start_y=y*0.8,end_y=y*0.8,duration = 3000)
    print("实现左滑两次")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    分析上述代码:
    使用get_window_size()获取页面大小。
    使用swipe()方法实现滑动。
    实现页面左滑起始位置是在右下方,即x0.9,y0.8;结束位置实在左下方,即x0.2,y0.8。

    3 触屏操作

    3.1 查看元素坐标

    进入设置–>开发者选项目录,打开指针位置,如下图所示:
    在这里插入图片描述

    3.2 例子

    随手记app中的手势密码保护。
    第一,进入到手势密码保护页面。
    第二,触屏动作。先按压(press)某个元素,再移动(move_to)到其他元素,然后释放(release),最后调用preform()方法。
    第三,要确定每个圆点的坐标,如下图所示:
    在这里插入图片描述

    自动化脚本如下:

    import time
    
    from appium import webdriver
    from appium.webdriver.common.mobileby import MobileBy
    from appium.webdriver.common.touch_action import TouchAction
    desired_caps = {
        'automationName':'UiAutomator2',
        'platformName':'Android',# 指定操作系统
        'platformVersion':'7.1.2', # 指定系统版本
        'deviceName':'127.0.0.1:62001', # 指定设备名称
        'appPackage':'com.mymoney', # 被操作的应用程序包名
        'appActivity':'com.mymoney.biz.splash.SplashScreenActivity', # 启动页面
        'noReset':'true' #true 不重置 ;flase 重置
    }
    # 发送指令给appium server
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
    time.sleep(5)
    # 我的页面
    my_but = driver.find_element(MobileBy.ID,'com.mymoney:id/account_centre_iv')
    my_but.click()
    time.sleep(2)
    # 密码保护
    pass_pro_list = driver.find_element(MobileBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/androidx.viewpager.widget.ViewPager/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout/android.widget.ScrollView/android.widget.LinearLayout/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout[7]/android.widget.LinearLayout')
    pass_pro_list.click()
    time.sleep(2)
    #点击手势密码
    driver.find_element(MobileBy.ANDROID_UIAUTOMATOR,'new UiSelector().text("手势密码")').click()
    time.sleep(2)
    
    for i in range(2):
        TouchAction(driver).press(x=250,y=386).wait(1000).move_to(x=447,y=386).wait(1000)\
            .move_to(x=647,y=386).wait(1000).move_to(x=647,y=574).wait(1000).move_to(x=647,y=774).wait(1000).release().perform()
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    小结

    toast元素使用显示等待确认元素已经出现了。
    滑屏操作关键在于确定开始位置与结束位置的坐标特点。
    触屏操作是一连贯的动作,按压-移动-释放,最后调用perform()方法。

  • 相关阅读:
    Qt开发经验小技巧231-235
    线性代数学习笔记9-3:相似矩阵、对角矩阵是特殊的相似矩阵、若尔当标准型Jordan form
    pl/sql之各参数详解(“箱子模型“)
    奶茶行业竞争加剧,奈雪全自动化制作,亲身示范如何“内卷”
    为什么以太坊的合并(The Merge)非常重要?及误解和担忧大解析
    化合物的四种基本反应与氧化还原反应;化合物极性与非极性;亲核反应与亲电反应
    手工架设安装教程:
    旧华硕电脑开机非常慢 电脑开机黑屏很久才显示品牌logo导致整体开机速度非常的慢怎么办
    数据库可视化工具分享 (DBeaver)
    Ansible stat模块 stat模块 – 检索文件或文件系统状态
  • 原文地址:https://blog.csdn.net/qq_45059457/article/details/126905090