1、为什么不是所有功能都用自动化测试?
- 自动化测试是需要写代码的,用代码来测试系统,所以首次成本比较高
- 被测系统的功能,回归测试的频率越高,那么使用自动化测试的性比较越高
- 哪些功能需要频繁回归测试:系统主要功能,用户访问量大的功能
- 注意点:需求不稳定的功能点不建议写自动化代码,成本比较高
Appium 安装准备:
1、jdk安装
安装地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
安装步骤:超详细JDK下载与安装步骤_下载jdk教程_最爱吃鱼罐头的博客-优快云博客
2、android sdk安装
【Android sdk for windows】
1.下载android sdk
https://dl.google.com/android/android-sdk_r24.4.1-windows.zip;
(也可以直接安装 android studio 开发工具,内部集成了android-sdk)
安装步骤:【1】 android jdk环境安装和 开发工具androidStudio 安装[ mac+windows版本]_安果移不动的博客-优快云博客
3、nodejs安装
下载地址: Node.js
安装步骤:nodejs安装和环境配置-Windows_nodejs安装及环境配置win7_七维大脑的博客-优快云博客
4、安装appium
下载地址:Releases · appium/appium-desktop · GitHub
需要单独安装appium inspector
Appium Inspector是appium自带的一个元素定位工具,可以通过以下链接进行安装。
还有一个apksigner.jar的文件需要安装,并且要放在platform-tools目录下
启动appium:
如何后续启动有问题的话,可以检查一下配置:
启动后页面如下:
同时需要启动appium inspctor:
appium inspector设置成功后会连接移动设备:并打开配置好的app页面,appium也会根据连接返回对应的信息
Appium要填写的参数
{
"platformName": "Android",
"platformVersion": "5.1.1",//设备系统版本号
"deviceName": "16a51c2a",//设备名称,可以通过adb devices获取
"appPackage": "com.laifu.laiqio.site",//要启动的app名称。手机打开APP,使用adb shell dumpsys activity|findstr mFocusedActivity 获取appPackage。
"appActivity": "io.dcloud.PandoraEntryActivity",//启动app后的界面。手机打开APP,使用adb shell dumpsys activity|findstr mFocusedActivity 获取appActivity。
}{ "platformName": "Android", "appium:platformVersion": "5.1.1", "appium:deviceName": "emulator-5554", "appium:app": "C:\\Users\\baker.yuan\\Desktop\\LAIFU2023021538.apk", "appium:appPackage": "com.laifu.laiqio.site", "appium:appActivity": "io.dcloud.PandoraEntryActivity", "appium:noReset": true }
第一个python代码:
from appium import webdriver
desired_caps={
"platformName": "Android",
"appium:platformVersion": "5.1.1",
"appium:deviceName": "emulator-5554",
"appium:app": "C:\\Users\\baker.yuan\\Desktop\\LAIFU2023021538.apk",
"appium:appPackage": "com.laifu.laiqio.site",
"appium:appActivity": "io.dcloud.PandoraEntryActivity",
"appium:noReset": True
}
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
driver.quit()
连接好手机后,手机上操作,然后点击刷新按钮更新页面,和手机保持同步
土巴兔登录流程:
from time import sleep
from selenium.webdriver.common.by import By
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
# For W3C actions
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.pointer_input import PointerInput
caps = {}
caps["platformName"] = "Android"
caps["appium:platformVersion"] = "10"
caps["appium:deviceName"] = "78ff4f1e"
caps["appium:appPackage"] = "com.to8to.housekeeper"
caps["appium:appActivity"] = "com.to8to.housekeeper.TLaunchActivity"
caps["appium:noReset"] = True
caps["appium:ensureWebviewsHavePages"] = True
caps["appium:nativeWebScreenshot"] = True
caps["appium:newCommandTimeout"] = 3600
caps["appium:connectHardwareKeyboard"] = True
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)
#点击跳过
driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/launch_rect_skip").click()
# driver.find_element_by_id("com.to8to.housekeeper:id/launch_rect_skip").click()
sleep(2)
#选择我的
# driver.find_element(by=By.CLASS_NAME,value='android.widget.ImageView').click()
# son='resourceId("com.to8to.housekeeper:id/ttab_own").childSelector(className("android.widget.ImageView"))'
# driver.find_element_by_android_uiautomator(son).click()
#最后选择Xpath定位到的
driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.view.ViewGroup/android.view.ViewGroup[5]/android.widget.ImageView").click()
#选择立即登录
driver.find_element(by=By.CLASS_NAME,value="android.widget.TextView").click()
# driver.find_element_by_class_name("android.widget.TextView").click()
# #删除手机号
# driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_img_reset_account").click()
# #输入手机号
# driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_edit_account").send_keys("15736418790")
# #获取验证码
# driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_txt_countdown").click()
#点击密码登录
# driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_txt_changed_login").click()
sleep(1)
#输入手机号
driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_edit_account").send_keys("15736418790")
#输入密码
driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_edit_password").send_keys("test666#")
#勾选协议
driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_cb_left").click()
#点击登录
driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_btn_commit").click()
# driver.quit()
遇到有些按钮定位不到元素,可以试试platforms里面自带的一个uiautomator.jar
除了基本的id定位还可以用text文本定位:直接text。还可以用contains
滑动的方法:
text定android_uiautomator
设置密码,移动按钮:press按下不动,wait等待,move_to移动
页面缩放:
代码实现:
自动化测试框架: