python利用appium实现手机APP自动化的示例

针对这个话题,我将给出以下完整攻略:

准备工作

  • 安装 Python3 环境
  • 安装 appium-python-client 库 pip install Appium-Python-Client
  • 安装 Android SDK, 并配置 ANDROID_HOME 环境变量
  • 安装 JDK, 并配置 JAVA_HOME 环境变量
  • 在手机上安装待测试的 APP
  • 在电脑上安装 Appium Server

代码实现

在这里我们以一个简单的登录示例为例,假设待测试的 APP 为一个登录界面,需要输入用户名和密码,然后 click 登录按钮,最后验证是否成功登录。以下是代码实现过程:

from appium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

caps = {
    "platformName": "Android",
    "deviceName": "your_device_name",
    "appPackage": "your_app_package_name",
    "appActivity": "your_app_activity_name"
}

driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)

# 登录流程
username_input = driver.find_element_by_id("username_input_id")
password_input = driver.find_element_by_id("password_input_id")
login_btn = driver.find_element_by_id("login_btn_id")

username_input.send_keys("your_username")
password_input.send_keys("your_password")
login_btn.click()

# 验证登录结果
locator = (By.ID, "login_success_mark_id")
WebDriverWait(driver, 10).until(EC.visibility_of_element_located(locator))
assert driver.find_element(*locator).text == "登录成功"

driver.quit()

以上代码中 caps 表示测试手机的一些信息,其中 platformName 表示测试平台为 Android;deviceName 表示指定测试机器名;appPackageappActivity 表示待测试 APP 的包名和启动 Activity。在实际使用时,需要将这些信息修改为相应的值。

在登录流程中,首先查找用户名、密码、登录按钮的对应元素;然后分别输入用户名和密码,最后点击登录按钮。接下来等待登录结果。

验证登录结果时,首先定义一个定位器,表示登录成功与否的标志元素,然后使用 WebDriverWait 等待元素可见,最后检查元素的文本内容是否正确,如果正确则表示登录成功。

示例说明

示例 1

假设待测试 APP 为微信,需要实现一个自动添加好友的例子。其中登录界面需要输入微信账号和密码,登录成功后自动进入主界面,然后进入添加好友界面,输入待添加好友的微信号,最后点击验证并添加按钮。

from appium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

caps = {
    "platformName": "Android",
    "deviceName": "your_device_name",
    "appPackage": "com.tencent.mm",
    "appActivity": ".ui.LauncherUI"
}

driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)

# 登录微信
username_input = driver.find_element_by_id("username_input_id")
password_input = driver.find_element_by_id("password_input_id")
login_btn = driver.find_element_by_id("login_btn_id")

username_input.send_keys("your_wechat_name")
password_input.send_keys("your_wechat_password")
login_btn.click()

# 进入以下界面
driver.find_element_by_id("main_page_id").click()
driver.find_element_by_id("discover_tab_id").click()
driver.find_element_by_id("add_friends_btn_id").click()

# 添加好友
driver.find_element_by_id("wechat_id_input_id").send_keys("your_friend_wechat_id")
driver.find_element_by_id("verify_and_add_btn_id").click()

# 验证添加结果
locator = (By.ID, "add_success_mark_id")
WebDriverWait(driver, 10).until(EC.visibility_of_element_located(locator))
assert driver.find_element(*locator).text == "添加成功"

driver.quit()

以上代码中,caps 需要将 appPackage 修改为待测试 APP 的包名,appActivity 修改为待测试 APP 的启动 Activity。之后就进行流程测试。

示例 2

假设待测试 APP 为支付宝,需要实现一个自动转账的例子。其中登录界面需要输入支付宝账号和密码,登录成功后自动进入主界面,然后进入转账界面,输入待转账人的账号、转账金额、转账备注等信息,最后点击确定按钮进行转账。

from appium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

caps = {
    "platformName": "Android",
    "deviceName": "your_device_name",
    "appPackage": "com.eg.android.AlipayGphone",
    "appActivity": "com.eg.android.AlipayGphone.AlipayLogin"
}

driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)

# 登录支付宝
username_input = driver.find_element_by_id("username_input_id")
password_input = driver.find_element_by_id("password_input_id")
login_btn = driver.find_element_by_id("login_btn_id")

username_input.send_keys("your_alipay_name")
password_input.send_keys("your_alipay_password")
login_btn.click()

# 进入以下界面
driver.find_element_by_id("transfer_tab_id").click()
driver.find_element_by_id("to_account_input_id").send_keys("your_friend_account")
driver.find_element_by_id("amount_input_id").send_keys("10")
driver.find_element_by_id("remark_input_id").send_keys("happy birthday!")
driver.find_element_by_id("ok_btn_id").click()

# 验证转账结果
locator = (By.ID, "transfer_success_mark_id")
WebDriverWait(driver, 10).until(EC.visibility_of_element_located(locator))
assert driver.find_element(*locator).text == "转账成功"

driver.quit()

以上代码中,caps 需要将 appPackage 修改为待测试 APP 的包名,appActivity 修改为待测试 APP 的启动 Activity。之后就进行流程测试。

以上是 Python 利用 Appium 实现手机 APP 自动化的完整攻略,同时给出两个简单的示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python利用appium实现手机APP自动化的示例 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python实现简易信息分类存储软件

    下面是“Python实现简易信息分类存储软件”的完整攻略。 一、项目背景 在日常生活和工作中,我们经常会遇到需要将某些信息进行分类存储的情况,例如人员名单、客户信息、学生档案等等。为了方便管理和查找,我们需要将这些信息按照一定方式进行分类存储。本项目旨在通过利用Python实现一个简易信息分类存储软件来实现这一目的。 二、技术选型 本项目的基础技术选项如下:…

    python 2023年6月3日
    00
  • CentOS 7 下LAMP实现及基于https的虚拟化主机

    下面我来详细讲解“CentOS 7 下LAMP实现及基于https的虚拟化主机”的完整攻略。 一、CentOS 7 下LAMP实现 1. 安装Apache 执行以下命令安装Apache: sudo yum install httpd 启动Apache服务: sudo systemctl start httpd.service 设置Apache服务开机启动: …

    python 2023年5月23日
    00
  • python3下使用cv2.imwrite存储带有中文路径图片的方法

    首先我们需要安装OpenCV库,可以通过在命令行中执行以下命令进行安装: pip install opencv-python 接下来我们需要导入OpenCV库: import cv2 然后我们就可以使用cv2.imwrite函数将带有中文路径的图片存储到本地。cv2.imwrite函数的第一个参数是保存图片的路径,第二个参数是图片的内容。具体代码如下: im…

    python 2023年5月20日
    00
  • 通过python检测字符串的字母

    检测字符串中的字母可以使用Python内置方法来实现。以下是一个完整的攻略: 步骤1:获取字符串 首先需要获取要检测的字符串。可以通过以下代码来手动输入: string = input("请输入要检测的字符串:") 或者,如果字符串已经存储在变量中,直接使用即可,比如: string = "this is a string&qu…

    python 2023年6月5日
    00
  • 超详细讲解python正则表达式

    超详细讲解Python正则表达式 正则表达式是一种强大的文本处理工具,可以用于匹配、查找、替换和割字符串。Python提供了re模块来处理正则表达式,本文将为您细讲解Python正则表达式的语法、re模块的常用方法和两个示例说明。 正则表达式的语法 在正则表达式中,使用[]表示字符集,^表示取反,-表示范围,+表示匹配一个或多个字符,*表示匹配零个或多个字符…

    python 2023年5月14日
    00
  • python项目生成exe

    前言 做了个python的小项目,需要打包为桌面端的exe使用,结果一打包,体积直接上百兆了,研究了下,使用虚拟环境打出的包会更干净小巧。 安装anaconda anaconda用作python的虚拟环境管理工具,安装命令:https://repo.anaconda.com/archive/Anaconda3-2023.03-Windows-x86_64.e…

    python 2023年4月17日
    00
  • python使用marshal模块序列化实例

    当我们在 Python 中使用某些数据结构时(例如列表、字典等),我们可能需要序列化(将它们转换为特定格式的字符串、文件)以进行长时间存储或网络传输。 Python 中有一个内置的序列化模块 marshal,该模块可以将实例序列化为二进制数据,也可以将二进制数据反序列化为相应的实例对象。下面是使用 marshal 模块序列化 Python 实例的完整攻略。 …

    python 2023年6月2日
    00
  • Django 报错:Broken pipe from (‘127.0.0.1’, 58924)的解决

    当我们在使用 Django 进行 web 开发时,有时会遇到 BrokenPipeError: [Errno 32] Broken pipe 这样的错误,它通常是由于客户端无法成功接收服务器发出的完整响应而引起的。在 Django 开发中,也会遇到 BrokenPipeError: [Errno 32] Broken pipe 错误,下面是解决该错误的完整攻…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部