环境搭建地址:https://www.cnblogs.com/ydnice/p/5787800.html
这个算是比较齐全的了,不过有一点一定要注意——node版本、node版本、node版本!!!
我就是因为node版本问题导致环境搭建失败,这个里面没有写,可以去node官网查看版本的对应关系
在appium自动化脚本编写的过程中,合理正确的使用api事半功倍,下面介绍使用的语言是Java,appium的版本是1.3.4,java-client的版本是java-client-2.1.0。
第一:AndroidDriver的使用,其已经继承了AppiumDriver。
private AndroidDriver driver;
@Before public void setUp() throws Exception {
DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("Name", "Android Emulator"); capabilities.setCapability("platformVersion", "4.4"); capabilities.setCapability("platformName", "Android"); capabilities.setCapability("appPackage", "com.android.settings"); capabilities.setCapability("appActivity", ".Settings");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/"), capabilities); } @After
public void tearDown() throws Exception {
driver.quit();
}
2.截屏并保存至本地
//截屏并保存至本地
File screen = driver.getScreenshotAs(OutputType.FILE);
File screenFile = new File("d:\\screen.png");
try {
FileUtils.copyFile(screen, screenFile); //commons-io-2.0.1.jar中的}
catch (IOException e) {
e.printStackTrace();
}
3.push文件、pull文件
File file = new File("d:\\test.txt"); //test.txt内容为"test" String content = null; try { content = FileUtils.readFileToString(file); } catch (IOException e) { e.printStackTrace(); } byte[]= Base64.encodeBase64(content.getBytes()); driver.pushFile("sdcard/test.txt", data); byte[] resultDate = driver.pullFile("sdcard/test.txt"); System.out.println(new String(Base64.decodeBase64(resultDate))); //打印结果为"test"
4.
//获取当前界面的activity,可用于断言是否跳转到预期的activity
driver.currentActivity();
5.
//打开通知栏界面
driver.openNotifications();
6.
//获取网络状态 int= driver.getNetworkConnection().value; System.out.println(status); //设置网络状态 driver.setNetworkConnection(new NetworkConnectionSetting(status)); //或者 driver.setNetworkConnection(new NetworkConnectionSetting(false, true, false));
7.
//启动其他应用,跨APP
driver.startActivity("com.android.camera", ".CameraLauncher");
8.
//自动滑动列表
driver.scrollTo("text");
//或者
driver.scrollToExact("text");
9.
//安装APP
driver.installApp(appPath);
//判断应用是否已安装
driver.isAppInstalled("package name");
10.
//拖动图标至日历图标位置 new TouchAction(driver).longPress(driver.findElementByName("相机")) .moveTo(driver.findElementByName("日历")).release().perform();
11.
//锁屏
driver.lockScreen(2);
//判断是否锁屏
driver.isLocked();
12.
//发送按键事件
driver.sendKeyEvent(AndroidKeyCode.HOME);
13.
//通过uiautomator定位clickable属性为true的元素并点击 driver.findElementByAndroidUIAutomator("new UiSelector().clickable(true)").click(); //相同属性的元素使用List存放
List elements = driver.findElementsByClassName("class name"); elements.get(0).click(); //点击List中的第一个元素 //,点击元素位置 driver.tap(1, driver.findElementByName("日期和时间"), 0);
初始化完成以后可以使用driver进行各种操作——
1、按压控件
方法:
press()
开始按压一个元素或坐标点(x,y)。通过手指按压手机屏幕的某个位置。
press(WebElement el, int x, int y)
press也可以接收屏幕的坐标(x,y)。
例:
TouchAction(driver).press(x=0,y=308).release().perform()
除了press()方法之外,本例中还用到了别外两个新方法。
release() 结束的行动取消屏幕上的指针。
Perform() 执行的操作发送到服务器的命令操作。
2、长按控件
方法:
longPress()
开始按压一个元素或坐标点(x,y)。 相比press()方法,longPress()多了一个入参,既然长按,得有按的时间吧。duration以毫秒为单位。1000表示按一秒钟。其用法与press()方法相同。
longPress(WebElement el, int x, int y, Duration duration)
例:
TouchAction action =newTouchAction(driver);
action.longPress(names.get(200),1000).perform().release();
action.longPress(200,200,1000).perform().release();
3、点击控件
方法:
tap()
对一个元素或控件执行点击操作。用法参考press()。
tap(WebElement el, int x, int y)
例:
TouchAction action =newTouchAction(driver);
action.tap(names.get(200)).perform().release();
action.tap(200,200).perform().release();
4、移动
方法:
moveTo()
将指针(光标)从过去指向指定的元素或点。
movTo(WebElement el, int x, int y)
其用法参考press()方法。
例:
TouchAction action =newTouchAction(driver);
action.moveTo(names.get(200)).perform().release();
action.moveTo(200,200).perform().release();
5、暂停
方法:
wait()
暂停脚本的执行,单位为毫秒。
action.wait(1000);
最后附上一部分实例代码————————
public static DesiredCapabilities setCapsforMobileBrowser(DesiredCapabilities capabilities) {
capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.APPIUM_VERSION, "1.9.0");//appium版本
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "2b2dc1d4ea9e67eb");
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4.2");
capabilities.setCapability("platformName", "Android");//平台
capabilities.setCapability("appPackage", "com.ireader.pad");//包名
capabilities.setCapability("appActivity", "com.ireader.pad.business.splash.WelcomeActivity");
capabilities.setCapability("unicodeKeyboard", true); //中文输入
capabilities.setCapability("resetKeyboard", true); //重置输入法
capabilities.setCapability("noSign", true); //无需重复签名
capabilities.setCapability("noRest", true); //无需重启
//capabilities.setCapability("fullReset", true); //卸载清除文件
return capabilities;
}
/*
* 截图
* */
public static String screenShot() {
String time = new SimpleDateFormat("yyyyMMdd-HHmmss").format(new Date());
String screenShotPath = dir + File.separator + time + ".png";
try {
File sourceFile = driver.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(sourceFile, new File(screenShotPath));
} catch (Exception e) {
e.printStackTrace();
return "Failed to screenshot";
}
return screenShotPath.replace("\\", "/");
}
/*
* 上划
* */
public void swipeToUp(AndroidDriver driver) {
int width = driver.manage().window().getSize().width;
int height = driver.manage().window().getSize().height;
TouchAction action1 = new TouchAction(driver).press(PointOption.point(width / 2, height * 3 / 4)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(width / 2, height / 4)).release();
action1.perform();
}
/*
* 左滑
* */
public void swipeToLeft(AndroidDriver driver) {
int width = driver.manage().window().getSize().width;
int height = driver.manage().window().getSize().height;
TouchAction action3 = new TouchAction(driver);
action3.press(PointOption.point(width * 4 / 5, height / 2)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(width / 5, height / 2)).release();
action3.perform();
}
public void login() {
driver.findElement(By.id("com.ireader.pad:id/next_btn")).click();
driver.findElement(By.id("com.ireader.pad:id/know_btn")).click();
try {
//强制等待
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//元素是否已显示
if (driver.findElement(By.id("com.ireader.pad:id/know_btn")).isDisplayed()) {
driver.findElement(By.id("com.ireader.pad:id/know_btn")).click();
}
//返回
if (driver.findElement(By.id("android:id/up")).isDisplayed()) {
driver.findElement(By.id("android:id/up")).click();
}
//手机号登陆
driver.findElement(By.id("com.ireader.pad:id/rl_selectlogin_mobile")).click();
//账号密码登陆
//driver.findElement(By.id("com.ireader.pad:id/rl_selectlogin_studentno")).click();
//输入
/*AndroidElement phone = driver.findElement(By.id("com.ireader.pad:id/le_smslogin_mobile"));
phone.sendKeys("17600868885");
AndroidElement code = driver.findElement(By.id("com.ireader.pad:id/le_smslogin_code"));
code.setValue("1234");
AndroidElement sms = driver.findElement(By.id("com.ireader.pad:id/le_smslogin_sms"));
sms.replaceValue("123456");*/
List
textFieldsList.get(0).sendKeys("17600868885");
textFieldsList.get(1).setValue("1234");
textFieldsList.get(2).replaceValue("123456");
waitTwoTime();
driver.findElement(By.id("com.ireader.pad:id/tv_login_finish")).click();
waitTwoTime();
for (int i=0; i<1;i++){
countDownTest(); //倒计时
//calendarTest(); //日历
//copyBookTest(); //字帖
//englishTest(); //翻译
//setTest(); //设置
//noteTest(); //笔记本
//noteAddTest(); //笔记本重复添加测试
//noteAddTest2(); //笔记本重复添加测试
//teachShopTest(); //教辅商店
//testPaper(); //试卷真题
//textBook(); //课本
//coursewareTest(); //课件
}
}