设备和主要的软件版本如下:
iphone xs 12.3.1;mac os 10.14.5;xcode 10.2.1;appium-desk 1.13.0;appium 无界面版 1.14.0; node.js 10.16.0;python3.7;JDK12.0.2 。
如果有报错权限问题的话,每条命令前加上sudo即可
环境搭建--jdk安装 :https://blog.csdn.net/weixin_42285509/article/details/91975321
检查jdk是否安装成功:输入 java -version 查看java的版本。如果输出版本信息,说明jdk安装成功。
brew
安装homebrew:homebrew 简称brew。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
node.js
使用brew命令安装
brew install node
安装完成后在终端输入 node -v 出现版本号字样说明安装成功。
依赖插件ibimobiledevice、carthage、ios-deploy、xcpretty
brew install libimobiledevice --HEAD
brew install carthage
npm install -g ios-deploy
gem install xcpretty
Xcode
推荐在App Store中下载安装
Appium
appium是手机和pc之间的代理服务器,完成两者的通信处理。(没错,它就是个中间商)
appium-desk版本可在官网下载安装http://appium.io/downloads.html
appium-server 无界面版使用npm命令安装,但鉴于部分资源被墙,建议使用淘宝镜像。
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install -g appium #appium@1.13.0可指定安装版本
安装appium-doctor检查appium环境。
cnmp install -g appium-doctor
终端运行appium-doctor --ios
如果报错提示xcode未安装在终端运行命令,设置xcode路径。
xcode-select –switch /Applications/Xcode.app/Contents/Developer
WebDriverAgent (wda)
之前查阅了很多资料,说的是appium自带的wda有问题,无法使用inspector进行页面元素定位,但我决定使用appium-desk进行定位就没有单独去下载GIthub上的wda-master。
首先是桌面版的wda
文件路径:
/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent
在终端cd到上述目录,运行命令安装依赖。
./Scripts/bootstrap.sh
安装完成后点击mac右上角的聚焦搜索,粘贴路径敲击回车。
右键通过Xcode打开.xcodeproj文件。
如果没有找到.xcodeproj文件
clone项目(要安装有git brew install git):$ git clone https://github.com/facebook/WebDriverAgent
下载依赖
$ cd /Users/yourname/WebDriverAgent
$ mkdir -p Resources/WebDriverAgent.bundle
$ sh ./Scripts/bootstrap.sh
首先打开Xcode-performance-account登录你的AppleID (我用的公司开发者账户,如果你是个人账户你就百度解决证书的问题)
在wdaLib General设置中选择自动签名,选择你的公司team。bundleid 是APP的唯一标识符,直接问开发获得。
确认 wdaLib build setting 中deployment系统的版本
image.png
packaging 中的project bundleid 和之前填写的是否一致。
image.png
signing签名是否正确
image.png
在wdaRunner General中设置自动签名,如果报错提示 Try again ,不要着急,先设置build setting。
image.png
检查build setting中packaging 的bundleid是否正确
image.png
设置签名
image.png
连接上你的水果机,Scheme选择wdarunner,destination选择你的真机。
image.png
image.png
点击左上角三角形进行构建,首次构建可能会要求你输入访问钥匙的密码,输入你的账户密码即可(我输入的是开机密码),提示build succeeded。然后点击-product-test进行将wda安装到真机。安装完成后在真机的safari浏览器输入 127.0.0.1:8100/status 显示如下则表示安装成功。
点击右上角的放大镜按钮,弹出连接窗口,填入对应参数,
参数填写完成后点击右下角start session 手机上点击信任此电脑,并且开启设置-开发者-enable ui automation ,转跳到爱的魔力转圈圈界面,第一次连接的时间可能会很长。
路径/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent
同上,cd到目录执行命令后使用xcode构建。
./Scripts/bootstrap.sh
如果之前安装过appium-desk的wda ,xcode会卸载后重新安装,安装过程中如果提示application install failed 就手动卸载真机上的wda。
敲黑板
安装谁的wda就用谁去连接真机。
比如说:我通过xcode构建了appium-desk版的wda到真机上,那么我就只能通过desk版去连接真机,不能通过无界面appium+python连接!
Python
mac 系统自带python2,可通过官网下载并安装python3,在终端输入python3进入python IDE说明安装成功。
pip
pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能,目前如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具。
你可以通过以下命令来判断是否已安装:
pip3 --version
安装成功提示如下
如果提示c'ommand not found可以通过如下命令安装
sudo easy_install pip
appium-python-client
appium-python-client 是让 python 连接 appium 服务的一个驱动,也就是一个 python 语言封装和 appium api 通讯的一个库。
安装方法:
pip install Appium-Python-Client
验证:
引入webdriver模块不报错。
测试脚本
至此我们的ios测试环境已经部署的差不多了,接下来就用脚本进行测试吧。
通过xcode给真机构建wda
启动appium服务(有无界面版均可)
编写脚本,通过入口参数连接至appium
执行脚本
# coding=utf-8
from appium import webdriver
import time
class Appium:
# 启动app
def __init__(self):
desired_caps = {}
desired_caps['platformName'] = 'iOS' # 设备系统
desired_caps['platformVersion'] = '12.3.1' # 设备系统版本
desired_caps['deviceName'] = '欢哥的 iPhone' # 设备名称
desired_caps['bundleId'] = 'com.xxx.xxx' # 测试app包名
desired_caps['udid'] = 'xxxxxx-xxxxxxxx' #设备id
desired_caps['automationName'] = 'XCUITest' # 测试框架
desired_caps['noReset']='true' # 保留app的登录状态
desired_caps['xcodeSigningId']='iOS Developer'
desired_caps['xcodeOrgId']='aaaaa' # 团队id
desired_caps['newCommandTimeout']=3600
self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) # 保持端口号和appium服务端口一致
# 使用隐式等待或者显示等待,尽量减少time.sleep强制等待的使用提高脚本执行速度。
self.driver.implicitly_wait(5)
def test(self):
# 点击一个id定位的元素
self.driver.find_element_by_accessibility_id("").click()
# 此处使用time.sleep是为了能让肉眼区分操作。
time.sleep(1)
# 点击一个xpath定位的元素
self.driver.find_element_by_xpath("").click()
time.sleep(1)
# 给输入id定位的输入框传值
self.driver.find_element_by_accessibility_id("").set_value("iostest")
time.sleep(1)
# 截图保存到当前文件
self.driver.save_screenshot('./1.png')
time.sleep(2)
# 关闭app
self.driver.close_app()
if __name__ == '__main__':
a =Appium()
a.test()
————————————————
版权声明:本文为CSDN博主「小蛮姐姐」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42285509/article/details/106310360