首页 > 其他分享 >软件测试学习笔记丨App自动化基础

软件测试学习笔记丨App自动化基础

时间:2024-02-04 14:31:27浏览次数:25  
标签:App 笔记 caps adb setCapability println out true 软件测试

查看设备 ID

adb devices

查看设备的 Android 系统版本

adb shell getprop ro.build.version.r-elease

查看想要启动 app 的包名

adb shell pm list packages

查看想要启动 app 的启动页面

adb shell monkey -p ${package.name} -vvv 1

获取app的启动页面

adb logcat |grep -i displayedadb logcat ActivityManager:I | grep “cmp”

adb logcat ActivityManager:I |grep -i displayed

启动页面

adb shell am start -n <包名>/<avticity名>adb shell am start -n com.xueqiu.android/.view.WelcomeActivityAlias

andorid机投屏

scrcpy

capability 配置参数解析

DesiredCapabilities caps = new DesiredCapabilities();

  • 公共参数部分
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
caps.setCapability(MobileCapabilityType.UDID, "adb-2edf7a82-WE6ucp._adb-tls-connect._tcp.");
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "XiaoMi Civi 2");
caps.setCapability(MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2");
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, 13);
//在假设客户端退出并结束会话之前,Appium 将等待来自客户端的新命令多长时间(以秒为单位)
// 超时后会话删除
caps.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 3600);

// 添加参数 noReset 默认为false, 设置为true时 保存历史状态数据
// Android 不停止应用程序,不清楚应用程序数据,不卸载apk
// 添加参数 fullReset 默认为false, 设置为true时: 新会话之前完全卸载被测应用程序 ,特别的: Android 在会话开始之前( appium 启动app )和测试之后停止应用程序,清楚应用程序数据并卸载apk
// 添加参数 dontStopAppOnReset 默认为false 设置为true时: 不希望应用程序在运行时重新启动
caps.setCapability(MobileCapabilityType.NO_RESET, true);

// 启动允许权限,若 noReset=true时,此选项不生效
caps.setCapability(SupportsAutoGrantPermissionsOption.AUTO_GRANT_PERMISSIONS_OPTION, true);
// 参数 printPageSourceOnFindFailure 默认为false ,设置为true时: 发生任何错误,强制服务器将实际的 XML 页面源转储到日志中.
caps.setCapability(PRINT_PAGE_SOURCE_ON_FIND_FAILURE, true);
  • android部分
// 打开app的时候的页面是哪个
caps.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "com.appiumpro.the_app");
caps.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, ".MainActivity");
// 授予启动的应用某些权限,若NO_RESET=true 此选项不生效
caps.setCapability(AndroidMobileCapabilityType.AUTO_GRANT_PERMISSIONS, true);
// 首次启动的时候,不停止app
caps.setCapability(AndroidMobileCapabilityType.DONT_STOP_APP_ON_RESET,true);
// 跳过安装,权限设置等操作
caps.setCapability(AndroidMobileCapabilityType.SKIP_DEVICE_INITIALIZATION,true);
//输入中文,UiAutomator1 需要配置才能输入中文,UiAutomator2不再需要配置
caps.setCapability(AndroidMobileCapabilityType.UNICODE_KEYBOARD,true);

// WebView 配置ensureWebviewsHavePages
//是否跳过在 getContexts 输出中显示没有页面的 Web 视图。
// 驱动程序使用 devtools 连接来检索有关现有页面的信息。
// 自 Appium 1.19.0 起默认为 true,如果低于 1.19.0,则为 false。
caps.setCapability(AndroidMobileCapabilityType.ENSURE_WEBVIEWS_HAVE_PAGES, true);
//nativeWebScreenshot: 是否使用UiAutomator框架提供的截图端点(true)
//而不是chromedriver提供的端点(false,默认值)。当您遇到后者问题时使用它。
caps.setCapability(AndroidMobileCapabilityType.NATIVE_WEB_SCREENSHOT, true);

ios部分

// 被测应用的 bundle ID 。用于在真实设备中启动测试,也用于使用其他需要 bundle ID 的关键字启动测试。
// 在使用 bundle ID 在真实设备上执行测试时,你可以不提供 app 关键字,但你必须提供 udid 。
caps.setCapability(IOSMobileCapabilityType.BUNDLE_ID,"");
// 连接的真实设备的唯一设备编号
caps.setCapability(MobileCapabilityType.UDID,"");

启动

  • 方式一
    driver = new AndroidDriver(remoteUrl, caps);
  • 方式二(热启动)
    //打开app退出时的页面
    driver.execute(LAUNCH_APP);

退出app

driver.quit();

常见控件交互方法

// 获取当前元素文本text
    String text = element.getText();
    System.out.println("文本内容: "+text);
    // 当前元素是否可见,返回布尔类型
    boolean displayed=element.isDisplayed();
    System.out.println("元素是否可见: "+displayed);
    // 查看当前元素是否可用,返回布尔类型
    boolean enabled = element.isEnabled();
    System.out.println("元素是否可用: "+enabled);
    // 当前元素是否被选中,返回布尔类型
    boolean selected = element.isSelected();
    System.out.println("元素是否被选中: "+selected);
    // 获取当前元素属性值
    String attribute = element.getAttribute("resource-id");
    System.out.println("元素属性 resource-id = "+attribute);
    // 获取元素坐标
    Point location=element.getLocation();
    System.out.println("元素坐标(X,Y) = "+location);
    // 获取元素尺寸(宽,高)
    Dimension size=element.getSize();
    System.out.println("元素尺寸(宽,高) = "+size);

    // 计算获取元素中心点
    /* 中心点X = startX+宽度/2
       中心点Y = startY+高度/2
     */
    int middleX = location.getX()+size.getWidth()/2;
    int middleY = location.getY()+size.getHeight()/2;
    System.out.println("中心点X = "+middleX);
    System.out.println("中心点Y = "+middleY);

元素定位工具

  • appium inspector
  • Weditor
  • 要求:python 3.6+ 以上
  • 安装:weditor 是 python 的第三方库
  • pip install weditor 进行安装
  • 运行:安装完成之后,在命令行运行 python -m weditor 即可

霍格沃兹的测试管理班是专门面向测试与质量管理人员的一门课程,通过提升从业人员的团队管理、项目管理、绩效管理、沟通管理等方面的能力,使测试管理人员可以更好的带领团队、项目以及公司获得更快的成长。提供 1v1 私教指导,BAT 级别的测试管理大咖量身打造职业规划。

软件测试学习笔记丨App自动化基础_软件测试

标签:App,笔记,caps,adb,setCapability,println,out,true,软件测试
From: https://blog.51cto.com/u_16547786/9585951

相关文章

  • 如何通过APPID查询微信小程序,看看那些appid都是谁
    通过统计看到一些跳转来源的appid,有时候很想知道这些appid都是谁,做到心里有数,但现在appid反查小程序的信息,官方没有开放的接口。目前大多数的方案是:通过自己做一个小程序页面,在这个页面去调用这个appid,微信小程序会提示是否打开“xxx”小程序,在这里可以看到。在公众号去绑......
  • 软件测试|人工智能:测试开发的新宠儿
    测试管理班是专门面向测试与质量管理人员的一门课程,通过提升从业人员的团队管理、项目管理、绩效管理、沟通管理等方面的能力,使测试管理人员可以更好的带领团队、项目以及公司获得更快的成长。提供1v1私教指导,BAT级别的测试管理大咖量身打造职业规划。测试是发现问题的艺术,而人......
  • edusrc-appkey泄露
    edusrc-appkey泄露简介AppKey泄露是指应用程序的应用密钥(AppKey)或API密钥被非法访问或公开的安全事件。AppKey是应用程序与第三方服务或API进行安全通信的凭证,通常用于身份验证和数据加密。如果这些密钥泄露,攻击者可以利用它们来访问敏感数据、执行未授权的操作或冒充合法的服务......
  • 【学习笔记】数学
    大坑填不完一点。1.矩阵乘法当且仅当对于一个\(n\timesm\)的矩阵\(A\)和\(m\timesk\)的矩阵\(B\),\(A\timesB=C\)。此时\(C\)为一个\(n\timesk\)的矩阵且\(C_{i,j}=\sum_{s=1}^{m}A_{i,s}+B_{s,j}\)。虽然说不是很理解为什么这么做就是了。比如说对于矩阵\(A......
  • C#学习笔记-类型、变量、对象
    数据类型  数据类型是性质相同的值的集合,并且伴随着针对不同数据类型的操作。例如int和double类型,这两种类型在内存中的存储方式不一样,进行各种运算及操作的方式也不一样。容纳数据的内存过小会导致数据丢失精度,容纳的内存过大则会浪费内存空间。C#是强类型语言,数据受......
  • ACM基础数论笔记
    基础数论部分整除定义设\(a,b\inZ,a\neq0,若\existq\inZ使得b=aq\),则b可被a整除,记作\(a\midb\),称b是a的倍数,a是b的约数不能整除\(a\nmidb\)定理\(a\mid{b}\iff-a\mid{b}\iffa\mid{-b}\iff|a|\mid|b|\)\(a\midb且b\midc\Rightarrowa\midc\)\(a\midb且a......
  • 数位dp笔记
    数位dp学习笔记数位dp的问题题型一般是给定一个闭区间[L,R],求这个区间中满足“某种条件”的数的个数的总数对于这类问题,我们首先统计[L,R]范围的满足条件的数字转化成统计[1,N]内满足条件的数字的数量那么ans[L,R]=ans[1,R]-ans[1,L-1];先将n转换成字符串str,使用记忆化搜索......
  • Pandas库学习笔记(4)---Pandas Panel
    PandasPanel  PandasPanel基本操作Panel数据3D容器.术语 Paneldata 源自计量经济学,名称来之于pandas− pan(el)-da(ta)-s.3个轴的名称描述如下-−items −轴0,每个items都对应一个包含在其中的DataFrame。major_axis −轴1,它是每个DataFrame的索引(行)。minor......
  • 《周期》霍华德马克思 读书笔记
    第七章投资人的心理和情绪钟摆周期像钟摆从最左端摆向平衡位置时他不会停下而会继续向右摆动,直到力量不再支持他向右继续摆动,调头返回投资人的心理在绝对乐观到绝对悲观之间摆动,绝对悲观时看到资产认为他像一个会带来成本的大楼,没有想到他能租出去带来收益。绝对乐观时认为资......
  • 图论算法学习笔记
    ybt1376floyd#include<iostream>#include<climits>#include<cstring>#include<queue>#include<vector>#defineinfinity0x3f3f3f3f#defineN105intn,m,G[N][N],dist[N][N];intmain(){ memset(dist,infinity,sizeof(dist)); st......