• (转) [Android测试] AS+Appium+Java+Win自动化测试之三: 基础知识和Appium界面


    一、把上一章的demo先看懂

    AndroidContactsTest.Java

    public class AndroidContactsTest {
    
        //Driver
        private AppiumDriver<AndroidElement> driver;
    
    
        /**
         * 配置启动driver
         * @throws Exception
         */
        @Before
        public void setUp() throws Exception {
    
            File classpathRoot = new File(System.getProperty("user.dir"));
            //app的目录
            File appDir = new File(classpathRoot, "/src/main/java/apps/");
            //app的名字,对应你apps目录下的文件
            File app = new File(appDir, "ContactManager.apk");
            //创建Capabilities
            DesiredCapabilities capabilities = new DesiredCapabilities();
            //设置要调试的模拟器的名字
            capabilities.setCapability("deviceName","minote");
            //设置模拟器的系统版本
            capabilities.setCapability("platformVersion", "4.4.2");
            //设置app的路径
            capabilities.setCapability("app", app.getAbsolutePath());
            //设置app的包名
            capabilities.setCapability("appPackage", "com.example.android.contactmanager"); 
            //设置app的启动activity
            capabilities.setCapability("appActivity", ".ContactManager");
            //启动driver
            driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    
        }
    
        @After
        public void tearDown() throws Exception {
            //测试完毕,关闭driver,不关闭将会导致会话还存在,下次启动就会报错
            driver.quit();
        }
    
    
        /**
         * 要执行的的测试方法
         */
        @Test
        public void addContact(){
            //利用Xpath的方法寻找text值为Add Contact的控件
            WebElement el = driver.findElement(By.xpath(".//*[@text='Add Contact']"));
            //点击这个控件
            el.click();
            //利用类名获取界面上所有的EditText
            List<AndroidElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");
            //第一个EditText输入内容Some Name
            textFieldsList.get(0).sendKeys("Some Name");
            //第三个EditText输入内容Some Name
            textFieldsList.get(2).sendKeys("Some@example.com");
            //在坐(100,500)滑动到(100,100) 时间为2毫秒
            driver.swipe(100, 500, 100, 100, 2);
            //用xpath的方式寻找到text值为Save的控件,然后点击
            driver.findElementByXPath(".//*[@text='Save']").click();
        }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    二、Selenium 是什么?

    Selenium是一套完整的web自动化测试工具集,它包含了测试的录制(Selenium IDE)、编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)、WebDriver(selenium 2.0)等。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可运行于任何支持javascript的浏览器上。与WatiN相同,Selenium也是一款同样使用Apache License 2.0协议发布的开源框架

    Selenium IDE 是firefox浏览器的一个插件。提供简单的脚本录制、编辑与回放功能。

    Selenium Grid 是用来对测试脚步做分布式处理。现在已经集成到selenium server 中了。

    RC和WebDriver 更多应该把它看成一套规范,在这套规范里定义客户端脚步与浏览器交互的协议。以及元素定位与操作的接口。

    三、WebDriver 是什么?

    其实它就是一层基础的协议规范。

    假如说:Webdriver API(接口规范)说,我们要提供一个页面元素id的定位方法。

    import org.openqa.selenium.*;
    import org.openqa.selenium.firefox.FirefoxDriver;//导入java版的selenium(webdriver)
    
    findElement(By.id("xx"));    //id定位方法
    • 1
    • 2
    • 3
    • 4
    • 1
    • 2
    • 3
    • 4

    四、Webdriver 如何组织和执行用例?

    把写好这些操作页面元素的方法(用例)组织起来执行并输入测试结果,是由编程语言的单元测试框架去完成的。如java 的junit和testng单元测试框架(之后会说,替换Testng)。

    五、并行与分布式的区别

    如何并行的执行测试用例,并行要求“同时”执行多条用例,这个也是由编程语言的多线程技术实现的。

    并行可以用Selenium Grid或者Testng来实现。

    Selenium Grid 不是可以实现分布式执行么?分布式的概念是写好一条用例可以调用不同的平台执行,如 A电脑上有一个测试用例,可以调用B电脑(Linux)的Firefox浏览器来跑A电脑上的测试用例;也可以调用C电脑(windows)的Chrome浏览器来跑A电脑上的测试用例。这是分布式的概念。

    六、Appium再度了解和界面

    说了那么多,其实Appium专业做MobileApp的自动化的,selenium只能操作iOSAndroid的默认浏览器。

    从本质上来讲,appium同样继承了WebDriver API的接口规范。Appium 同样是支持多种编程语言, 然后Appium还包含了Selenium。

    so Appium是非常强大的,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于iosandroid以及firefox的操作系统。原生的应用是指用android或ios的sdk编写的应用,移动网页应用是指网页应用,类似于ios中safari应用或者Chrome应用或者类浏览器的应用。混合应用是指一种包裹webview的应用,原生应用于网页内容交互性的应用。 
    重要的是Appium是跨平台的,何为跨平台,意思就是可以针对不同的平台用一套api来编写测试用例。

    Appium界面

    1. Android Setting (Android设置)

    Android相关的设置,为什么要设置呢,因为这里设置主要为了不用在脚本里面添加capabilities属性和inspector检测使用。 
    一些意思翻译过来就明白了,也不多说了

    这里写图片描述

    这里写图片描述

    2. General Setting (常规设置)

    服务器、日志记录 设置。这里服务器是本机,端口是4723,这是appium的端口,不是你模拟器的端口,不要搞混了,不用修改。

    这里写图片描述

    这里写图片描述

    3. Developer Setting (开发者设置)

    这里写图片描述

    这里写图片描述

    4.About (关于)

    这没什么好说了,主要看当前版本

    5. inspector (获取id元素的工具)

    放大镜工具,获取app界面控件属性的工具,个人认为:截屏速度快,支持元素点击(MAC的比较屌,能记录,滑动,摇一摇等等)。但没有层次感,选中控件没有提示框,属性没分割不好看。这里推荐使用sdk自带的Android Device Monitor,主要是看id和布局。

    这里写图片描述

    还是介绍一下他的使用方法:

    1. 启动模拟器
    2. 配置Adnroid Setting(选择安装包和设置设备名)
    3. 启动Appium服务
    4. 启动Inspector 
      点击放大镜打开inspector,点击Refresh,没安装的话,就会安装AnroidStting里面设置的app

    界面我都注释了:

    这里写图片描述

    6.Launch the appium node server开始停止

    界面右上角的的三角按钮

    7. 日志输出

    中间黑色背景,是显示日志的,这个日志有用,调试运行过程中都会输出日志,报错都得靠他,输出内容有: 
    info: Appium的调试信息 
    error 出现错误时候的错误信息,这个很重要,解决出错问题就看这里了

    8. clear this output log清除日志

    主界面的右下角的垃圾桶,就是清除日志的,强迫症的点点点。

    这里写图片描述

    ps: 有些内容来自互联网

  • 相关阅读:
    QTP 参数化
    功能自动化测试流程
    Oracle客户端安装及配置
    描述性编程与对象库编程的对比
    Java用Scanner类获取用户输入
    Java入门的程序汇总
    Java入门学习知识点汇总
    Java最常用的变量定义汇总
    eclipse对Java程序的移植
    JavaScript关闭窗口的同时打开新页面的方法
  • 原文地址:https://www.cnblogs.com/xuegonghou/p/7443796.html
Copyright © 2020-2023  润新知