文章目录
- Appium
- 环境安装和准备
- 1.安装Android SDK
- 2.安装appium server
- 3.PyCharm中安装appium-python-client
- 4.aapt查看apk包名和activity信息
- 5 编码指定操作设备
- 6.运行以上脚本
- 4.元素定位
- 5.操作页面
Appium
环境安装和准备
1.安装Android SDK
- 配置系统环境变量(不是用户环境变量)
- adb常用命令
adb --help #查看常用命令
adb devices # 查看连接的设备
adb install XXX.apk #安装XXX包
adb -s YYY install XXX.apk # 在YYY机器上安装XXX包
# adb -s 3eade061 install E:/KKLOnline-v4.4.1-kaikela-verify.apk
adb start-server #启动服务
adb kill-server #关闭服务
adb shell #进入shell模式(root后的机器)
2.安装appium server
- 安装appium server作为服务器
- 配置环境变量
- 将…\Appium\node_modules.bin\配置到系统变量
- 检测是否安装成功
apppium-doctor
3.PyCharm中安装appium-python-client
pip install Appium-Python-Client
4.aapt查看apk包名和activity信息
d:
cd D:\androidSDK\build-tools\28.0.0
- 在入android安装路径下,aapt文件所在路径,输入指令
aapt dump badging E:/KKLOnline-v4.4.1-kaikela-verify.apk
package: name='com.mistong.kklonline.kklonline'
launchable-activity: name='com.mistong.kklonline.module.splash.activity.SplashActivity'
#主页面的activity
am start -n <包名>/<包名>.
5 编码指定操作设备
# noinspection PyUnresolvedReferences
import time
# noinspection PyUnresolvedReferences
from appium import webdriver
desired_caps = {
#使用哪种移动平台
'platformName':'Android',
#启动那种设备,可有可无
'deviceName':'3eade061',
#os版本
'platformVersion':'7.1.1',
#包名
'appPackage':'com.mistong.kklonline.kklonline',
#lunchactivity,原生app要在activity前加个.
'appActivity':'com.mistong.kklonline.module.splash.activity.SplashActivity',
#隐藏手机中的软键盘,让手机输入中文
'unicodeKeyboard':True,
#'automationName':'Uiautomator1',
'resetKeyboard':True
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
# 本地都是127.0.0.1,看appium destop的服务器地址
6.运行以上脚本
- 报错"ime enable io.appium.android.ime/.UnicodeIME""
#隐藏手机中的软键盘,让手机输入中文
'unicodeKeyboard': False,
#'automationName':'Uiautomator1',
'resetKeyboard': False
4.元素定位
- 在D:\androidSDK\tools\bin目录下运行uiautomatorviewer.bat
- 定位元素
find_element_by_id("id对应的值")
find_element(By.ID,)
find_element_by_name(self, name)
- Uiautomator(传入id,text,class,content-description)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("某某某"))#根据id
driver.find_element_by_android_uiautomator('new UiSelector().text("某某某"))#根据text
- 无法定位的弹出元素
# cmd中输入
adb shell uiautomator dump /sdcard/screen.uix
adb shell screencap -p /sdcard/screen.png
# cmd中输入,下载到当前本地
adb pull /sdcard/screen.uix
adb pull /sdcard/screen.png
- UIautomation中将png导入到screenshot中,uix导入到UI XML Dump中
- 再次定位
5.操作页面
class SwipeDemo:
#获得机器屏幕大小x,y
def getSize(self,driver):
x=driver.get_window_size()['width']
y=driver.get_window_size()['height']
return (x,y)
#屏幕向上滑动
def swipeUp(self,driver,t):
l = self.getSize(driver)
x1 = int(l[0] * 0.5) #x坐标
y1 = int(l[1] * 0.75) #起始y坐标
y2 = int(l[1] * 0.25) #终点y坐标
driver.swipe(x1, y1, x1, y2,t)# 执行此次滑动时间,单位毫秒
#屏幕向下滑动
def swipeDown(self,driver,t):
l = self.getSize(driver)
x1 = int(l[0] * 0.5) #x坐标
y1 = int(l[1] * 0.25) #起始y坐标
y2 = int(l[1] * 0.75) #终点y坐标
driver.swipe(x1, y1, x1, y2,t)
#屏幕向左滑动
def swipLeft(self,driver,t):
l=self.getSize(driver)
x1=int(l[0]*0.75)
y1=int(l[1]*0.5)
x2=int(l[0]*0.05)
driver.swipe(x1,y1,x2,y1,t)
#屏幕向右滑动
def swipRight(self,driver,t):
l=self.getSize(driver)
x1=int(l[0]*0.05)
y1=int(l[1]*0.5)
x2=int(l[0]*0.75)
driver.swipe(x1,y1,x2,y1,t)
el=driver.find_element("id","resourse-id对应的值")
TouchAction(driver).tap(el).perform()
driver.find_element('id','resourse-id对应的值').click()
driver.find_element('id','resourse-id对应的值').send_keys("啥啥啥")
time.sleep(5)#停留5秒
driver.
#查看元素是否可见
EC.presence_of_element_located((By.ID,"kw")) #查看某个元素是否存在
EC.element_to_be_clickable() #查看元素是否可点击
EC.element_located_to_be_selected((By.ID,"kw")) #某个预期元素是否被选中