一.截屏

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. TensorFlow2入门与实践--CNN

    卷积神经网络CNN CNN原理 关于CNN的原理本文使用代码的方式来直观理解卷积中各个操作过程. 卷积 卷积层是CNN的核心组件,通过可学习的卷积核在输入特征图上进行滑动窗口操作.每个位置上,卷积核与 ...

  2. Kali Linux 安装教程

    Kali Linux 安装教程 下载镜像文件 Kali官网下载 访问Kali官网(https://www.kali.org/ ),根据下图所示进行下载 清华大学开源软件镜像站下载 访问清华大学开源软件 ...

  3. oracle 删除过期归档脚本

    一.定时任务 crontab -e 编辑 每周6凌晨3点执行脚本 0 3 * * 6 . /home/oracle/scripts/arch_delete_before_60days_arch.sh ...

  4. Tensorflow 安装和测试(Anaconda4.7.10+windows10)

    一. 软件下载 二. 配置相关 1. 修改 Jupyter notebook 默认工作路径 (1)打开 Anaconda Prompt ,输入 jupyter notebook --generate- ...

  5. 多项式算法再探:FMT 和 FWT

    我们知道,FFT 和 NTT 可以用来解决下面这种问题: \[c_k=\sum_{i+j=k}a_ib_j \] 不过,这并不是卷积的全部形态,比如下面这种: \[c_k=\sum_{i*j=k}a_ ...

  6. 批量删除MySQL生产环境数据库表或表字段注释脚本

    本文提供了一种批量删除MySQL生产环境中数据库表的注释或表字段注释的方法,通过脚本实现高效维护表结构的清晰性. 一.表注释修改 1.获取删除MySQL数据库表注释脚本select concat('A ...

  7. 【java】对list集合进行去重 传统方式 VS Lambda

    说道集合的去重,我们就肯定能想到唯一元素集合set,还有map中的key.那么我们传统的去重的方式肯定是要选择set或者是map来实现了,另外在对实体对象类型进行去重的时候,我们可能会指定实体中的一个 ...

  8. 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)

    现在使用Uni-app开发手机端APP已经变得很普遍,同一套代码就可以打包成Android App 和 iOS App,相比原生开发,可以节省客观的人力成本.那么如何使用Uni-app来开发视频聊天软 ...

  9. DW004 - ArgoDB介绍

    ArgoDB:自主可控.国际领先.一站式满足湖仓集一体化建设的创新型分布式分析数据库 一.产品特点 统一的SQL编译引擎:支持标准SQL,兼容Teradata,Oracle,Db2等方言,应用开发门槛 ...

  10. Calico Kernel's RPF check is set to 'loose'

    前言 K8s 集群部署使用了 calico 网络插件,而calico node 节点发生如下报错: 2023-03-13 11:19:36.622 [FATAL][828] int_dataplane ...