针对这个话题,我将给出以下完整攻略:
准备工作
- 安装 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
表示指定测试机器名;appPackage
和 appActivity
表示待测试 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技术站