真机运行
模拟器编译log
CodeSign /Users/seveniruby/Library/Developer/Xcode/DerivedData/UICatalog-ftyzdbgapjmxxobezrnrxsshpdqh/Build/Products/Debug-iphonesimulator/UICatalog.app
cd /Users/seveniruby/projects/ios-uicatalog
export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate
export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
Signing Identity: "-"
/usr/bin/codesign --force --sign - --entitlements /Users/seveniruby/Library/Developer/Xcode/DerivedData/UICatalog-ftyzdbgapjmxxobezrnrxsshpdqh/Build/Intermediates.noindex/UICatalog.build/Debug-iphonesimulator/UICatalog.build/UICatalog.app.xcent --timestamp=none /Users/seveniruby/Library/Developer/Xcode/DerivedData/UICatalog-ftyzdbgapjmxxobezrnrxsshpdqh/Build/Products/Debug-iphonesimulator/UICatalog.app
真机编译log
CodeSign /Users/seveniruby/Library/Developer/Xcode/DerivedData/UICatalog-ftyzdbgapjmxxobezrnrxsshpdqh/Build/Products/Debug-iphoneos/UICatalog.app
cd /Users/seveniruby/projects/ios-uicatalog
export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate
export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
Signing Identity: "iPhone Developer: yansheng huang (LJGDR784H2)"
Provisioning Profile: "iOS Team Provisioning Profile: *"
(0c3891ec-b6a3-4bd8-bb3c-1774087952ff)
/usr/bin/codesign --force --sign A747E05F425FF31AA6180C146F9BE554AA1983B6 --entitlements /Users/seveniruby/Library/Developer/Xcode/DerivedData/UICatalog-ftyzdbgapjmxxobezrnrxsshpdqh/Build/Intermediates.noindex/UICatalog.build/Debug-iphoneos/UICatalog.build/UICatalog.app.xcent --timestamp=none /Users/seveniruby/Library/Developer/Xcode/DerivedData/UICatalog-ftyzdbgapjmxxobezrnrxsshpdqh/Build/Products/Debug-iphoneos/UICatalog.app
证书体系
- team id
- 开发者证书
- 发布证书
- bundle id
- provisioning profile
- udid
常见命令
brew install --HEAD ideviceinstaller
brew install --HEAD libimobiledevice
brew install ios-deploy
#查看真机设备
idevice_id -l
idevicename -d
#查看所有的模拟器和真机
instruments -s devices
真机Desktop调试
{
"platformName": "ios",
"automationName": "xcuitest",
"deviceName": "汪xx的 iPad (2)",
"app": "/Users/seveniruby/Library/Developer/Xcode/DerivedData/UICatalog-ftyzdbgapjmxxobezrnrxsshpdqh/Build/Products/Debug-iphoneos/UICatalog.app",
"udid": "auto"
}
真机测试
- https://github.com/appium/appium/blob/master/docs/en/drivers/ios-xcuitest-real-devices.md
- developer.apple.com/account
真机测试代码
@Test
public void UICatalogTestClickRealDevice() throws MalformedURLException {
DesiredCapabilities caps=new DesiredCapabilities();
caps.setCapability("platformName", "ios");
caps.setCapability("automationName", "xcuitest");
//caps.setCapability("platformVersion", "11.2");
caps.setCapability("deviceName", "汪水华的 iPad (2)");
caps.setCapability("udid", "auto");
/* caps.setCapability("app", "/Users/seveniruby/Library/Developer/Xcode/DerivedData/" +
"UICatalog-ftyzdbgapjmxxobezrnrxsshpdqh/Build/Products/Debug-iphonesimulator/UICatalog.app");*/
caps.setCapability("app", "/Users/seveniruby/Library/Developer/Xcode/DerivedData/" +
"UICatalog-ftyzdbgapjmxxobezrnrxsshpdqh/Build/Products/Debug-iphoneos/UICatalog.app");
caps.setCapability("xcodeOrgId", "96NJEQL7Y2");
caps.setCapability("xcodeSigningId", "iPhone Developer");
AppiumDriver driver=new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), caps);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
System.out.println(driver.getPageSource());
driver.findElementByAccessibilityId("Buttons").click();
}
浏览器测试
- google的safari调试中转工具 https://github.com/google/ios-webkit-debug-proxy
- appium测试safari的文档 https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/ios-webkit-debug-proxy.md
先开启iOS手机上浏览器的
settings > safari > advanced > web inspector → on
caps的配置
{
//指明浏览器
"browserName": "Safari",
"platformName": "iOS",
"deviceName": "iPhone 7",
"automationName": "XCUITest",
//启动iwdp工具
"startIWDP": true,
"udid": "auto"
}
@Test
public void browserRealDevice() throws IOException {
DesiredCapabilities caps=new DesiredCapabilities();
caps.setCapability("platformName", "ios");
caps.setCapability("automationName", "xcuitest");
caps.setCapability("deviceName", "汪xx的 iPad (2)");
caps.setCapability("udid", "auto");
//核心是这两个配置
caps.setCapability("browserName", "Safari");
caps.setCapability("startIWDP", "true");
//不涉及编译不需要配置这个
//caps.setCapability("xcodeOrgId", "96NJEQL7Y2");
//caps.setCapability("xcodeSigningId", "iPhone Developer");
AppiumDriver driver=new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), caps);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("https://www.baidu.com");
System.out.println(driver.getPageSource());
driver.findElementByName("wd").sendKeys("testerhome 霍格沃兹测试学院");
FileUtils.copyFile(
driver.getScreenshotAs(OutputType.FILE).getCanonicalFile(),
new File("ios.png"));
}
webview测试
{
"platformName": "ios",
"automationName": "xcuitest",
"deviceName": "汪xx的 iPad (2)",
"udid": "auto",
"startIWDP": "true",
"app": "/Users/seveniruby/Library/Developer/Xcode/DerivedData/UICatalog-ftyzdbgapjmxxobezrnrxsshpdqh/Build/Products/Debug-iphoneos/UICatalog.app",
"xcodeOrgId": "96NJEQL7Y2",
"xcodeSigningId": "iPhone Developer"
}
webview测试代码
@Test
public void UICatalogWebviewRealDevice() throws MalformedURLException {
DesiredCapabilities caps=new DesiredCapabilities();
caps.setCapability("platformName", "ios");
caps.setCapability("automationName", "xcuitest");
caps.setCapability("deviceName", "汪水华的 iPad (2)");
caps.setCapability("udid", "auto");
//webview或者web的配置
caps.setCapability("startIWDP", "true");
//真机运行编译依赖的配置
caps.setCapability("app", "/Users/seveniruby/Library/Developer/Xcode/DerivedData/" +
"UICatalog-ftyzdbgapjmxxobezrnrxsshpdqh/Build/Products/Debug-iphoneos/UICatalog.app");
caps.setCapability("xcodeOrgId", "96NJEQL7Y2");
caps.setCapability("xcodeSigningId", "iPhone Developer");
AppiumDriver driver=new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), caps);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//点击Web View
driver.findElementByAccessibilityId("Web View").click();
//打印原生page source
System.out.println(driver.getPageSource());
//切换到最后一个context,一般是webview
driver.context(driver.getContextHandles().toArray()[1].toString());
//打印webview的page source
System.out.println(driver.getPageSource());
//用css定位找元素点击
driver.findElementByCssSelector(".cta").click();
}
常见问题
wda启动端口为0
单独执行的时候在前面加个环境变量 USE_PORT
USE_PORT=8100 xcodebuild build-for-testing test-without-building -project /usr/local/lib/node_modules/appium/node_modules/_appium-xcuitest-driver@2.89.0@appium-xcuitest-driver/WebDriverAgent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination id=9df22446af15919c494c85b4c1c8b00eaa3a5bd0 -xcconfig /var/folders/mk/xf15bt7n07b5p0z1g3n0c1300000gq/T/2018719-5091-d57w03.7e1gw/appium-temp.xcconfig
需要使用xcode更新bundleID,这个多数是跟免费版本的证书有关
https://github.com/appium/appium/issues/8144
作业1
在真机上运行一个简单的自动化测试用例, 如果有真机就在本地练习。
如果没有可以用思寒老师的appium地址:10.130.32.52,这个方式必须使用演练代码里的相关caps才可以。
最后把演练的代码贴到回复里
作业2
webview测试
作业3
浏览器的测试