iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python之Appium 2自动化测试(Android篇)
  • 475
分享到

Python之Appium 2自动化测试(Android篇)

pythonappiumandroid 2023-12-23 18:12:54 475人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

一、环境搭建及准备工作 Appium 2 环境搭建 请参考另一篇文章: Windows系统搭建Appium 2 和 Appium Inspector 环境 安装 Appium-python-Client,版本要求3.0及以上 和 selen

一、环境搭建及准备工作

Appium 2 环境搭建

安装 Appium-python-Client,版本要求3.0及以上selenium 版本要求4.0及以上

pip install Appium-Python-ClientVersion: 3.1.0pip install seleniumVersion: 4.15.2

手机连接电脑,并在dos窗口启动 Appium Server
在这里插入图片描述

演示环境APP软件:ES文件浏览器、随手记

查看元素唯一方法

  • 复制id,点击搜索图标
    在这里插入图片描述
  • 选择id,粘贴内容,点击Search,查看

在这里插入图片描述
在这里插入图片描述


二、编写自动化脚本

from appium import WEBdriverfrom appium.options.common.base import AppiumOptionsfrom appium.webdriver.common.appiumby import AppiumBydef create_driver():    """    AppiumOptions():        用于配置 Appium 测试的通用选项,可用于 AndroidiOS 平台        可以设置通用的测试选项,如平台名称、版本、自动化引擎等    """    # 创建 AppiumOptions 对象    options = AppiumOptions()    # 加载测试的配置选项和参数(Capabilities配置)    options.load_capabilities({        # 自动化测试的引擎        "automationName": "uiautomator2",        # 平台名称        "platfORMName": "Android",        # 系统版本        "platformVersion": "11",        # 设备的名称        "deviceName": "RK3399",        # 待测试应用的包名        "appPackage": "com.estrongs.android.pop",        # 待测试应用的活动(Activity)名称        "appActivity": ".app.openscreenad.NewSplashActivity",        # 设置使用 Unicode 编码方式发送字符串到设备的键盘        "unicodeKeyboard": "true",        # 设置重置设备的软键盘状态并隐藏键盘        "resTKEyboard": "true"    })    # Appium服务器地址端口,本地用Http://127.0.0.1:4723    appium_host = 'http://192.168.100.15:4723'    return webdriver.Remote(appium_host, options=options)def close_driver(driver):    """关闭驱动"""    if driver:        driver.quit()if __name__ == "__main__":    driver = create_driver()    # 设置隐式等待时间为10秒    driver.implicitly_wait(10)    # 元素定位代码...    # 关闭驱动    close_driver(driver)

三、元素定位方式

1、根据id定位

# ID 定位方法el = driver.find_element(AppiumBy.ID, "com.estrongs.android.pop:id/txt_grant")el.click()

在这里插入图片描述

2、根据xpath定位

# xpath 方法el1 = driver.find_element(AppiumBy.XPATH, '//android.widget.TextView[@resource-id="android:id/title" and @text="密码设置"]')el1.click()# xpath 简写方法el2 = driver.find_element(AppiumBy.XPATH, '//*[@text="密码设置"]')el2.click()

在这里插入图片描述

3、根据class定位 (建议少用,重复名称较多)

# 使用class name定位el3 = driver.find_element(AppiumBy.CLASS_NAME, "android.widget.ImageButton")el3.click()

在这里插入图片描述

4、根据Accessibility ID定位

# 使用Accessibility ID定位el4 = driver.find_element(AppiumBy.ACCESSIBILITY_ID, '转到上一层级')el4.click()

在这里插入图片描述

5、根据UIAutomator定位

  • UIAutomator元素定位是 Android 系统原生支持的定位方式,虽然与 xpath 类似,但比它更加好用,且支持元素全部属性定位.定位原理是通过android 自带的android uiautomator的类库去查找元素。 Appium元素定位方法其实也是基于Uiautomator来进行封装的。
# 使用UIAutomator定位元素 (id定位)el5 = driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().resourceId("com.estrongs.android.pop:id/txt_grant")')el5.click()# 使用UIAutomator定位元素 (test定位)el6 = driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("搜索")')el6.click()# 使用UIAutomator定位元素 (class name定位)el7 = driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.ImageButton")')el7.click()

6、相同元素定位
在这里插入图片描述
在这里插入图片描述
如上图,三个输入框的class属性都是一样的,如果要根据class属性分别来获取这三个值,就使用driver.find_elements方式。代码实现如下(注意 driver.find_elements 多个 s):

# 使用class name和索引定位,查找的元素列表中的特定元素el8 = driver.find_elements(AppiumBy.CLASS_NAME, "android.widget.EditText")# 输入邮箱el8[0].send_keys("123456789@qq.com")# 输入验证码el8[1].send_keys("654321")# 输入密码el8[2].send_keys("123456")

四、点击 - 输入 - 清空操作

# 运行ES文件浏览器软件,并点击同意el = driver.find_element(AppiumBy.ID, "com.estrongs.android.pop:id/txt_grant")el.click()# 单机操作(相当于鼠标点击):click()el1 = driver.find_element(AppiumBy.XPATH, '//*[@text="搜索"]')el1.click()# 输入:send_keys()el2 = driver.find_element(AppiumBy.CLASS_NAME, "android.widget.EditText")el2.send_keys("Android自动化")# 清空: clear()el3 = driver.find_element(AppiumBy.CLASS_NAME, "android.widget.EditText")el3.clear()

五、swipe()方法模拟滑动操作

  • 滑动操作是模拟用户在应用程序界面上进行手势滑动的操作。在Appium中,可以使用swipe()方法来执行滑动操作。它需要指定起始点和终止点的坐标,并且可以设置滑动的持续时间。滑动操作通常用于测试应用程序界面的可滚动性、页面切换和内容展示等功能。
  • swipe(起始横坐标,起始纵坐标,目标横坐标,目标纵坐标,时间)
  • 时间:指滑动使用多长时间,单位为毫秒,可为空(去掉duration=****)

简单示例:

# 获取屏幕宽度和高度width = driver.get_window_size()["width"]height = driver.get_window_size()["height"]# 从下向上滑动屏幕driver.swipe(width*0.5, height*0.9, width*0.5, height*0.1, duration=500)# 从上向下滑动屏幕driver.swipe(width*0.5, height*0.1, width*0.5, height*0.9, duration=500)# 从右向左滑动屏幕driver.swipe(width*0.9, height*0.5, width*0.1, height*0.5, duration=500)# 从左向右滑动屏幕driver.swipe(width*0.1, height*0.5, width*0.9, height*0.5, duration=500)

封装示例:

class ScreenSlider():    def __init__(self, driver):        """初始化屏幕滑动器"""        self.driver = driver    def get_screen_size(self):        """获取屏幕尺寸"""        screen_size = self.driver.get_window_size()        return screen_size["width"], screen_size["height"]    def swipe_up(self, duration=500):        """从下向上滑动屏幕 x轴不变,y轴变动"""        width, height = self.get_screen_size()        self.driver.swipe(width*0.5, height*0.9, width*0.5, height*0.1, duration=duration)    def swipe_down(self, duration=500):        """从上向下滑动屏幕 x轴不变,y轴变动"""        width, height = self.get_screen_size()        self.driver.swipe(width*0.5, height*0.1, width*0.5, height*0.9, duration=duration)    def swipe_left(self, duration=500):        """从右向左滑动屏幕 x轴变动,y轴不变"""        width, height = self.get_screen_size()        self.driver.swipe(width*0.9, height*0.5, width*0.1, height*0.5, duration=duration)    def swipe_right(self, duration=500):        """从左向右滑动屏幕 x轴变动,y轴不变"""        width, height = self.get_screen_size()        self.driver.swipe(width*0.1, height*0.5, width*0.9, height*0.5, duration=duration)

六、连续滑动方法

  swipe滑动操作,一般是两点之间的滑动,而实际使用过程中用户可能要进行一些多点连续滑动操作。如手势密码操作,切西瓜等场景。那么在Appium2中该如何模拟这类操作呢?

  • W3C WebDriver actions
      Appium2进行了一次重大更新,其中最重要的变化是弃用了MultiAction和TouchAction,并全面采用了W3C WebDriver actions。过去,MultiAction和TouchAction被广泛用于模拟复杂手势和多点触控操作,但现在W3C WebDriver actions成为了首选解决方案。这个决策带来了更统一、标准化的操作方式,同时也提供了更好的跨平台兼容性和稳定性。

方法:

# 导入所需模块,用于执行 W3C actions 操作from selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.common.actions import interactionfrom selenium.webdriver.common.actions.action_builder import ActionBuilderfrom selenium.webdriver.common.actions.pointer_input import PointerInput# 创建 ActionChains 对象actions = ActionChains(driver)# 将 w3c_actions 属性替换为使用触摸(touch)指针交互的 ActionBuilder 对象actions.w3c_actions = ActionBuilder(driver, mouse=PointerInput(interaction.POINTER_TOUCH, "touch"))# 移动到坐标 (start_x, start_y) 的位置actions.w3c_actions.pointer_action.move_to_location(start_x, start_y)# 执行指针按下操作(类似按下鼠标左键)actions.w3c_actions.pointer_action.pointer_down()# 暂停1秒钟actions.w3c_actions.pointer_action.pause(1)# 移动到坐标 (end_x, end_y) 的位置actions.w3c_actions.pointer_action.move_to_location(end_x, end_y)# 执行指针释放操作(类似松开鼠标左键)actions.w3c_actions.pointer_action.release()# 执行动作actions.perform()
  • 以下用随手记APP操作演示

方法一、在Appium Inspector获取坐标
在这里插入图片描述

方法二、在设备端开发者选项中开启指针位置获取坐标
在这里插入图片描述

from appium import webdriverfrom appium.options.common.base import AppiumOptionsfrom appium.webdriver.common.appiumby import AppiumByfrom time import sleep# For W3C actionsfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.common.actions import interactionfrom selenium.webdriver.common.actions.action_builder import ActionBuilderfrom selenium.webdriver.common.actions.pointer_input import PointerInputdef create_driver():    """连接Android手机,并运行随手记APP"""    options = AppiumOptions()    options.load_capabilities({        "automationName": "uiautomator2",        "platformName": "Android",        "platformVersion": "11",        "deviceName": "RK3399",        "appPackage": "com.mymoney",        "appActivity": ".biz.home.HomeActivity",        "unicodeKeyboard": "true",        "restKeyboard": "true"    })    appium_host = 'http://127.0.0.1:4723'    return webdriver.Remote(appium_host, options=options)def close_driver(driver):    """关闭驱动"""    if driver:        driver.quit()if __name__ == "__main__":    driver = create_driver()    # 设置隐式等待时间为10秒    driver.implicitly_wait(10)    actions = ActionChains(driver)    actions.w3c_actions = ActionBuilder(        driver, mouse=PointerInput(interaction.POINTER_TOUCH, "touch"))    # 定位到"我的",点击    driver.find_element(AppiumBy.ID, "com.mymoney:id/ll_user").click()    # 从下往上滑动页面    actions.w3c_actions.pointer_action.move_to_location(950, 792)    actions.w3c_actions.pointer_action.pointer_down()    actions.w3c_actions.pointer_action.move_to_location(954, 432)    actions.w3c_actions.pointer_action.release()    actions.perform()    # 定位到"设置",点击    driver.find_element(AppiumBy.XPATH, '//*[@text="设置"]').click()    # 定位到"密码保护",点击    driver.find_element(AppiumBy.ID, 'com.mymoney:id/setting_right_tip').click()    sleep(0.5)    # 启用密码保护    driver.find_element(AppiumBy.ID, 'com.mymoney:id/right_switch').click()    # 定位到"手势密码",点击    driver.find_element(AppiumBy.ID, 'com.mymoney:id/iv_gesture_psd').click()    # 设置手势密码,需要设置两次    for i in range(2):        actions.w3c_actions.pointer_action.move_to_location(806, 284)        actions.w3c_actions.pointer_action.pointer_down()        actions.w3c_actions.pointer_action.move_to_location(1107, 284)        actions.w3c_actions.pointer_action.pause(1)        actions.w3c_actions.pointer_action.move_to_location(806, 594)        actions.w3c_actions.pointer_action.pause(1)        actions.w3c_actions.pointer_action.move_to_location(1103, 585)        actions.w3c_actions.pointer_action.pause(1)        actions.w3c_actions.pointer_action.release()        actions.perform()        # 等待2秒,再次确认密码        sleep(2)    close_driver(driver)

来源地址:https://blog.csdn.net/qq_45664055/article/details/134712607

--结束END--

本文标题: Python之Appium 2自动化测试(Android篇)

本文链接: https://www.lsjlt.com/news/551728.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python之Appium 2自动化测试(Android篇)
    一、环境搭建及准备工作 Appium 2 环境搭建 请参考另一篇文章: Windows系统搭建Appium 2 和 Appium Inspector 环境 安装 Appium-Python-Client,版本要求3.0及以上 和 Selen...
    99+
    2023-12-23
    python appium android
  • 【python+appium】自动化测试
    python+appium自动化测试系列就要告一段落了,本篇博客咱们做个小结。 首先想要说明一下,APP自动化测试可能很多公司不用,但也是大部分自动化测试工程师、高级测试工程师岗位招聘信息上要求的,所以为了更好的待遇,我们还是需要花时间去掌...
    99+
    2023-08-31
    python appium 开发语言 postman jmeter
  • 一篇文章带你入门Appium自动化测试
    Appium工具自动化测试 前言一、appium支持三种类型的应用二、设计原理三、Appium的实际应用三、搭建测试环境1.安装JDK2.安装Android SDK3.安装对应的Python Client4.安装appium-de...
    99+
    2023-12-23
    android python 功能测试 测试工具
  • 怎么用Python+Appium做自动化测试
    这篇文章主要讲解了“怎么用Python+Appium做自动化测试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python+Appium做自动化测试”吧!目录一、环境准备二、真机测试一...
    99+
    2023-06-20
  • python之自动化测试
    功能: 在ubuntu上面,通过shell脚本打开 VirtualBox(windows xp),并调用XP里面的python脚本,来打开一些windows上面的软件,并做模拟操作,完成之后关闭VirtualBox(windows xp)...
    99+
    2023-01-31
    测试 python
  • Android+Appium自动化测试环境搭建及实操
    1、Appium简介1.1 Appium概念1.2 Appium工作原理 2、Appium Server环境搭建2.1 Java JDK2.1.1 下载JDK2.1.2 运行exe安装...
    99+
    2023-10-24
    appium android 自动化测试 环境搭建 调试
  • 如何使用appium做Android手机自动化测试
    这篇文章给大家介绍如何使用appium做Android手机自动化测试,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Appium这个听起来既生疏也熟悉的自动化测试工具,比起原生的UiAutomator可能是异常的不起眼,...
    99+
    2023-06-05
  • Appium+Python+pytest自动化测试框架的实战
    菜鸟一枚,写的不好勿喷,大家一起学习 先简单介绍一下目录,再贴一些代码,代码里有注释 Basic目录下写的是一些公共的方法,Data目录下写的是测试数据,image存的是测试失败...
    99+
    2024-04-02
  • 如何使用python+appium实现自动化测试
    这篇文章主要为大家展示了“如何使用python+appium实现自动化测试”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用python+appium实现自动化测试”这篇文章吧。1.什么是A...
    99+
    2023-06-22
  • 一文详解!appium自动化测试
    目录 前言: Appinum前置知识 Andriod SDK 元素获取—UI Automator adb命令实践 adb常用命令 小结 Package与Activity Activity页面布局元素 monkey简介 monkey事件 操作...
    99+
    2023-09-01
    adb android web自动化测试 开发语言 数据库
  • python web自动化测试,入门篇
    自动化测试入门篇 本次实现自动化是用python语言进行实现,所以需要有一点python基础,其实python还是比较简单入门的,下面开始。 安装python,我安装的是最新版本的python,传送门https://www.python....
    99+
    2023-01-31
    测试 入门篇 python
  • python+appium实现自动化测试的示例代码
    目录1.什么是Appium2.启动一个app自动化程序的步骤3.appium服务介绍4. appium客户端使用5.adb的使用 6.Appium启动过程分析1....
    99+
    2024-04-02
  • 〖Python接口自动化测试实战篇④〗- 接口自动化测试详解
    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我。推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订...
    99+
    2023-09-04
    自动化 python自动化测试实战 自动化测试 接口测试 接口自动化测试
  • python+appium自动化测试之如何控制App的启动和退出
    目录一、启动app二、退出App三、appium实现原理四、如何获取deviceName?五、如何获取apk的appActivity和appPackage?由于本人使用的是Andro...
    99+
    2024-04-02
  • 自动化测试——selenium(完结篇)
    自动化测试——selenium(完结篇) 文章目录 自动化测试——selenium(完结篇)一、元素操作方法二、浏览器操作方法三、获取元素信息操作四、鼠标操作 (需要实例化鼠标对象)4.1 鼠...
    99+
    2023-08-31
    python selenium
  • python3自动化实践2之第一个测试脚
    场景设计: 1. 操作案例:https://www.baidu.com  2. 测试场景     打开Baidu     输入selenium     点击搜索按钮      关闭浏览器#-*- encoding:utf-8 -*- #导...
    99+
    2023-01-31
    第一个 测试
  • Python自动化测试
    第一章 Python自带的UnitTest单元测试框架 一、什么是框架 框架是由大佬开发或者专业的研发团队研发的技术骨架,框架是一个半成品,框架是对常用的功能,基础的代码进行封装的一个工具,这个工具对...
    99+
    2023-09-04
    python 单元测试 junit
  • python自动化测试之Selenium详解
    目录1.安装2.基础操作2.1 声明浏览器对象2.2 访问网页2.3 查找单个节点2.4 查找多个节点3.等待3.1 显式等待3.2 隐式等待总结1.安装 完成自动化测试,需要配置三...
    99+
    2024-04-02
  • mac+Appium自动化测试环境安装及配置
      在学习自动化测试,到了安装Appium环境的时候,发现mac参考的文档比较少,熬夜安装成功后,总结了下遇到的问题,以及要安装的软件,现在写下来,希望能给以后的人做参考。   首先总结了下要安装的相关软件:        建议先安装Hom...
    99+
    2023-09-06
    appium macos
  • Appium自动化测试实现九宫格解锁
    目录背景高级手势轻敲(tap)短按 (press)长按 (long_press)等待 (wait)移动到 (moveTo)释放 (release)执行 (perform)九宫格解锁背...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作