Appium 整点 appium 中部分 api 的使用方法

xuxu · 2015年01月08日 · 最后由 lovingJune 回复于 2016年08月13日 · 3501 次阅读
本帖已被设为精华帖!

使用的语言是 java,appium 的版本是 1.3.4,java-client 的版本是 java-client-2.1.0,建议多参考 java-client-2.1.0-javadoc。

1.使用 AndroidDriver,其已经继承了 AppiumDriver

private AndroidDriver driver;

    @Before
    public void setUp() throws Exception {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "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/hub"),
                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中的api
        } catch (IOException e) {
            e.printStackTrace();
        } 

3.push 文件、pull 文件

File file = new File("d:\\test.txt"); //test.txt内容为"testerHome"
        String content = null;
        try {
            content = FileUtils.readFileToString(file);
        } catch (IOException e) {
            e.printStackTrace();
        }

        byte[] data = 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))); //打印结果为"testerHome"

4.

//获取当前界面的activity,可用于断言是否跳转到预期的activity
driver.currentActivity();

5.

//打开通知栏界面
driver.openNotifications();

6.

//获取网络状态
int status = 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.拖动元素

//拖动相机图标至日历图标位置
new TouchAction(driver).longPress(driver.findElementByName("相机"))
.moveTo(driver.findElementByName("日历")).release().perform();

10.图案解锁,解锁该图案:

TouchAction action = new TouchAction(driver);
action.press(215, 870).moveTo(540, 870).moveTo(862, 870)
        .moveTo(540, 1195).moveTo(215, 1195).moveTo(215, 1518)
        .moveTo(540, 1518).moveTo(862, 1518).moveTo(862, 1195)
        .release().perform();
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 28 条回复 时间 点赞

最后一个图赞~

我觉得这个帖子很棒,要鼓励~

请问下:运行以后出现:
raise URLError(err)
urllib2.URLError:
这个哪里出了问题呀,请指教

挺好的,期待继续补充!

很赞。 对于最后一个截屏的操作, 有没有不用坐标的方法。
有人研究过截屏中那些点是什么控件吗?

非常好的知识,感谢分享了,期待后面更多的内容

很好,学习了!

请教下,怎么确定图案解锁中圆圈的坐标?

xuxu #28 · 2015年01月23日 Author

@mildshark 可以用 sdk 里面的 hierarchyviewer 工具查看,或者开发者选项里面勾选指针位置

#9 楼 @xuxu 谢谢,搞定了!

能贴出来一份 js 版本的吗?谢谢

xuxu #12 · 2015年01月26日 Author

@xingjizhao 抱歉,js 目前还没掌握。。

学习了,谢谢额

最后一个赞那!

赞,mark

现在纠结 appium 和 robotium 该学哪个?

xuxu #15 · 2015年02月03日 Author

@young 当然是都掌握好些

@xuxu 为嘛 startActivity 不能直接用呢。。

xuxu #19 · 2015年02月12日 Author

@woshizh 不是任意的 activity 都能启动


@xuxu 它说的是没有在 appiumdriver 中定义,还要自己去定义。。

xuxu #19 · 2015年02月12日 Author

@woshizh AndroidDriver 里面才有这个方法

学习了,感谢分享!

#12 楼 @xuxu JS 可以在运行的时候,截获 appium 发送的指令,就是翻译之后的东西。

#9 楼 @xuxu 我是建议最后一个多封装一下。这样写绝对坐标不行的。稍微封装一下就可以适应任何分辨率了,你懂的。

@xuxu 感谢分享

打开通知栏后,有什么方法能够关闭通知栏吗

最后一个方法中的 move_to 坐标参数使用的是绝对坐标

#24 楼 @pighero001 请教 move_to 方法如何使用相对坐标

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册