zoukankan      html  css  js  c++  java
  • appium导入哪些java模块

    简单介绍

    讲解一个appium测试脚本需要导入哪些java模块。

    导入的java模块

    明确两点信息:

    • 一个脚本需要讲清楚测试环境:1、自动化平台方面,测试的平台是什么(appium或者selendroid,selendroid用于测试低版本的Android系统的app);2、被测试设备方面,被测试设备的平台(Android或者iOS),被测试设备的名字,被测试设备的系统版本;3、被测试应用方面,待测应用是移动web应用(使用移动端浏览器)还是原生/混合应用,若不是web应用,那么是否需要安装包进行安装,该应用的package和activity是什么。
    • appium是对selenium的扩展,又细分为Android方向的扩展和iOS方向的扩展。例如,WebElement可以操作selenium中的命令;MobileElement是appium中的元素,是WebElement的子类,添加了一些移动端独有的手势操作;AndroidElement和iOSElement都是MobileElement的子类,各自添加了一些系统特有的功能。又比如,RemoteWebDriver是selenium中的,AppiumDriver是其子类,添加了一些移动端的功能;AndroidDriver和iOSDriver是AppiumDriver的子类,分别适用于特定的系统。

    看下面例子。

     1 import org.openqa.selenium.remote.CapabilityType;//指明移动端浏览器的名字,移动web测试时需要此模块
     2 import org.openqa.selenium.remote.DesiredCapabilities;//创建一个capability变量容纳测试环境参数,比如测试平台、测试设备、待测应用等。所有测试都需要这个模块。
     3 import org.testng.Assert;//用于断言测试结果是否与期待值相符。testng和junit都是单元测试的模块,选用其一即可。
     4 
     5 import org.testng.annotations.Test;//标注哪些方法是测试用例。
     6 import org.testng.annotations.AfterTest;//标注哪些方法是清理工作,一般用于退出driver。
     7 
     8 import io.appium.java_client.MobileElement;//用于操作待测应用中的元素,类似功能的还有AndroidElement和iOSElement,必须选用其中一个。
     9 import io.appium.java_client.TouchAction;
    10 import io.appium.java_client.android.AndroidDriver;//与待测设备建立session,用于操作待测应用,类似功能的还有AppiumDriver和iOSDriver,必须选用其中一个。
    11 import io.appium.java_client.remote.AndroidMobileCapabilityType;//用于指明APP_PACKAGE、APP_ACTIVITY参数。
    12 import io.appium.java_client.remote.AutomationName;//指明测试平台的名字,appium或者selendroid。
    13 import io.appium.java_client.remote.MobileCapabilityType;//用于指明PLATFORM_NAME,DEVICE_NAME,PLATFROM_VERSION,APP等参数。
    14 
    15 import java.io.File;//操作应用文件。
    16 
    17 import java.net.URL;//配置appium server监听的地址。

    完整脚本

     1 package main.java.com.dbyl.appiumCore.tests;
     2 
     3 import org.openqa.selenium.remote.CapabilityType;
     4 import org.openqa.selenium.remote.DesiredCapabilities;
     5 import org.testng.Assert;
     6 
     7 import org.testng.annotations.Test;
     8 import org.testng.annotations.AfterTest;
     9 
    10 import io.appium.java_client.MobileElement;
    11 import io.appium.java_client.TouchAction;
    12 import io.appium.java_client.android.AndroidDriver;
    13 import io.appium.java_client.remote.AndroidMobileCapabilityType;
    14 import io.appium.java_client.remote.AutomationName;
    15 import io.appium.java_client.remote.MobileCapabilityType;
    16 
    17 import java.io.File;
    18 
    19 import java.net.URL;
    20 import java.util.List;
    21 import java.util.concurrent.TimeUnit;
    22 
    23 public class unlockerTest {
    24     private AndroidDriver<MobileElement> driver;
    25 
    26     @Test
    27     public void Demo() throws Exception {
    28 // set up appium
    29         DesiredCapabilities capabilities = new DesiredCapabilities();
    30         capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.APPIUM);
    31 // for native app set null, for web test please set chrome or firefox
    32         capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
    33 
    34         capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
    35         capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
    36 // simulator version 4.4
    37         capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");
    38 // if no need install don't add this
    39 //        File classpathRoot = new File(System.getProperty("user.dir"));
    40         File classpathRoot = new File("/Users/wwh/IdeaProjects");
    41         File appDir = new File(classpathRoot, "apps");
    42         File app = new File(appDir, "Locker.apk");
    43         capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
    44 // package name
    45         capabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "com.AppiumGirls.locker");
    46 // // support Chinese
    47         capabilities.setCapability("unicodeKeyboard", "True");
    48         capabilities.setCapability("resetKeyboard", "True");
    49 // no need sign
    50         capabilities.setCapability("noSign", "True");
    51 // launcher activity
    52         capabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, ".MainActivity");
    53         String url = "http://localhost:4723/wd/hub";
    54         driver = new AndroidDriver<MobileElement>(new URL(url), capabilities);
    55 
    56         driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    57 
    58         MobileElement button = driver.findElementByAndroidUIAutomator("new UiSelector().text("设置手势密码")");
    59 // tap
    60         button.tap(1, 1000);
    61 // get all the items of gesture locker
    62         List<MobileElement> items = driver.findElementsByClassName("android.widget.ImageView");
    63         for (MobileElement item : items) {
    64 /**
    65  * 0 1 2 3 4 5 6 7 8
    66  */
    67             item.click();
    68         }
    69 
    70 // create a Z from 0->1->2->4->6->7->8
    71         TouchAction touches1 = new TouchAction(driver);
    72         touches1.press(items.get(0)).waitAction(1000).moveTo(items.get(1)).waitAction(1000).moveTo(items.get(2))
    73                 .waitAction(1000).moveTo(items.get(4)).moveTo(items.get(6)).waitAction(1000).moveTo(items.get(7))
    74                 .waitAction(1000).moveTo(items.get(8)).release();
    75         touches1.perform();
    76         Thread.sleep(2000);
    77 //create 0->1->2
    78         TouchAction touches2 = new TouchAction(driver);
    79         touches2.press(items.get(0)).waitAction(1000).moveTo(items.get(1)).waitAction(1000).moveTo(items.get(2))
    80                 .waitAction(1000).moveTo(items.get(4)).release();
    81         touches2.perform();
    82         MobileElement alert =driver.findElementById("com.AppiumGirls.locker:id/text_tip");
    83         Assert.assertTrue(alert.getText().contains("与上一次绘制不一致,请重新绘制"));
    84 
    85     }
    86 
    87     @AfterTest
    88     public void Teardown(){
    89         driver.quit();
    90     }
    91 }
  • 相关阅读:
    (一)Python入门-6面向对象编程:10特殊方法和运算符重载-特殊属性
    (一)Python入门-6面向对象编程:09多态
    (一)Python入门-6面向对象编程:08多重继承-mro()-super()获得父类的定义
    (一)Python入门-6面向对象编程:07面向对象三大特征(封装、继承、多态)-继承
    (一)Python入门-6面向对象编程:06私有属性和私有方法(实现封装)-@property装饰器-get和set方法-总结
    (一)Python入门-6面向对象编程:05方法没有重载-方法的动态性
    (一)Python入门-6面向对象编程:04__del__方法(析构函数)和垃圾回收机制-__call__方法和可调用对象
    python并发编程
    python学习笔记:第21天 常用内置模块之collections和time
    python学习笔记:第20天 多继承、MRO C3算法
  • 原文地址:https://www.cnblogs.com/superbaby11/p/6381067.html
Copyright © 2011-2022 走看看