一.截屏

File srcfile=driver.getScreenshotAs(OutputType.FILE);    //得到截图源文件对象
File dstfile=new File("C:\\Users\\86130\\Desktop\\photo\\screenshot"); //生成本地文件的目标文件对象
try {
FileUtils.copyFile(srcfile,dstfile); //把截图源文件拷贝到目标文件中(以文件的形式保存到本地)
} catch (IOException e) {
e.printStackTrace();
}

二.点击坐标

开发者选项中勾选指针位置,手机页面增加坐标定位,触摸可得到位置的坐标

TouchAction touchAction=new TouchAction(driver);         //得到TouchAction对象
PointOption pointOption=PointOption.point(140,1300); //通过touchAction提供的API,press需要传入pointoption类型的参数
touchAction.press(pointOption).release().perform(); //release:手指抬起;perform:让动作生效
注意:坐标点击受设备屏幕尺寸/分辨率/DPI影响,万不得已不要使用此种方式

三.手势操作-滑动

滑动场景有左右翻页,上下滑动,下拉刷新等
TouchAction touchAction1=new TouchAction(driver);
int width=driver.manage().window().getSize().getWidth(); //获取屏幕的宽和高,通过比例来滑动屏幕,即使更换手机屏幕分辨率,也不影响代码的操作
int height=driver.manage().window().getSize().getHeight();
PointOption pointOption1=PointOption.point(width/2,height*2/3); //把坐标换为pointoption类型,press需要的参数
PointOption pointOption2=PointOption.point(width/2,height/3);
Duration duration=Duration.ofSeconds(2); //把滑动时间换成waitaction类型,需要两步。先把时间换成duration类型,再把duration转换为waitoption类型
WaitOptions waitOptions=WaitOptions.waitOptions(duration);
touchAction1.press(pointOption1).waitAction(waitOptions).moveTo(pointOption2).release().perform(); //按下滑动起始点到滑动终点,再释放

四.元素通过工具定位

由于有些页面做了截图限制,无法通过工具(元素定位工具,adb等)进行截图

(可通过adb命令验证页面是否做了限制:adb shell screencap -p /sdcard/test.png

举例:哔哩哔哩,银行系统,密码输入页面

通过getPageSource获取到当前页面源代码,再从获取到的页面源代码中找到需要的元素

driver.findElement(MobileBy.id("tv.danmaku.bili:id/avatar")).click();
System.out.println(driver.getPageSource()); //由于无法定位到哔哩哔哩登录页的元素,可通过getPageSource获取到当前页面的源代码,再从获取到的页面源代码中找到需要的元素
driver.findElement(MobileBy.AndroidUIAutomator("new UiSelector().text(\"密码登录\")")).click(); //此元素是从getPageSource()得到的源代码中获取到的

五.toast元素定位

Android中的Toast是一种简易的消息提示框。 当视图显示给用户,在应用程序中显示为浮动。和Dialog不一样的是,它永远不会获得焦点,无法被点击
toast元素定位可通过获取toast的text,找对应的text属性值中有包含未注册,请先注册关键字
By bypresent=MobileBy.xpath("//*[contains(@text,'未注册,请先注册')]");

app自动化的特殊操作的更多相关文章

  1. APP 自动化之手势操作appium提供API详解(四)

    一.手势操作1.上下左右滑屏 swipe---滑动 java-client 4.x 是有swipe方法的,可以通过传递坐标信息就可以完成滑动androidDriver.swipe(startx, st ...

  2. App自动化《元素定位方式、元素操作、混合应用、分层设计、代码方式执行Pytest 命令》

    坚持原创输出,点击蓝字关注我吧 作者:清菡 博客:oschina.云+社区.知乎等各大平台都有. 目录 一.App 元素定位方式 二.元素操作 三.测试混合应用 四.以代码的方式执行 Pytest 命 ...

  3. APP自动化框架LazyAndroid使用手册(1)--框架简介

    作者:cryanimal  QQ:164166060 APP自动化简介 APP自动化,即通过自动化的方式,对APP施行一系列的仿按键输入.触摸屏输入.手势输入等操作,以达到对APP的功能进行自动化测试 ...

  4. APP自动化针对PO模式进行二次封装之basepage

    APP自动化跟WEB自动化所使用的框架基本一样,都是采用的PO模式结合pytest框架编写自动化测试脚本,为了提高代码的复用性.稳定性和易维护性,我们针对PO模式进行了二次封装,将日志,等待以及异常截 ...

  5. App 自动化框架设计思路

    最近在整理和学习Appium+Java 自动化框架,对APP自动化框架的部分设想参考了一些文章,先进行整理下: 框架的思路一: 思考引入:https://www.cnblogs.com/yunfeio ...

  6. APP自动化环境配置

    做自动化很多人都不喜欢做app自动化,说实话,我也不喜欢做app自动化,但是没办法,老板给你钱,让你做,不得不做! 其实app自动化的难点就在于环境,环境OK了之后一切都和web自动化差不多,顶多就是 ...

  7. 手机APP自动化环境搭建

    1 摘要 近年来,随着移动应用从数量上和逻辑复杂程度上的增长,以及产品发布周期的紧缩,使得回归测试迫在眉睫,鉴于此APP自动化测试变得越来流行,当前主流的APP自动化工具有:Appium.Roboti ...

  8. [python]Appium+python +pytest 实现APP自动化,基于安卓

    1.安卓环境搭建 &关于app自动化,个人觉得安装过程比较复杂,脚本难度实现和web自动化差不多封装关键字即可,因此,下面会写安装.启动APP以及过程中遇到的一些坑(这一篇偏向解释给个人) & ...

  9. APP自动化,怎样让应用不重置?

    noReset =True产生的背景: 在编写APP自动化代码时,除了登录用例需要填写账号和密码外,其余很多用例都是需要先登录再操作的,如果每一个用例都从头开始到具体的操作,这样将会耗费很多时间,此时 ...

  10. appium连接手机 adb调试 app自动化

    一. 工具准备 jdk,java环境必备. android sdk,要使用内置的Android debug bridge,简称adb,调试手机用. appium,提供自动化服务,app自动化的核心库. ...

随机推荐

  1. 亮相CCF中国软件大会,天翼云助力千行百业搭上“数字快车”

    中国软件领域规模最大.影响最广的学术会议--CCF中国软件大会(ChinaSoft 2023)在上海国际会议中心开幕.CCF理事长.大会执行委员会荣誉zhu席.中国科学院院士梅宏,上海市经济和信息化委 ...

  2. 更换Linux系统镜像源

    更换Linux系统镜像源 切换镜像源通常是为了提高软件包下载的速度和稳定性.以下是CentOS 7切换镜像源的一般步骤: 一.安装wget(如果尚未安装) 首先,需要确保系统中安装了wget工具,因为 ...

  3. 性能测试-Oceanus 测试FLink mysql到Iceberg性能

    一.任务依赖信息 1.mysql测试库信息 地址:127.0.0.1.gomysql_bdg_test 库:bdg_test 表:order_info1 2.iceberg库 hive地址:thrif ...

  4. spark-sql查询Iceberg时处理流程

    1.查询表结构 show create table data_lake_ods.test CREATE TABLE spark_catalog.data_lake_ods.test ( `user_n ...

  5. RocketMQ实战—10.营销系统代码优化

    大纲 1.营销系统引入MQ实现异步化来进行性能优化 2.基于MQ释放优惠券提升系统扩展性 3.基于Redis实现重复促销活动去重 4.基于促销活动创建事件实现异步化 5.推送任务分片和分片消息batc ...

  6. datawhale-leetcode打卡:001-012题

    这次这十二个题目属于是极限肝出来的,有两个参考了一下题解,还是很有意思.我会按照我个人的感觉去写这个东西. 螺旋矩阵(leetcode 054) 这个题目比较恶心的就是跑圈的过程怎么描述.首先,顺时针 ...

  7. 使用nvm管理node.js版本,方便vue2,vue3开发

    在Vue项目开发过程中,我们常常会遇到同时维护Vue2和Vue3项目的情况.由于不同版本的Vue对Node.js 版本的要求有所差异,这就使得Node.js 版本管理成为了一个关键问题.NVM(Nod ...

  8. GridControl 给选中的行添加边框显示

    实现方式,通过自定义 RowControl 的样式实现. 参考:https://supportcenter.devexpress.com/ticket/list?searchString=RowCel ...

  9. Thymeleaf select 反显 默认选中

    后台代码 List<ExamTestPaperDO> list = examTestPaperService.list(map); model.addAttribute("tes ...

  10. ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this

    mysql操作错误: mysql> use mysql;ERROR 1820 (HY000): You must reset your password using ALTER USER sta ...