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 xlrd模块导入过程及常用操作
- 下一篇 »python导入模块时对路径的处理