Appium自动化测试 ------ 常见模拟操作!

Appium自动化测试中的常见模拟操作涵盖了多种用户交互行为,这些操作对于自动化测试框架来说至关重要,因为它们能够模拟真实用户的使用场景,从而验证应用程序的功能和稳定性。

以下是一些Appium自动化测试中常见的模拟操作:

基本操作

01

1、点击操作

示例:element.click() 针对元素进行点击操作

2、初始化:输入中文的处理

说明:如果连接的是虚拟机(真机无需加这两个参数,加上可能会影响手工输入),在初始化配置中增加两个参数:

  • "resetKeyboard": True, # 重置设备的输入键盘

  • "unicodeKeyboard": True # 采用unicode编码输入

    "resetKeyboard": True, # 重置设备的输入键盘"unicodeKeyboard": True # 采用unicode编码输入

3、清空和输入操作

element.clear() 针对元素进行清空操作

element.send_keys("value") 针对元素进行输入操作

输入的封装:

def input_text(element, text):    # 清除元素中的文本内容(为了保证代码的健壮性,在输入内容之前需要做一次清除操作。)    element.clear()    # 输入文本内容    element.send_keys(text)

4、获取元素的信息

获取元素的文本内容(获取的是元素text属性的内容)

element.text

获取元素的位置

element.location 返回的值是一个字典,字典中包含x和y , x和y表示的是元素在手机屏幕左上角的点的坐标

获取取元素的大小

element.size 返回值是一个字典,字典中会包含 width和height, width表示的宽度,height表示的高度

获取元素的属性值

element.get_attribute("attribute") # attribute表示的是属性名称

获取ID值时, attribute= "resourceId"

获取的是class的值 , attribute="className"

如果attribute = "name"时,获取的是text或者content-desc(text优先,找不到text值,再去找content-desc的值)

代码示例:

import timefrom appium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom appium.options.android import UiAutomator2Optionsfrom selenium.webdriver.support import expected_conditions as EC  # 定义一个初始化APP的方法def start_app(app_package, app_activity):     # 定义desired_caps 字典,初始化app的配置信息    desired_caps = {        "platformName": "android",  # 表示的是android        "platformVersion": "10",  # 表示的是设备系统的版本号        "deviceName": "DWV6R19A10002101",  # 表示的是设备的ID名称        "appPackage": app_package,  # 表示的是app的包名        "appActivity": app_activity,  # 表示的是app的界面名        "newCommandTimeout": 100000,        "noReset": True,  # 用来记住app的session,如果有登陆或做过初始化的操作,为True时,后面不需要再操作        "resetKeyboard": True,  # 重置设备的输入键盘        "unicodeKeyboard": True  # 采用unicode编码输入    }    # 创建 Appium 驱动实例    options = UiAutomator2Options().load_capabilities(desired_caps)    driver = webdriver.Remote("http://localhost:4723/wd/hub", options=options)     # 启动应用程序    driver.wait_activity(desired_caps, 5)    return driver  # 定义一个获取元素的方法def get_element_new(driver, element):    element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located(element))    return element  # 定义一个输入的封装方法def input_text(element, text):    # 清除元素中的文本内容(为了保证代码的健壮性,在输入内容之前需要做一次清除操作。)    element.clear()    # 输入文本内容    element.send_keys(text)  if __name__ == "__main__":    # 本次启动的应用程序包名和活动名(作业帮)    app_package_zyb = "com.baidu.homework"    app_activity_zyb = ".activity.index.IndexActivity"     # 启动应用程序    driver_zyb = start_app(app_package_zyb, app_activity_zyb)     # 定位到首页顶部搜索框并点击    element = (By.ID, 'com.baidu.homework:id/tv_homepage_search_item')    search_element = get_element_new(driver_zyb, element)    search_element.click()    # 定位到输入框并输入"英语学习"    element = (By.ID, 'com.baidu.homework:id/index_search_et_search_text')    input_element = get_element_new(driver_zyb, element)    input_text(input_element, '英语学习')     # 获取元素的文本内容(获取的是元素text属性的内容)    print(f"输入框元素的文本信息是: {input_element.text}")    # 获取元素的位置(返回的值是一个字典,字典中包含x和y , x和y表示的是元素在手机屏幕左上角的点的坐标)    print(f"输入框的元素的位置坐标是: {input_element.location}")    # 获取取元素的大小    print(f"输入框元素的文本信息是: {input_element.size}")    '''    获取元素的属性值    element.get_attribute("attribute")  # attribute表示的是属性名称    获取ID值时,  attribute =  "resourceId"    获取的是class的值, attribute = "className"    如果attribute = "name"    时,获取的是text或者content - desc(text优先,找不到text值,再去找content - desc的值)    '''    print(f"输入框元素的ID属性信息是: {input_element.get_attribute('resourceId')}")    print(f"输入框元素的class属性信息是: {input_element.get_attribute('className')}")    print(f"输入框元素的name属性信息是: {input_element.get_attribute('name')}")     # 关闭驱动    time.sleep(3)    print("代码执行完毕")    driver_zyb.quit()

2、获取手机操作

1、获取手机分辨率

目的:保证脚本在不同机型上都能实现滑屏的操作。

示例:driver.get_window_size()

说明:返回的值是字典类型, 包含 height 和 width 高度和宽度的值

2、获取手机截图

示例:driver.get_screenshot_as_file(filename)

说明:filename:1、路径必须手动创建 2、文件名称必须是以PNG结尾

3、设置/获取手机网络

目的:主要是为了实现视频类的app中,视频播放过程中网络切换时会有提示信息的操作。

示例:

  • driver.set_network_connection(connectionType) # connectionType 网络类型的值

  • driver.network_connection 获取手机网络

在 Appium 中,网络类型通过

driver.set_network_connection(connection type)

方法进行设置。其中,connection type参数表示需要被设置的网络类型,常用的网络类型有以下几种:

  • 飞行模式:1

  • WiFi 流量:2

  • 数据流量:4

  • 数据和 WiFi 全部打开:6

4、模拟键盘操作

示例:driver.press_keycode(键值)

说明:常用的三个键值:3 HOME键, 4 返回键 , 66 回车键

5、手机通知栏操作

示例:driver.open_notifications()

import timefrom appium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom appium.options.android import UiAutomator2Optionsfrom selenium.webdriver.support import expected_conditions as EC  # 定义一个初始化APP的方法def start_app(app_package, app_activity):     # 定义desired_caps 字典,初始化app的配置信息    desired_caps = {        "platformName": "android",  # 表示的是android        "platformVersion": "10",  # 表示的是设备系统的版本号        "deviceName": "DWV6R19A10002101",  # 表示的是设备的ID名称        "appPackage": app_package,  # 表示的是app的包名        "appActivity": app_activity,  # 表示的是app的界面名        "newCommandTimeout": 100000,        "noReset": True,  # 用来记住app的session,如果有登陆或做过初始化的操作,为True时,后面不需要再操作        "resetKeyboard": True,  # 重置设备的输入键盘        "unicodeKeyboard": True  # 采用unicode编码输入    }    # 创建 Appium 驱动实例    options = UiAutomator2Options().load_capabilities(desired_caps)    driver = webdriver.Remote("http://localhost:4723/wd/hub", options=options)     # 启动应用程序    driver.wait_activity(desired_caps, 5)    return driver  # 定义一个获取元素的方法def get_element_new(driver, element):    element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located(element))    return element  # 定义一个输入的封装方法def input_text(element, text):    # 清除元素中的文本内容(为了保证代码的健壮性,在输入内容之前需要做一次清除操作。)    element.clear()    # 输入文本内容    element.send_keys(text)  if __name__ == "__main__":    # 本次启动的应用程序包名和活动名(作业帮)    app_package_zyb = "com.baidu.homework"    app_activity_zyb = ".activity.index.IndexActivity"     # 启动应用程序    driver_zyb = start_app(app_package_zyb, app_activity_zyb)     # 获取手机分辨率    print(driver_zyb.get_window_size())    # 获取手机截图    """ 1、路径必须手动创建    2、文件名称必须是以PNG结尾"""    current_time_file = "/error"+str(time.time())  # 通过文件名拼接当前时间戳的方式构造唯一文件名    filename = "/Users/work_related/image" + current_time_file + ".png" # 需要设置正确的路径    driver_zyb.get_screenshot_as_file(filename)     # 设置手机网络为Wi-Fi,然后获取当前手机的网络类型    """飞行模式:1    WiFi 流量:2    数据流量:4    数据和 WiFi 全部打开:6"""    driver_zyb.set_network_connection(2)   # 设置手机网络为Wi-Fi    print(f"当前手机的网络类型是:{driver_zyb.network_connection}")  # 获取当前手机的网络类型     # 模拟键盘操作    '''常用的三个键值:3 HOME键, 4 返回键 ,  66 回车键'''    # 定位到首页顶部搜索框并点击    element = (By.ID, 'com.baidu.homework:id/tv_homepage_search_item')    search_element = get_element_new(driver_zyb, element)    search_element.click()    # 定位到输入框并输入"英语学习"    element = (By.ID, 'com.baidu.homework:id/index_search_et_search_text')    input_element = get_element_new(driver_zyb, element)    input_text(input_element, '英语学习')    # 返回到上一页    driver_zyb.press_keycode(4)    time.sleep(3)    # home键返回    driver_zyb.press_keycode(3)    time.sleep(3)     # 打开手机通知栏    driver_zyb.open_notifications()     # 关闭驱动    time.sleep(3)    print("代码执行完毕")    driver_zyb.quit()

下期更新滑动操作及高级手势操作,欢迎关注!

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

相关推荐
Devil枫4 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
awonw7 小时前
[java][框架]springMVC(1/2)
测试工具·postman
茶馆大橘7 小时前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel
钱钱钱端10 小时前
【压力测试】如何确定系统最大并发用户数?
自动化测试·软件测试·python·职场和发展·压力测试·postman
小袁在上班10 小时前
Python 单元测试中的 Mocking 与 Stubbing:提高测试效率的关键技术
python·单元测试·log4j
测试199811 小时前
外包干了2年,快要废了。。。
自动化测试·软件测试·python·面试·职场和发展·单元测试·压力测试
迃幵chen12 小时前
wireshark-网络分析工具
网络·测试工具·wireshark
孤蓬&听雨13 小时前
RabbitMQ自动发送消息工具(自动化测试RabbitMQ)
分布式·测试工具·自动化·rabbitmq·自动发送消息
土小帽软件测试13 小时前
jmeter基础01-2_环境准备-Mac系统安装jdk
java·测试工具·jmeter·macos·软件测试学习
安冬的码畜日常14 小时前
【The Art of Unit Testing 3_自学笔记06】3.4 + 3.5 单元测试核心技能之:函数式注入与模块化注入的解决方案简介
笔记·学习·单元测试·jest