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 }