线下第三期_iOS 真机测试_20180819

真机运行

模拟器编译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"
}

真机测试

真机测试代码

    @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();
    }

浏览器测试

先开启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

浏览器的测试