Appium-环境安装

为什么要使用Appium?

1、工作需要,跟上步伐
2、Appium除了安装环境麻烦了点,其他都还算便利吧

最新版Appium和旧版本Appium的区别在哪里?

新版本:
120406.png
旧版本:
120407.png
了解的不多,后续更新

一、两种客户端安装方式(以android为例)

(1) 客户端方式
  1. 下载&安装客户端
    http://appium.io/

  2. 打开客户端,先按默认设置,再点击启动按钮
    120401.png
    120402.png
    120403.png

  3. 运行demo程序,并观察日志
    120404.png
    其中:
capabilities.setCapability("unicodeKeyboard", true);
capabilities.setCapability("resetKeyboard", true);

防止android键盘自动弹出

(2) 命令行安装

  1. 安装官网说的:
brew install node      # get node.js
npm install -g appium  # get appium
npm install wd         # get appium client
appium &               #

PS:
首先 mac下安装homebrew
https://brew.sh/

  1. 安装appium-doctor
npm install appium-doctor -g

建议安装完后重启下mac

测试环境环境是否健全:

appium-doctor
  1. 启动Applium
appium --platform-name "Android" --platform-version "7.1.2" --no-reset --chromedriver-port "9514" --app-pkg "your-app-package" --app-activity "your-app-activity"

启动后如下图:
120405.png
4. 执行demo,并观察日志

android 获取包名的方式:

http://blog.csdn.net/jane1229/article/details/39937015

二、以IOS为例

  1. 按照上面android的安装方法后,打开客户端,然后运行脚本
    120502.png
    出现报错:
    image.png
解决方法:
npm install -g ios-deploy
  1. 安装ios-deploy后,还是报这个错,没办法只好用命令行方式
  2. 下载webdriveragent并编译
    ps:首先不确定,是否一定要自己编译。。改天去找找官方文档吧,坑
    http://cdn2.jianshu.io/p/ae8846736dba
  3. ios手机上确保已安装了webdriveragent后,打开命令“appium”,启动demo程序
  4. 到此,一切安装成功,程序也出结果了:test begin
    120503.png

三、h5的例子

使用macaca读取元素

http://www.jianshu.com/p/8b48f8105880

使用chrome开发者工具,读取元素

1、连上手机
2、使用chrome打开链接:chrome://inspect/#devices(不要勾选:Discover USB devices、Discover network targets)
3、选择手机,查看需要的h5页面,定位元素,获取xpath、cssSelector等

使用uiautomatorViewer读取元素

121301.png

以android为例子

1、准备好app
2、准备好代码

@Test
    public void test() throws InterruptedException {
        driver.findElement(By.id("rbtn_test")).click();
        driver.findElement(By.id("btn_start")).click();

        WaitTool.waitForVisible(driver, By.xpath("//*[@resource-id=\"app\"]/android.view.View[2]/android.view.View[1]/android.view.View[1]/android.view.View[1]"),15);
        driver.findElement(By.xpath("//*[@resource-id=\"app\"]/android.view.View[2]/android.view.View[1]/android.view.View[1]/android.view.View[1]")).click();

        Set<String> contextNames = driver.getContextHandles();
        for (String contextName : contextNames) {
            logger.info("contextName = " + contextName);
            if (contextName.contains("WEBVIEW")) {
                driver.context(contextName);
            }
        }

        WaitTool.waitForVisible(driver, By.xpath("//*[@id=\"go\"]"), 15);
        driver.findElement(By.xpath("//*[@id=\"u\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"u\"]")).sendKeys("xxxx");
        driver.findElement(By.xpath("//*[@id=\"p\"]")).sendKeys("xxxx");
        driver.findElement(By.xpath("//*[@id=\"go\"]")).click();

        WaitTool.changeWindow(driver, By.cssSelector("#app > div > div.am-wingblank.am-wingblank-lg > div > div.status-text"), 15);

        boolean flag = false;
        while (true) {
            WebElement waitElement = driver.findElement(By.cssSelector("#app > div > div.am-wingblank.am-wingblank-lg > div > div.status-text"));

            switch (waitElement.getText()) {
                case "导入成功!":
                    flag = true;
                    logger.info(waitElement.getText());
                    break;
                case "导入失败!":
                    flag = true;
                    logger.info(waitElement.getText());
                    break;
                default:
                    logger.info(waitElement.getText());
                    Thread.sleep(3000);
                    driver.manage().timeouts().implicitlyWait(2, SECONDS);
            }

            if (flag){
                break;
            }
        }
    }

4、多个h5时,切换处理如下:

public static void change(AppiumDriver driver){
        int a = driver.getWindowHandles().toArray().length;
        logger.debug("a = " + a);
        driver.switchTo().window((String) driver.getWindowHandles().toArray()[a-1]);
        try {
            logger.info("url = " + driver.getCurrentUrl());
        }catch (Exception e){
            try {
                Alert alert = driver.switchTo().alert();
                alert.accept();
            }catch (Exception e1){
                e1.printStackTrace();
            }
        }
    }

以ios为例

1、读取元素

https://github.com/mykola-mokhnach/Appium-iOS-Inspector
(1) clone或者下载解压包后,打开目录中的iOS Inspector.html
(2) debug工程
(3) 刷新打开了的iOS Inspector.html
(4) 就有结果了。。。
121302.png
2、准备.app文件
3、运行demo工程

@Test
    public void test() throws InterruptedException {System.out.println("test begin");

        // 选择环境
        driver.findElementByIosNsPredicate("type == 'XCUIElementTypeButton' and label == '请选择环境'").click();
        driver.findElementByIosNsPredicate("type == 'XCUIElementTypeButton' and label == '测试环境'").click();
        driver.findElementByIosNsPredicate("type == 'XCUIElementTypeButton' and label == '点击测试'").click();

        WaitTool.waitForVisible(driver, MobileBy.iOSNsPredicateString("label contains '已阅读'"),10);
        List<IOSElement> list_mail = driver.findElementsByIosNsPredicate("type == 'XCUIElementTypeImage'");
        list_mail.get(2).click();

        WaitTool.waitForVisible(driver, MobileBy.iOSNsPredicateString("type == 'XCUIElementTypeSecureTextField'"),10);
        List<IOSElement> list_login_username = driver.findElementsByIosNsPredicate("type == 'XCUIElementTypeTextField'");
        List<IOSElement> list_login_password = driver.findElementsByIosNsPredicate("type == 'XCUIElementTypeSecureTextField'");
        list_login_username.get(0).sendKeys("xxxx");
        list_login_password.get(0).sendKeys("xxxxx");

        driver.findElementByIosNsPredicate("type == 'XCUIElementTypeButton' and label == '登录'").click();

        WaitTool.waitForVisible(driver, MobileBy.iOSNsPredicateString("type == 'XCUIElementTypeStaticText'"),10);

        boolean flag = false;
        while (true) {
            List<IOSElement> waitElements = driver.findElementsByIosNsPredicate("type == 'XCUIElementTypeStaticText'");

            if (waitElements.size() > 1 ) {
                flag = run(waitElements.get(2));
            }else {
                flag = run(waitElements.get(0));
            }

            if (flag){
                break;
            }
        }
Appium - iOS 定位方式 iOSNsPredicateString 详解:

https://testerhome.com/topics/9405

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值