Appium移动端UI自动化框架

Appium

环境安装和准备

1.安装Android SDK
  • 配置系统环境变量(不是用户环境变量)
    • PATH
    • ANDROID_HOME
  • 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
  • cmd进入D:\python37\Scripts
pip install Appium-Python-Client
4.aapt查看apk包名和activity信息
  • cmd进入android安装路径下
d:
cd D:\androidSDK\build-tools\28.0.0
  • 在入android安装路径下,aapt文件所在路径,输入指令
aapt dump badging E:/KKLOnline-v4.4.1-kaikela-verify.apk
  • 查找包名和activity信息
package: name='com.mistong.kklonline.kklonline'
launchable-activity: name='com.mistong.kklonline.module.splash.activity.SplashActivity'
#主页面的activity
  • 扩展:直接跳转到别的页面/别的activity
am start -n <包名>/<包名>.<Activity名>
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
  • 每次弹出安装appium setting和unlock
    • 在…Appium\node_modules\appium\lib\devices\android\android.js编辑时,注释这三行代码
    this.pushSettingsApp.bind(this),
    this.pushUnlock.bind(this),
    this.unlock.bind(this),
    
  • 不能跑7.0以上的真机
    • https://www.cnblogs.com/cainiaotest/p/10271187.html
4.元素定位
  • 在D:\androidSDK\tools\bin目录下运行uiautomatorviewer.bat
  • 定位元素
    • id
    find_element_by_id("id对应的值")
    find_element(By.ID,)
    
    
    • name
    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
    
  • 无法定位的弹出元素
    • 截取当前页面的uix信息和png
    # 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)
  • tap事件,类似click
el=driver.find_element("id","resourse-id对应的值")
TouchAction(driver).tap(el).perform()
  • click点击事件
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")) #某个预期元素是否被选中
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值