最近重新装了下Mac的系统,所以需要整理环境,在此记录下环境搭建过程.
前提:
环境搭建:
安装 Xcode Command Line Tools:
打开终端输入 命令:
xcode-select --install
回车后会弹出 GUI 安装界面,同意协议安装。
安装 Carthage:
brew install carthage
安装ideviceinstaller:
brew install ideviceinstaller
安装usbmuxd、libimobiledevice:
brew install -v --HEAD --build-from-source usbmuxd libimobiledevice
安装Appium Desktop:
命令行 Appium 没有 Inspector,但是研究页面结构还是需要的。
直接从Github下载安装就可以了。
准备WebDriverAgent:
我使用的是Appium自带的WebDriverAgent,没有替换成facebook的,因为已经不再维护.
是使用的Appium Desktop 的版本是 v1.15.1,不同版本之间文件结构会有所不同。
cd /Applications/Appium.app/Contents/Resources/app/node_modules/appium-webdriveragent ./Scripts/bootstrap.sh -d
签名:
用xcode打开
/Applications/Appium.app/Contents/Resources/app/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj
给WebDriverAgentLib、WebDriverAgentRunner 签名
WebDriverAgentLib:
添加Team: Preferences -> Accounts -> 左下角添加按钮 -> Apple ID -> Continue -> 输入自己Apple ID的账号 密码 添加
WebDriverAgentRunner:
签完后选择 WebDriverAgentRunner 作为 Target, Device 选择用数据线连接着的 iOS 真机。
从菜单栏选择 Product -> Test.
Xcode 将编译项目,在真机上安装.
第一次可能会因为开发者不被信任而运行失败。在手机设置中找到 通用 -> 描述文件与设备管理 选择并信任你的开发者证书
因为如果某个开发者账号签名的所有 App 都被删除的话下次再安装又要重新信任才能运行.
配置 Appium Inspector:
将手机和电脑用数据线连接。
打开 Appium Desktop 选择 Start Server v1.15.1。
点击右上方放大镜按钮 Start Inspector Session。
配置按照我的填就可以了
{ "platformName": "iOS", "platformVersion": "13.2", "deviceName": "填写手机的deviceName", "automationName": "XCUITest", "udid": "填手机的udid", "bundleId": "填应用的bundleId", "xcodeOrgId": "填开发者id", "xcodeSigningId": "iPhone Developer", "useNewWDA": false, "noReset": true, "newCommandTimeo": "60" }
获取udid:
idevice_id -l #或者 xcrun instruments -s #或者使用ios-deploy ,需要brew install ios-deploy安装 ios-deploy -cW
获取deviceName:
ideviceinfo -k DeviceName
获取bundleId:
ideviceinstaller -l -o list_user #或者 ios-deploy -B
获取xcodeOrgId:
方法一:
方法二:
打开钥匙串访问
全部填写完成然后启动会话
更多参数参考: Appium Desired Capabilities
成功启动:
真机运行Demo:
仅仅是一个Demo,使用的是IOS Gmail 客户端 , 没有任何设计模式的代码!!
提前把输入法换成系统自带的输入法,否则无法成功调用sendKeys方法.
IOS系统是没有类似Android的keycode的,所以在输入的字符串后面加上 \n 就相当于输入完点击回车了.
public class IOSDemo { public static void main(String[] args) throws Exception { // GitHub地址: https://github.com/zhshijie/appiumSimpleDemo // APP 编译命令: xcodebuild -sdk iphoneos -target appiumSimpleDemo -configuration Release DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "ios"); capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "13.2.2"); capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone"); /** * 有APP 使用MobileCapabilityType.APP 参数, 后面加软件安装包的路径 * 没有APP 使用 bundleId */ // capabilities.setCapability(MobileCapabilityType.APP, "app path"); capabilities.setCapability("bundleId", "com.google.Gmail"); capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "XCUITest"); capabilities.setCapability(MobileCapabilityType.UDID, "手机的udid"); capabilities.setCapability(MobileCapabilityType.NO_RESET, true); capabilities.setCapability("useNewWDA", false); IOSDriver driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); driver.findElementByAccessibilityId("搜索邮件").click(); mysleep(1); driver.findElementByName("SearchTextField").sendKeys("twitter\n"); mysleep(1); driver.findElementByAccessibilityId("SearchCloseSearchButton").click(); mysleep(1); driver.findElementByAccessibilityId("导航菜单").click(); mysleep(1); driver.findElementByAccessibilityId("草稿").click(); driver.quit(); System.out.println("Success"); } public static void mysleep(long time) { try { Thread.sleep(time*1000); } catch (InterruptedException e) { e.printStackTrace(); } } }
相关命令:
#手机的udid idevice_id -l #获取手机型号 ideviceinfo -k ProductType #系统版本 ideviceinfo -k ProductVersion #DeviceName ideviceinfo -k DeviceName
参考文章:
还没有评论,来说两句吧...