IOS自動テスト環境の構成のIOSオートメーション環境のインストール構成と簡単なテストケースの書き込み(シミュレータ、実機)の[(C)を学習マック+ Appium + Java1.8] [マック+ Appium + Python3.6は(C)の学習] Appium1.6開始iOSの実機

前提条件:

===========================================

1.XcodeバージョンXcode10上記及び
ためのXcode 10.0 2.Appiumバージョンは、1.9以上である必要があります

デスクトップ-3.appium
4.依存ライブラリがあって、インストールに必要な:

a.Homebrew

b.Git

c.node( brew install node

d.npm( brew install npm
e.carthage( brew install carthage
f.libimobiledevice(本当のテストが必要です)( brew install libimobiledevice
g.ios-展開(実際のテストが必要)( brew install ios-deploy

5、WDA配置

===========================================

上記の具体的な基準環境設定:

[マック+ Appium学習()]インストールのAppiumは、環境条件を準備します

" IOS自動テスト環境の設定の[(C)を学習マック+ Appium + Python3.6] "

環境:

  • MacOSの:10.13.6
  • エポック:1.9.1
  • Appium - デスクトップ:1.7.1
  • Javaの:1.8
  • XCodeの:10.0

 

まず、テスト環境をインストールします

図1に示すように、コンフィギュレーションは、一次IOSシミュレータを見ていない上記。

以下に示すように1)シミュレータを開くために、選択されたXcodeのを開きます。

私たちは、シミュレータを開始します。

シミュレータのバージョンを選択することができ、私はiPhone7を選びました:

 

あなたはシミュレータを閉じたい場合は、下に示すように、閉じられたウィンドウを閉じるにはもう一度クリックします。

 

下面去appium官网下载IOS演示程序:

地址:https://github.com/appium/ios-uicatalog

项目clone到本地环境:

$ git clone https://github.com/appium/ios-uicatalog.git
Cloning into 'ios-uicatalog'...
remote: Enumerating objects: 294, done.
remote: Total 294 (delta 0), reused 0 (delta 0), pack-reused 294
Receiving objects: 100% (294/294), 6.63 MiB | 1.35 MiB/s, done.
Resolving deltas: 100% (159/159), done.

命令打开项目:

$ open UICatalog.xcodeproj/

2、模拟器上跑自动化

1)刚刚的项目在模拟器中进行编译:

点击红框

会自动启动模拟器:

 

2)然后拷贝项目app的xpath,来配置在参数中:

①拷贝到参数中

会报错:

Original error: '10.3.1' does not exist in the list of simctl SDKs. Only the following Simulator SDK versions are available on your system: 10.3, 12.0

 意思是没有'10.3.1',只有'10.3、12.0'版本的SDK,所以手动修改:

又报错:

Original error: Could not create simulator with name 'appiumTest-iPhone7', device type id 'iPhone7' and runtime id '10.3.1'. Reason: 'simctl error running 'create': Invalid device type: iPhone7'

经过查询得知:

感谢:每天1990:《Appium1.6启动iOS真机*很重要

解决方法:
Appium参数也必须设置udid,在启动的Desired Capabilities增加udid

②udid通过命令获取:

instruments -s devices

获取你打开的模拟器的id。

再运行session:

完整参数如下:

{
  "platformName": "iOS",
  "platformVersion": "10.3",
  "deviceName": "iPhone7",
  "automationName": "XCUITest",
  "app": "/Users/xxx/Library/Developer/Xcode/DerivedData/UICatalog-hiixtcsjcynttngjfqlnzjjtpxkv/Build/Products/Debug-iphonesimulator/UICatalog.app",
  "udid": "D3062BB8-5627-4867-8E97-AEDF6D953353"
}

3)并且输入地址:http://localhost:8100/inspector,也会有检查器显示。

4)设置log路径,如图:

①第一种在appium桌面程序设置log路径:

②第二种用命令行重新启动一个自己的appium(相当于新建一个appium服务5723

输入命令:

$ appium -g /Users/xxx/Desktop/mine/Stu资料/Git/git—download/project/appium2.log -p 5723
[Appium] Welcome to Appium v1.9.1
[Appium] Non-default server args:
[Appium]   port: 5723
[Appium]   log: /Users/xxx/Desktop/mine/Stu资料/Git/git—download/project/appium2.log
[Appium] Appium REST http interface listener started on 0.0.0.0:5723

再设置参数启动:

同样可以启动app,并且生成appium2.log文件。

5)扩展:对Simulator控制

https://github.com/facebook/FBSimulatorControl/blob/master/fbsimctl/README.md

6)编写用例

利用IDEA编辑器,在之前《【Mac + Appium + Java1.8学习(一)】之Android自动化环境安装配置以及IDEA配置(附录扩展Selenium+Java自动化)》已经介绍如何使用配置IDEA。

之前在appium-desktop中可以自动生成代码,把它复制到IDEA中,如图:

但是,从现在开始先暂时不用appium-desktop,用XCode自带的查看元素工具。

如图步骤:

 

上代码:

解释=>findElementByAccessibilityId,如果包含name属性则可以使用。

参考官网:http://appium.io/docs/en/writing-running-appium/finding-elements/

package IOS_Simulator;

import io.appium.java_client.ios.IOSDriver;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.remote.DesiredCapabilities;

import java.net.MalformedURLException;
import java.net.URL;

public class DemoTest {

    private IOSDriver driver;

    @Before
    public void setUp() throws MalformedURLException {
        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
        desiredCapabilities.setCapability("platformName", "iOS");
        desiredCapabilities.setCapability("platformVersion", "10.3");
        desiredCapabilities.setCapability("deviceName", "iPhone7");
        desiredCapabilities.setCapability("automationName", "XCUITest");
        desiredCapabilities.setCapability("app", "/Users/xxx/Library/Developer/Xcode/DerivedData/UICatalog-hiixtcsjcynttngjfqlnzjjtpxkv/Build/Products/Debug-iphonesimulator/UICatalog.app");
        desiredCapabilities.setCapability("udid", "D3062BB8-5627-4867-8E97-AEDF6D953353");

        URL remoteUrl = new URL("http://127.0.0.1:4723/wd/hub");

        driver = new IOSDriver(remoteUrl, desiredCapabilities);
    }

    @Test
    public void sampleTest() {
//        MobileElement el1 = (MobileElement) driver.findElementByXPath("//XCUIElementTypeApplication[@name=\"UICatalog\"]/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeTable/XCUIElementTypeCell[4]");
//        el1.click();
//        MobileElement el2 = (MobileElement) driver.findElementByXPath("(//XCUIElementTypeButton[@name=\"Button\"])[2]");
//        el2.click();
        driver.findElementByAccessibilityId("Buttons").click();
//        driver.getPageSource().sout ===> System.out.println(driver.getPageSource());
        System.out.println(driver.getPageSource());
        driver.findElementByXPath("//*[@label='Button']").click();
        driver.findElementByAccessibilityId("UICatalog").click();
    }

    @After
    public void tearDown() {
//        driver.quit();
    }
}

运行结果:

3、真机上跑自动化

真机官网地址说明:http://appium.io/docs/en/drivers/ios-xcuitest-real-devices/

1)配置参数

为了入门学习,还是要启动appium-desktop,完整参数:app参数有坑

{
  "platformName": "iOS",
  "platformVersion": "10.3",
  "deviceName": "iPhone5s",
  "automationName": "XCUITest",
  "app": "/Users/xxx/Library/Developer/Xcode/DerivedData/UICatalog-hiixtcsjcynttngjfqlnzjjtpxkv/Build/Products/Debug-iphonesimulator/UICatalog.app",
  "udid": "42ebab931b6b2d6a140b1a4f5bd55305dbfe2ff0"
}

启动session,报错:

Original error: Could not install app: 'Command 'ios-deploy --id 42ebab931b6b2d6a140b1a4f5bd55305dbfe2ff0 --bundle /Users/zhangc/Library/Developer/Xcode/DerivedData/UICatalog-hiixtcsjcynttngjfqlnzjjtpxkv/Build/Products/Debug-iphonesimulator/UICatalog.app' exited with code 253'

因为这个app当时是在模拟器进行的配置,所以我们还要配置真机,如下:

但是报错:

Signing for "UICatalog" requires a development team. Select a development team in the project editor. (in target 'UICatalog')

 

如图修改就不报错了:

再一次运行,真机配置安装app成功:

复制app的Path到appium-desktop的参数中:

启动session后,可以加载app,如图:

2)编写自动化脚本

(1)WebView自动化

需要安装以下几个命令:

①安装依赖库:libimobiledevice

brew install libimobiledevice --HEAD 

②安装ios-webkit-debug-proxy:

官网为:

https://github.com/google/ios-webkit-debug-proxy

http://appium.io/docs/en/writing-running-appium/web/ios-webkit-debug-proxy/

# 调试转换
brew install ios-webkit-debug-proxy

并且IOS手机设置一下Web检查器:设置->safari浏览器->高级->Web检查器->打开

# 扩展:手机截图
idevicescreenshot

安装完成后,进行appium-desktop参数配置:

{
  "platformName": "iOS",
  "platformVersion": "10.3",
  "deviceName": "iPhone5s",
  "automationName": "XCUITest",
  "udid": "auto",  # 默认第一台连接设备
  "startIWDP": true,
  "browserName": "Safari"
}

启动session后,成功:

③编写脚本

package IOS.Real;

import io.appium.java_client.ios.IOSDriver;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.remote.DesiredCapabilities;

import java.net.MalformedURLException;
import java.net.URL;

public class DemoTest_WebView {

    private IOSDriver driver;

    @Before
    public void setUp() throws MalformedURLException {
        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
        desiredCapabilities.setCapability("platformName", "iOS");
//        desiredCapabilities.setCapability("platformVersion", "10.3");
        desiredCapabilities.setCapability("deviceName", "auto");
        desiredCapabilities.setCapability("automationName", "XCUITest");
        desiredCapabilities.setCapability("udid", "auto");
        desiredCapabilities.setCapability("startIWDP", true);
        desiredCapabilities.setCapability("browserName", "Safari");
//        42ebab931b6b2d6a140b1a4f5bd55305dbfe2ff0
        URL remoteUrl = new URL("http://localhost:4723/wd/hub");

        driver = new IOSDriver(remoteUrl, desiredCapabilities);
    }

    @Test
    public void web(){
        driver.get("https://testerhome.com");
        driver.findElementByXPath("//*[contains(@title,'北京管理沙龙')]").click();
//        driver.get("https://appium.io/");
//        driver.findElementByXPath("(//XCUIElementTypeOther[@name=\"导航\"])[1]").click();
    }

    @After
    public void tearDown() {
//        driver.quit();
    }
}

运行代码后一直报错,后来经过痛苦的查询得知:

参考解决地址:《AppiumDriver driver = new AppiumDriver 的AppiumDriver报错问题解决

WebDriverException: An unknown server-side error occurred while processing the command. Original error: Unhandled endpoint 

错误日志:org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: Unhandled endpoint: /session/763C2E9E-9078-4931-BDF3-A05C2E3AF2E5/wda/screen -- http://localhost:8100/ with parameters {
wildcards = (
"session/763C2E9E-9078-4931-BDF3-A05C2E3AF2E5/wda/screen"
);
}

代码执行到这里就报错:

driver = new IOSDriver(remoteUrl, desiredCapabilities);

因为使用的appium-client版本太高导致的,后来在Maven中由6.1.0版本降到5.0.4版本再运行就好了

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/Owen-ET/p/10026984.html