appium 九宫格解锁招商银行手机客户端app
之前研究了一段时间的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
第二步,代码实现
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() {} }
/*** @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相关推荐
- 【爬虫进行时】手机客户端app爬虫抓包(Fiddler)
鉴于目前会常用到爬虫来采集一些数据以支持和解决问题,开贴记录验证出来的好用的methods.tools.problems 和 solutions. 之前有个需求抓b站的数据,由于当时并不会从手机app ...
- python手机app自动_python+appium 自动化1--启动手机京东app
出处:https://www.cnblogs.com/yoyoketang/p/6128735.html 前言: 环境搭建好了.接下来先体验下如何启动app--1.首先获取包名:2.然后获取launc ...
- Python+appium获取手机及APP参数
from appium import webdriver# 设置手机及APP参数 desired_caps = {"platformName": "Android&quo ...
- 软件九宫格解锁之逻辑以及界面控制
其实九宫格解锁在Android上不是什么新鲜的东西,至今还有不少人的锁屏界面的解锁方式是九宫格解锁,但至于app九宫格解锁的要求,本人至今只使用支付宝的九宫格解锁 最近在做一个app的时候有一个需求, ...
- Appium 自动化测试 九宫格解锁
背景 我们在操作APP密码解锁里面就有一个九宫格滑动解锁,这时候我们就需要手动连续滑动进行操作,前面提到的swipe.scroll.drag_and_drop 这些就无法实现解锁操作,我们就需要学会使 ...
- 【Python+Appium】开展自动化测试(十)TouchAction类与MultiAction类(控件元素的滑动、拖动,九宫格解锁,手势操作等)
目录 前言 一,TouchAction类 1,TouchAction类由webdriver库提供,提供以下方法: 2,tap点击 3,press短按 4,long_press长按 5,move_to移 ...
- 推荐两个Android手机上比较好用免费的SSH客户端APP
我平时比较常用的两个手机SSH客户端APP,JuiceSSH 和 阿里云APP 最好用的感觉还是 JuiceSSH ,配色界面比较友好,操作都非常方便 上图看看吧: 第一个是我觉得最好用的 Juice ...
- python脚本控制手机app_Python+Appium学习之启动手机APP或者浏览器
一.启动浏览器: pycharm中python脚本如下: 1 from appium importwebdriver2 3 desired_caps ={4 'platformName':'Andro ...
- polycom安卓手机客户端_Spark,安卓上最好用的邮件客户端来了!附App下载
在QQ.微信.钉钉这些即时通信软件的围剿下,才诞生20年不到的电子邮箱俨然已经像上个世纪的产物了.现在还在用Email的大部分是工作需要,私人的话顶多就是收收网站验证码激活邮件之类的.因此大多数人在手 ...
最新文章
- suse linux 软件包安装,SUSE Linux 11系统rpm包离线安装GCC
- SpringCloud_RibbonHystrixFeign
- linux alpine 提示'/bin/sh: rc-service: not found'解决方案
- AppCode iOS 应用开发 开发环境
- 「C++: draft」一张图弄懂C++指针(*)和引用()以及深拷贝、浅拷贝
- 改变层级_3DMAX基础,可编辑多边形层级介绍及概念
- aptitude安装出现依赖_oeasy 教您玩转linux 之 010210 应用管理 aptitude
- Linux+写数据异常断电,同事处理异常断电数据库状态变为SUSPECT过程
- 在SAP WebClient UI里显示倒数计时的UI
- [CLR via C#]16. 数组
- Luogu2014选课
- keras 初步学习
- 身份证号码归属地数据库 身份证具体信息查询服务
- 微服务架构设计思维导图总结
- hadoop大数据处理平台与案例
- TSO、UFO、GSO、LRO、GRO和RSS介绍
- java-php-python-ssm医院诊疗信息管理计算机毕业设计
- Seo:入门须知(三)网页快照投诉
- 封装802.1Q与 ISL的区别
- ONF发布安全部署SDN控制器指南
热门文章
- Mac chrome 关闭跨域限制
- 虚幻实现只狼的钩索系统(9)-设置绳索和运动函数
- Window 10 Google Chrome无法启动更新检查(错误代码为1:0x80004005)
- 锻炼肱二头肌(手臂)方法汇总
- 树莓派可以频繁重启吗_手机资讯: iPhone XS Max 可以在低温环境下使用吗冬天设备频繁关机怎么办...
- 程序人生 - QQ空间如何彻底关闭“那年今日”
- 点通教育计算机,【实操一点通
- html2canvas解决图片空白,图片样式错位
- web前端进阶之路;web前端不能只做普通程序员;web前端应该向前端架构师前进
- 怎么在电脑上制作物流条码