全网最详细的Mac下搭建Appium环境文档,没有之一

appium服务端的版本分为命令行版、桌面版,两者有些区别,两者都要安装

01 appium ios自动化环境搭建

首先必须有mac电脑,在app store中搜索xcode并安装,安装完成后一定记得打开一次,会自动安装xcode的的一些工具

以下步骤均是在mac电脑终端下执行

安装brew

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

安装libimobiledevice

brew install libimobiledevice --HEAD

有可能会报错 SSL certificate problem: certificate has expired,那么就执行如下指令后再次执行上述命令

git config --global http.sslVerify false

安装node

brew install node

安装npm

brew install npm

安装carthage

brew install carthage

安装ios-deploy

npm install ios-deploy

安装appium

npm install appium

安装appium-doctor

npm install appium-doctor

检查appium ios环境

appium-doctor --ios

执行结果中没有error即可

启动appium

appium

在这里插入图片描述

02 appium desktop版本安装

下载地址:

https://github.com/appium/appium-desktop/releases/tag/v1.21.0

图片

03 webdriveragent编译

如果是ios模拟器,那么webdriveragent无需处理

真机下webdriveragent编译

appium命令行版本的webdriveragent源码路径

/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent

进入上述目录,双击WebDriverAgent.xcodeproj文件

先连接真机

1、xcode选择真机

图中红框两个地方都要进行选择

图片

2、修改项目的bundleid

bundleid必须保证唯一,否则签名时会报错

图中红框框中的TARGETS都要进行修改

图片

以WebDriverAgentRunner这个TARGETS为例,修改bundleid

图片

其他的TARGETS做相同操作

3、签名TARGETS

针对第2步中框中的每个TARGETS做签名操作,以WebDriverAgentRunner这个TARGETS为例

图片

4、执行项目测试

执行webdriveragent的测试会在真机上安装一个WebDriverAgentRunner的app,并且启动他,在手机上启动一个基于8100的http服务,该服务是appium进行操作的必备条件

先选择测试文件,执行测试

在这里插入图片描述

第一次执行可能会报如下错误

在这里插入图片描述

那么进入手机设置–>通用–>设备管理,信任你的applie id即可,然后再重新执行测试,并且打开日志查看
在这里插入图片描述

日志中没有报错,并且出现图中红框的地址,说明WebDriverAgentRunner 这个app就安装到了手机上并且启动了服务

然后停止测试,点击xcode的停止,至此,wda的app就已经安装在待测手机上了

04 ios元素信息查看

1、以豆瓣app为例,因此在真机上先安装豆瓣app

由于参数中需要用到手机相关信息及豆瓣app的bundle_id,因此我们先获取这些信息,在终端下执行如下命令

# 获取当前连接的设备信息

ios-deploy -c

图片

其中00008101-001038A23AC0001E 是设备的udid

# 获取当前手机已安装的所有app的bundle_id,当然也可以找自己公司的开发问

ios-deploy --id 00008101-001038A23AC0001E --list_bundle_id

然后在结果中找到豆瓣app的bundle_id为com.douban.frodo

2、ios app的元素信息查看必须依赖于appium desktop版本,因此必须先按照第三步的步骤针对appium desktop版本下的webdriveragent做编译,路径如下:

/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent

编译完成并安装wda app到真机上后,打开appium desktop,启动server,在inspect界面添加如下参数并保存

platformName: ios

deviceName: iphone 12

值就是第一步中查看手机信息时看到的设备名称

platformVersion: 14.1

值就是第一步中查看手机信息时看到的设备的ios系统版本

udid: 00008101-001038A23AC0001E

值就是第一步中查看手机信息时看到的设备的udid

bundleId: com.douban.frodo

值就是第一步中得到的豆瓣app的bundle_id

automationName: XCuiTest

usePrebuildWDA: true

设置好以后,点击start session

图片

稍等片刻,会出现inspect调试界面

图片

05 appium在ios的工作原理

图片

06 appium ios服务参数

android和ios公共参数

在这里插入图片描述
ios特有参数

在这里插入图片描述
WDA参数

在这里插入图片描述

07 元素定位

在这里插入图片描述

MobileBy.MobileBy.IOS_PREDICATE 定位补充:

MobileBy.MobileBy.IOS_PREDICATE 定位方式主要是以元素属性进行定位,可以多个可以模糊匹配等等

属性等于=:

driver.find_element(MobileBy.IOS_PREDICATE,'name = "书影音"')

属性模糊匹配LIKE:

driver.find_element(MobileBy.IOS_PREDICATE,'name LIKE "*书影音"')

属性包含CONTAINS:

driver.find_element(MobileBy.IOS_PREDICATE,'name CONTAINS "影"')

属性值开头匹配BEGINSWITH:

driver.find_element(MobileBy.IOS_PREDICATE,'name BEGINSWITH "书影"')

属性值结尾匹配ENDSWITH:

driver.find_element(MobileBy.IOS_PREDICATE,'name ENDSWITH "音"').click()

多属性同时匹配AND:

driver.find_element(MobileBy.IOS_PREDICATE,'name = "书影音" AND label="书影音"')

多属性或者匹配OR:

driver.find_element(MobileBy.IOS_PREDICATE,'name = "书影音" OR label="书影音"')

比较运算符>、<、==、>=、<=、!=:

driver.find_element(MobileBy.IOS_PREDICATE,'value>100')

driver.find_element(MobileBy.IOS_PREDICATE,'value<100')

driver.find_element(MobileBy.IOS_PREDICATE,'value!=100')

正则匹配MATCHES:

driver.find_element(MobileBy.IOS_PREDICATE,'name MATCHES "正则表达式"')

MobileBy.IOS_CLASS_CHAIN 定位补充:

MobileBy.IOS_CLASS_CHAIN定位方式和xpath极其相似,也是按照元素层级和元素属性进行定位的

#查找type属性为XCUIElementTypeSecureTextField并且value为请输入密码的元素

driver.find_element(MobileBy.IOS_CLASS_CHAIN,'**/XCUIElementTypeSecureTextField[`value== "请输入密码"`]')

#查找type属性为XCUIElementTypeSecureTextField的第一个

driver.find_element(MobileBy.IOS_CLASS_CHAIN,'**/XCUIElementTypeSecureTextField[1]')

08 driver常用相关api

获取屏幕分辨率

driver.get_window_size()['width'] #获取屏幕的宽

driver.get_window_size()['height'] #获取屏幕的高

整屏滑动

# 起始点坐标200,700   结束点坐标200,100  持续时间500毫秒

driver.swipe(200,700,200,100,500)

启动激活第三方app

# 启动已安装的某个应用,参数第一个是应用的

bundleiddriver.activate_app('com.tencent.xin')

设备横竖屏相关操作

#获取设备横竖屏方向,PORTRAIT表示竖屏,LANDSCAPE表示横屏

driver.orientation

#设置设备为横屏

driver.orientation = 'landscape'

# 设置设备为竖屏

driver.orientation = 'portrait'

app安装卸载相关

#判断app是否安装,参数是app的包名称

driver.is_app_installed('com.tencent.xin')

#安装app,参数是安装包路径

driver.install_app('C:\\Users\\lixio\\Desktop\\douban.ipa')

#卸载app,参数是包名称

driver.remove_app('com.tencent.xin')

重启当前待测app

#重新启动

appdriver.reset()

重新运行app,注意该方法会重建sessi

关闭app,只针对当前测试的app

driver.close_app()

获取设

context相关操作,主要用于混合app操作webview界面时

#获取当前context

driver.current_context

#获取当前所有context

driver.contexts

#切换到混合webview界面的context

driver.switch_to.context('WEBVIEW_XXX')

#切换到原生切换的context

driver.switch_to.context('NATIVE_APP')

设备屏幕相关操作

#判断设备是否锁屏

driver.is_locked()

#解锁屏幕,让屏幕亮起来

driver.unlock()

#锁定屏幕,可以传参锁几秒

driver.lock()

键盘隐藏,不是很管用

driver.hide_keyboard(key_name='NEXT')

#点键盘上的NEXT键隐藏

driver.hide_keyboard(key_name='DONE')

#点键盘上的DONE键隐藏

driver.hide_keyboard()

09 元素特有相关api

获取元素属性

element.get_attribute('enabled')

element.get_attribute('index')

element.get_attribute('label')

element.get_attribute('name')

element.get_attribute('selected')

element.get_attribute('type')

element.get_attribute('value')

element.get_attribute('wdRect')

获取元素相关坐标

element.location.get('x') #获取元素起始点

xelement.location.get('y') #获取元素起始点

yelement.size.get('width') #获取元素的宽

element.size.get('height') #获取元素的高

010 手势相关api

多点移动

action = TouchAction(driver=driver)

# 多个坐标点移动

action.press(x=320,y=200).move_to(x=320,y=400).move_to(x=400,y=500).release().perform()

#多个元素移动

action.press(element=element).move_to(element=element1).move_to(element=element2).release().perform()

拖拽

action = TouchAction(driver=driver)

# 拖拽坐标点

action.press(x=320,y=400).wait(3000).move_to(x=320,y=800).release().perform()

#拖拽元素

action.press(element=element).wait(3000).move_to(element=element1).release().perform()

长按

action = TouchAction(driver=driver)

# 长按某个坐标点

action.long_press(x=320,y=400).release().perform()

# 长按某个元素

action.long_press(element=element).release().perform()

单击tap

action = TouchAction(driver=driver)

# 单击某个坐标点

action.tap(x=320,y=400).perform().release()

# 单击某个元素

action.tap(element=element).perform().release()

011 混合app处理

开启电脑safari开发者选项

打开电脑的safari浏览器,按照下述步骤操作

图片

图片

设置完成后在顶部菜单可以看到【开发】菜单

设置手机safari浏览器

设置–>Safari–>高级–>网页检查器(打开)

元素信息查看

在手机上打开待测app的webview页面,然后在电脑上做如下操作

图片

点击后就打开了开发者工具,这和web端的定位就一样了

图片

代码处理

对于webview界面的测试时,需要将driver切换至webview的context上,然后才能去定位元素

切换代码如下:

# 为什么要做个循环,是因为在获取webview的context时不稳定

# 循环10次获取,每次间隔一秒

count = 10

while count>0: 

     time.sleep(1) 

    # 获取当前所有的context 

     contexts = driver.contexts 

     for context in contexts:     

          if 'WEBVIEW' in context:

                 driver.switch_to.context(context)         

                 count = 0 

count -= 1

driver切换以后就可以按照web端的定位操作方式去操作了

012 H5页面处理

手机上H5页面,可以理解成用浏览器打开的app页面,其实就是网页,ios手机safari浏览器打开的H5的元素查看方式和第10步一样,不同的地方在于driver初始化参数的不同

desired_caps = {   

         "platformName": "ios",   

         "deviceName": "iPhone12",   

         "automationName": "XCuiTest",   

         "platformVersion": "14.1",   

         "udid": "00008101-001038A23AC0001E",   

         "usePrebuiltWDA": True,   

         "noReset": False,   

         "wdaLocalPort": 8101,   

         "showXcodeLog": True,   

         "autoAcceptAlerts": True,   

         "newCommandTimeout":600,   

         "browserName":"Safari" #指定浏览器

}

基本操作方法和web端就一致了

 最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值