appium在mac上的配置

来源:互联网 发布:最新网络流行语段子 编辑:程序博客网 时间:2024/05/29 18:56

参考链接:安装appium:https://github.com/erduoniba/appium_ios_sample_code

1、下载或者更新Homebrew:homebrew官网 macOS 不可或缺的套件管理器

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"  #下载$ brew update #更新$ brew -vHomebrew 1.1.5

2、使用homebrew来安装node.js : Node.js教程 node采用C++编写,是一个JavaScript的运行环境,因为JS是脚本语言需要一个解析器才能运行,对于写在HTML页面的JS,浏览器本身就是解析器,对于需要单独运行的JS,Node.js就是解析器。

$ brew install node$ node -vv7.3.0

3、安装npm: NPM 使用介绍 是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。

$ brew install npm
$ npm -v4.1.2

4、使用npm来安装appium,2017/01/03目前最新的版本是 1.6.3 ,当然也可以在 Macos下bitbucket下载appium客户端,但是坑人的是最新版本是 1.5.3 支持的还只是 iOS10 以下的 UIAutomation 框架基础上测试,而 iOS10 以后苹果使用的却是基于 XCUITest ,所以只能采用npm安装咯。但是因为国内墙太高而使用npm却是从国外服务器下载,有时候使用npm需要非常长的时间,更多时候是失败,推荐使用cnpm来安装:淘宝 NPM 镜像 10分钟同步npmjs.org镜像,使用方式和npm完全一致

$ npm install cnpm -g --registry=https://registry.npm.taobao.org

使用cnpm安装appium和appium-doctor:

$ cnpm install -g appium --no-cache$ cnpm install -g appium$ cnpm install -g appium-doctor
若网速较好并且代理正常的话可以直接使用npm install -g appium进行安装,并安装appium-doctor
appium -v
1.6.3

6、安装wd

npm install wd

7、检查appium环境检测:

$ appium-doctor
若展示Everything looks good, bye!则安装完成,若出错请根据提示进行配置,主要是全局配置文件上的问题修改.bash_profile文件
至此,appium的安装已经完成

appium在ios10 真机上的使用:参考链接:http://blog.csdn.net/wuxuehong0306/article/details/54377957

另加步骤

  • 1,有一个MAC机器,或者虚拟机,能够联网,要求Xcode8+ MAC系统10.11+(我用的是Xcode8.2 , MAC系统10.12)有一个Apple ID账号
  • 2,安装brew(这一步已经在之前安装appium时已经完成)
usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 3,安装libimobiledevice
brew install libimobiledevice --HEAD 
  • 4,安装carthage(在appium-doctor中会有这一项目的检测,若没有安装会提示carthage was not found,通过以下方式安装)
brew install carthage
  • 5,安装node(这一步已经在之前安装appium时已经完成)
  • 6,安装cnpm(这一步已经在之前安装appium时已经完成)(由于某种原因,直接用npm下载安装会有好多网络问题,安装淘宝的cnpm要比npm好用) https://npm.taobao.org/
  • 7,安装ios-deploy

cnpm install -g ios-deploy

  • 8,安装xcpretty(可能会提示没有write权限,可以在指令前加上sudo 后执行)
  • gem install xcpretty
    • 11,安装appium-xcuitest-driver依赖(针对ios10 以上的处理)        进入WebDriverAgent安装目录。运行bootstrap
    cd  /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent (如果WebDriverAgent 所在路径和此不同,请自行查找)mkdir -p Resources/WebDriverAgent.bundlesh ./Scripts/bootstrap.sh -d

           在运行sh ./Scripts/bootstrap.sh -d很可能会有因为某种原因而网络连接失败。方法就是去App store下载了一个VPN代理软件.
           再次运行sh ./Scripts/bootstrap.sh -d 无报错就OK了(显示 -e Fetching dependencies)

    • 12,用Xcode打开WebDriverAgent,并且编译
             进入WebDriverAgent 文件夹,可用如下方法

             双击WebDriverAgent.xcodeproj打开此项目,这个项目由facebook开源 有兴趣的话可以研究https://github.com/facebook/WebDriverAgent/apple。在这里我们的目的就是更改一些配置,让他能够编译成功
             编译WebDriverAgentLib

             编译WebDriverAgentRunner

      关于为什么要设置Deployment Target,苹果官方宣称XCUItest支持9.3.4以上。但实际经过我测试9.0以上是没问题的,但是如果不调低最小安装的ios版本,会面临着WebDriverAgentRunner无法安装到ios9.0的手机上去的,所以无法测试ios9。
      若果编译的过程中有语法错误,应该是11步没有安装好
      若编译出现,.h文件无法找到,可以尝试先用intellij idea执行测试代码,之后再用xcode编译一遍可以解决此问题
13,建立服务WebDriverAgent (手机和MAC都在同一个网段下,且都能连接外网)
       关闭Xcode,进入WebDriverAgent 文件夹
  • cd  /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgentxcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=真机的udid' test

           运行到最后会发现


           而iphone多了一个WebDriverAgentRunner的app。手动启动那个app的时候

           原因是我们手机并并没有信任这个apple id的开发者,到设置-通用-设备管理(描述文件) 信任你的apple id就可以了。再次运行上述命令,看到如下图,就成功了,
    • 14,运行appium
    appium -p 4723
    至此mac机器上关于ios10真机的配置已经完成
相关测试代码的编写:参考链接:http://blog.csdn.net/niubitianping/article/details/52523239?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
  • 导入所需要的jar包
java-client-4.1.2.jar (http://maven.outofmemory.cn/io.appium/java-client/4.1.2/)
selenium-server-standalone-3.0.0-beta3.jar(http://docs.seleniumhq.org/download/)

下载相应的jar后,复制到项目中,并点击右键选择add as library添加到项目中

  • 相关代码
package com.saucelabs.appium;


import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;


import java.io.File;
import java.net.URL;
import java.util.List;


public class AndroidContactsTest {
    private AppiumDriver<AndroidElement> driver;


    @Before
    public void setUp() throws Exception {
        // set up appium
        File classpathRoot = new File(System.getProperty("user.dir"));

//android 相关代码

        File appDir = new File(classpathRoot, "/src/test/java/apps/");//将官方apk放置到自己设置的文件夹下
        File app = new File(appDir, "ContactManager.apk");//https://github.com/appium/sample-code/blob/master/sample-code/apps/ContactManager/ContactManager.apk 官方给出的测试apk
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName","SM-N9200");//设备名
        capabilities.setCapability("platformVersion", "6.0.1");//设备android版本
        capabilities.setCapability("app", app.getAbsolutePath());


//ios相关代码

File appDir = new File(System.getProperty("user.dir"), "/src/test/java/apps/");//将官方ipa放置到自己设置的文件夹下
        File app = new File(appDir, "TestApp.app");//https://github.com/appium/sample-code/tree/master/sample-code/apps/TestApp 官方给出的测试用ios程序,笔者直接使用TestApp/build/release-iphonesimulator/TestApp.app文件无法正常使用,因此使用TestApp.xcodeproj自行编译后,采用了编译代码后的ipa包
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "10.2");//测试真机的ios版本
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone");//测试真机的name,通过xcode查看
capabilities.setCapability(MobileCapabilityType.UDID, "8dbf13a9fd894edfcc537cfc89399b8f03754182");//设备的udid
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
capabilities.setCapability("platformName", "iOS");
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "XCUITest");//ios10需要使用xcuitest,进行处理

uiTestApp = new TestAppScreenSimple();
driver = new IOSDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
System.out.println("driver ="+driver.getPageSource());
PageFactory.initElements(new AppiumFieldDecorator(driver), uiTestApp);



        driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    }


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


    @Test
    public void addContact(){
        WebElement el = driver.findElement(By.xpath(".//*[@text='Add Contact']"));
        el.click();
        List<AndroidElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");
        textFieldsList.get(0).sendKeys("Some Name");
        textFieldsList.get(2).sendKeys("Some@example.com");
        driver.swipe(100, 500, 100, 100, 2);
        driver.findElementByXPath(".//*[@text='Save']").click();
    }
}


0 0