Appium

环境搭建地址: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 = driver.findElementsByClassName("android.widget.EditText");

        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(); //课件

        }

    }

你可能感兴趣的:(Appium)