全网最详细的mac下搭建appium环境文档,没有之一(代码片段)

软件测试君 软件测试君     2023-02-09     567

关键词:


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,注意该方法会重建session

driver.launch_app()

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

driver.close_app()

获取设备时间

driver.device_time

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端就一致了

下面是一份配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

这些都可以以在公众号:伤心的辣条 ! 免费领取,还有一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中资料包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

这应该是网络上最详细最全面的appium环境搭建及元素定位(代码片段)

Appium简介Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。它使用WebDriver协议驱动iOS,Android和Windows应用程序。01、环境搭建步骤Appium环境安装:第一步安装appium桌面版客户端Appium-1.12.1.d... 查看详情

这应该是网络上最详细最全面的appium环境搭建及元素定位(代码片段)

Appium简介Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。它使用WebDriver协议驱动iOS,Android和Windows应用程序。01、环境搭建步骤Appium环境安装:第一步安装appium桌面版客户端Appium-1.12.1.d... 查看详情

mac版最详细的flutter开发环境搭建(代码片段)

...白来说超级不友好。而网上很多相关博客教程,感觉不够详细,许多环境搭建过程中的坑确实是提到了,但解决的办法写的比较笼统,在此我将本次环境搭建锁遇到的各种奇奇怪怪的问题一一汇总,争取结合各路大神的博客加上... 查看详情

mac电脑下appium的真机测试环境搭建(代码片段)

  本人的环境搭建的情况,MAC电脑一台(macOSMojave10.14.4),Xcode10.2.1  ,自己注册的一个AppleID账户,必须你的电脑能连接互联网,最好不要用公司的网络,限制太多,容易掉坑里。 1.安装Homebrew 安装/usr/bin/ru... 查看详情

mac上安装搭建appium环境(代码片段)

...学习移动端的自动化测试框架——Appium。mac下安装搭建Appium环境主要需要以下程序:  1)node.js  2)Xcode  3)JDK  4)androidJDK  5)Appium以下对各个程序的安装进行详解。1.node.js  Appium运行时依赖node.js环境,因... 查看详情

mac下android自动化环境搭建(代码片段)

环境需要1,AppiumAppiumServer桌面版本:下载地址:https://github.com/appium/appium-desktop/releases/tag/v1.21.0建议初学者使用以前需要依赖node,现在不需要了Appium命令行版本:命令:pipinstallAppium-Python-Client2,真机/模拟器准备:没有真机用模... 查看详情

windows搭建nodejs全网最详细(代码片段)

1.下载镜像【WIN7用户看这里】2.默认安装完毕后,创建node_global&node_cache文件夹补充:它默认是存储在C:\\Users\\ROOT\\AppData\\Roaming的3.修改默认环境npmconfigsetprefix"C:\\ProgramFiles\\nodejs\\node_global"npmconfigse 查看详情

appium+python自动化-环境搭建—下(超详解)

简介  宏哥的人品还算说得过去,虽然很久没有搭建环境了,但是换了新电脑设备,一气呵成,将android的测试开发环境已经搭建准备完毕。上一篇android测试开发环境已经准备好,那么接下来就是appium的环境安装和搭建了。... 查看详情

mac搭建appium环境

1.安装brew 查看是否已经装上brew,终端输入命令:brew--version,已经装上的就不用再装了; 如果没有安装,终端输入命令:ruby-e"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)" 安卓brew2.安装node.js 终端... 查看详情

appium环境搭建(mac版)

一、安装Java1)下载适合的软件包,选择macOS对应的版本,下载链接如下:http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html注意:Mac版的需下载.dmg结尾的安装包2)双击下载文件,依次安装3)安装完成可在终端检... 查看详情

mac上搭建appium环境过程以及遇到的问题

Mac环境安装appium 一、Java环境下载javasdkhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html2.下载完成之后安装3.java–version检查是否安装成功,JDK的安装目录为:/Library/Java/JavaVirtualMachines,里面有所 查看详情

mac搭建appium环境ios真机

...如果有报错权限问题的话,每条命令前加上sudo即可环境搭建--jdk安装:https://blog.csdn.net/weixin_42285509/ar 查看详情

mysqlndbcluster集群搭建实战全网最详细(代码片段)

MysqlNDBCluster集群搭建实战全网最详细https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster-overview.html#官方的文档介绍地址一、NDB集群概述NDB集群是一种在无共享系统中实现内存数据库集群的技术。无共享体系结构使系统能够使用非常便宜的... 查看详情

最详细的windows版本搭建安装reactnative环境配置

最详细的Windows版本搭建安装ReactNative环境配置网上大部分的React Native环境搭建的视频和博客都是Mac的,剩下为数不多的windows环境搭建的文章全是坑(博主流泪呀)1、安装Java这里需要注意对环境变量的设置,可以... 查看详情

appium

标签(空格分隔):Appium由于基于Appium的移动应用环境搭建相对复杂,虽然网上也有不少教程,但是知识点都比较零碎,而且大多都是基于早期版本的示例,所以我会使用最新版本的AppiumDesktop1.6.2和AppiumServer1.8.1来展开今天的内... 查看详情

傻瓜式教程windows下安装hivemysql版附安装hadoop教程全网最详细的图文教程(代码片段)

目录一定要先看的前言1安装Hadoop1.1下载并解压资源1.2配置系统变量和环境变量1.2.1系统变量1.2.2环境变量1.2.3测试1.3复制文件1.4修改配置文件1.4.1创建目录1.4.2修改5个文件1.5格式化HDFS1.6开启四个进程1.7测试HadoopDFS2安装HiveMySQL版本2... 查看详情

appium概述,环境搭建及python3环境下案例(代码片段)

一.介绍官网:http://appium.io/介绍:http://appium.io/docs/cn/about-appium/intro/官方github:https://github.com/appium/appiumAppium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持IOS、Android及FirefoxO 查看详情

appium----已解决macandroid_home的环境变量配置

在搭建appium的环境时,提示Android_home的环境没有配置,经过一会的奋战终于解决,再次记录下解决方式。 1、安装android-sdk-macosx  下载路径:http://down.tech.sina.com.cn/page/45703.html,下载的版本为Mac24.4.1 2、下载后复制到你... 查看详情