之前研究了一段时间的appium for native app 相应的总结如下:

                                              appium测试环境搭建 :http://www.cnblogs.com/tobecrazy/p/4562199.html

                    知乎Android客户端登陆:http://www.cnblogs.com/tobecrazy/p/4579631.html

appium实现截图和清空EditText:http://www.cnblogs.com/tobecrazy/p/4592405.html

appium 滑动处理:http://www.cnblogs.com/tobecrazy/p/4612133.html

最近有人问我怎么使用web driver,所以特来研究一下:

                appium for mobile web 之使用 ChromeDriver:http://www.cnblogs.com/tobecrazy/p/4836995.html

今天搞一下appium实现手势解锁。

效果如下:

首先看一下招行手机客户端app手势解锁的element,使用uiautomatorviewer看一下

可以看出,该手势解锁共有9个 android.widget.ImageView 构成,使用findelements获取实际上九宫格类似

0   1   2

3   4   5

6   7   8

如果实现九宫格解锁,就需要绘制解锁内容的手势,我在设置的手势是Z

就是0->1->2->4->6->7->8


第一步,使用appium(Android Studio)解析apk包,获取到package和activity

我的PC OS是win 10  ,appium 也是最新的1.4.x,很诡异的是只能获取到package 却获取不到activity。 这里有一个小小的tricky

自从有了Android studio 1.4 ,可以使用Android studio 获取到package 和launch activity
不再详解

第二步,代码实现

接下来,show time,上code.
package com.dbyl.core;import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;import io.appium.java_client.MobileDriver;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.concurrent.TimeUnit;public class slideToUnlock {private MobileDriver driver;@BeforeMethod(alwaysRun = true)public void setUp() throws Exception {// set up appium
DesiredCapabilities capabilities = new DesiredCapabilities();capabilities.setCapability(CapabilityType.BROWSER_NAME, "");capabilities.setCapability("platformName", "Android");capabilities.setCapability("deviceName", "Android Emulator");capabilities.setCapability("platformVersion", "5.1");// if no need install don't add thiscapabilities.setCapability("appPackage", "cmb.pb");// no need signcapabilities.setCapability("noSign", "True");capabilities.setCapability("appActivity", ".ui.PBInitActivity");driver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);}@Test(groups = "swipeTest", priority = 1)public void swipeTest() {driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);// swipe to right
        System.out.println(driver.getPageSource());// swipeToRight(driver, 2000);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);driver.findElement(By.id("cmb.pb:id/item_funcIcon")).click();driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);List<WebElement> pic = driver.findElements(By.xpath("//android.widget.FrameLayout/android.widget.ImageView"));for (int i = 0; i < pic.size(); i++) {System.out.println(pic.size());pic.get(i).click();}final TouchAction touchAction = new TouchAction(driver);touchAction.press(pic.get(0)).waitAction(1500).moveTo(pic.get(1)).moveTo(pic.get(2)).moveTo(pic.get(4)).moveTo(pic.get(6)).moveTo(pic.get(7)).moveTo(pic.get(8)).release();touchAction.perform();String username = driver.findElement(By.id("cmb.pb:id/gTvMenuTitle")).getText();System.out.println(username);}@AfterClass(alwaysRun = true)public void tearDown() throws Exception {driver.quit();}/*** This Method create for take screenshot* * @author Young* @param drivername* @param filename*/public static void snapshot(TakesScreenshot drivername, String filename) {// this method will take screen shot ,require two parameters ,one is// driver name, another is file name
String currentPath = System.getProperty("user.dir"); // get current work// folderFile scrFile = drivername.getScreenshotAs(OutputType.FILE);// Now you can do whatever you need to do with it, for example copy// somewheretry {System.out.println("save snapshot path is:" + currentPath + "/"+ filename);FileUtils.copyFile(scrFile, new File(currentPath + "\\" + filename));} catch (IOException e) {System.out.println("Can't save screenshot");e.printStackTrace();} finally {System.out.println("screen shot finished, it's in " + currentPath+ " folder");}}public void swipeToRight(MobileDriver driver, int during) {int width = driver.manage().window().getSize().width;int height = driver.manage().window().getSize().height;driver.swipe(width / 4, height / 2, width * 5 / 6, height / 2, during);// wait for page loading
    }@AfterClass(alwaysRun = true)public void stopAppiumServer() {}
}

九宫格解锁核心部分就是使用TouchAction,类似重构swipe方法
appium 自带的swipe方法如下
    /*** @see TouchShortcuts#swipe(int, int, int, int, int)*/@Overridepublic void swipe(int startx, int starty, int endx, int endy, int duration) {TouchAction touchAction = new TouchAction(this);// appium converts press-wait-moveto-release to a swipe action
        touchAction.press(startx, starty).waitAction(duration).moveTo(endx, endy).release();touchAction.perform();}

使用这个原理就能实现滑动,九宫格滑动解锁.

那么问题就来了,我是使用的是moveTo传入的是WebElement,而swipe是使用的X,Y坐标。

由于不同的app使用的九宫格并不同,有app使用的和招行app不同的,不能是单个的imageView,该怎么实现?

由于对坐标的滑动还没完全理解,所以接下来会继续研究。

转载于:https://www.cnblogs.com/tobecrazy/p/4881390.html

appium 九宫格解锁招商银行手机客户端app相关推荐

  1. 【爬虫进行时】手机客户端app爬虫抓包(Fiddler)

    鉴于目前会常用到爬虫来采集一些数据以支持和解决问题,开贴记录验证出来的好用的methods.tools.problems 和 solutions. 之前有个需求抓b站的数据,由于当时并不会从手机app ...

  2. python手机app自动_python+appium 自动化1--启动手机京东app

    出处:https://www.cnblogs.com/yoyoketang/p/6128735.html 前言: 环境搭建好了.接下来先体验下如何启动app--1.首先获取包名:2.然后获取launc ...

  3. Python+appium获取手机及APP参数

    from appium import webdriver# 设置手机及APP参数 desired_caps = {"platformName": "Android&quo ...

  4. 软件九宫格解锁之逻辑以及界面控制

    其实九宫格解锁在Android上不是什么新鲜的东西,至今还有不少人的锁屏界面的解锁方式是九宫格解锁,但至于app九宫格解锁的要求,本人至今只使用支付宝的九宫格解锁 最近在做一个app的时候有一个需求, ...

  5. Appium 自动化测试 九宫格解锁

    背景 我们在操作APP密码解锁里面就有一个九宫格滑动解锁,这时候我们就需要手动连续滑动进行操作,前面提到的swipe.scroll.drag_and_drop 这些就无法实现解锁操作,我们就需要学会使 ...

  6. 【Python+Appium】开展自动化测试(十)TouchAction类与MultiAction类(控件元素的滑动、拖动,九宫格解锁,手势操作等)

    目录 前言 一,TouchAction类 1,TouchAction类由webdriver库提供,提供以下方法: 2,tap点击 3,press短按 4,long_press长按 5,move_to移 ...

  7. 推荐两个Android手机上比较好用免费的SSH客户端APP

    我平时比较常用的两个手机SSH客户端APP,JuiceSSH 和 阿里云APP 最好用的感觉还是 JuiceSSH ,配色界面比较友好,操作都非常方便 上图看看吧: 第一个是我觉得最好用的 Juice ...

  8. python脚本控制手机app_Python+Appium学习之启动手机APP或者浏览器

    一.启动浏览器: pycharm中python脚本如下: 1 from appium importwebdriver2 3 desired_caps ={4 'platformName':'Andro ...

  9. polycom安卓手机客户端_Spark,安卓上最好用的邮件客户端来了!附App下载

    在QQ.微信.钉钉这些即时通信软件的围剿下,才诞生20年不到的电子邮箱俨然已经像上个世纪的产物了.现在还在用Email的大部分是工作需要,私人的话顶多就是收收网站验证码激活邮件之类的.因此大多数人在手 ...

最新文章

  1. suse linux 软件包安装,SUSE Linux 11系统rpm包离线安装GCC
  2. SpringCloud_RibbonHystrixFeign
  3. linux alpine 提示'/bin/sh: rc-service: not found'解决方案
  4. AppCode iOS 应用开发 开发环境
  5. 「C++: draft」一张图弄懂C++指针(*)和引用()以及深拷贝、浅拷贝
  6. 改变层级_3DMAX基础,可编辑多边形层级介绍及概念
  7. aptitude安装出现依赖_oeasy 教您玩转linux 之 010210 应用管理 aptitude
  8. Linux+写数据异常断电,同事处理异常断电数据库状态变为SUSPECT过程
  9. 在SAP WebClient UI里显示倒数计时的UI
  10. [CLR via C#]16. 数组
  11. Luogu2014选课
  12. keras 初步学习
  13. 身份证号码归属地数据库 身份证具体信息查询服务
  14. 微服务架构设计思维导图总结
  15. hadoop大数据处理平台与案例
  16. TSO、UFO、GSO、LRO、GRO和RSS介绍
  17. java-php-python-ssm医院诊疗信息管理计算机毕业设计
  18. Seo:入门须知(三)网页快照投诉
  19. 封装802.1Q与 ISL的区别
  20. ONF发布安全部署SDN控制器指南

热门文章

  1. Mac chrome 关闭跨域限制
  2. 虚幻实现只狼的钩索系统(9)-设置绳索和运动函数
  3. Window 10 Google Chrome无法启动更新检查(错误代码为1:0x80004005)
  4. 锻炼肱二头肌(手臂)方法汇总
  5. 树莓派可以频繁重启吗_手机资讯: iPhone XS Max 可以在低温环境下使用吗冬天设备频繁关机怎么办...
  6. 程序人生 - QQ空间如何彻底关闭“那年今日”
  7. 点通教育计算机,【实操一点通
  8. html2canvas解决图片空白,图片样式错位
  9. web前端进阶之路;web前端不能只做普通程序员;web前端应该向前端架构师前进
  10. 怎么在电脑上制作物流条码