Android 13 GTS GtsPermissionControllerHostTestCases Test Failed

news2024/11/26 23:38:46

Android13 平板项目测试GtsPermissionControllerHostTestCases Failed,失败日志如下:

java.lang.AssertionError: on-device tests failed:
com.android.gts.permissioncontroller.PermissionControllerTest29#testGranted:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean androidx.test.uiautomator.UiObject2.isChecked()' on a null object reference
at com.android.gts.permissioncontroller.BasePermissionsTest.setPermissionGrantState(BasePermissionsTest.java:527)
at com.android.gts.permissioncontroller.BasePermissionsTest.setPermissionGrantState(BasePermissionsTest.java:502)
at com.android.gts.permissioncontroller.BasePermissionsTest.grantPermissions(BasePermissionsTest.java:393)
at com.android.gts.permissioncontroller.BasePermissionsTest.grantPermission(BasePermissionsTest.java:389)
at com.android.gts.permissioncontroller.PermissionControllerTest29.testGranted(PermissionControllerTest29.java:103)

    at android.permissioncontroller.gts.Utils.runDeviceTests(Utils.java:130)
    at android.permissioncontroller.gts.Utils.runDeviceTests(Utils.java:80)
    at android.permissioncontroller.gts.Utils.runDeviceTestsAsCurrentUser(Utils.java:44)
    at android.permissioncontroller.gts.PermissionControllerHostTest.testGrantAppPermissionFragment(PermissionControllerHostTest.java:229)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:61)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
    at com.android.tradefed.testtype.DeviceJUnit4ClassRunner.runChild(DeviceJUnit4ClassRunner.java:111)
    at com.android.tradefed.testtype.DeviceJUnit4ClassRunner.runChild(DeviceJUnit4ClassRunner.java:63)
    at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
    at com.android.tradefed.testtype.DeviceJUnit4ClassRunner.run(DeviceJUnit4ClassRunner.java:147)
    at com.android.tradefed.testtype.junit4.ExceptionThrowingRunnerWrapper.run(ExceptionThrowingRunnerWrapper.java:43)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.android.tradefed.testtype.HostTest.runJUnit4Tests(HostTest.java:736)
    at com.android.tradefed.testtype.HostTest.runTestClasses(HostTest.java:616)
    at com.android.tradefed.testtype.HostTest.run(HostTest.java:564)
    at com.android.compatibility.common.tradefed.testtype.JarHostTest.run(JarHostTest.java:56)
    at com.android.tradefed.testtype.suite.GranularRetriableTestWrapper.intraModuleRun(GranularRetriableTestWrapper.java:379)
    at com.android.tradefed.testtype.suite.GranularRetriableTestWrapper.run(GranularRetriableTestWrapper.java:289)
    at com.android.tradefed.testtype.suite.ModuleDefinition.run(ModuleDefinition.java:595)
    at com.android.tradefed.testtype.suite.ITestSuite.runSingleModule(ITestSuite.java:951)
    at com.android.tradefed.testtype.suite.ITestSuite.run(ITestSuite.java:828)
    at com.android.tradefed.invoker.InvocationExecution.runTest(InvocationExecution.java:1359)
    at com.android.tradefed.invoker.InvocationExecution.runTests(InvocationExecution.java:1138)
    at com.android.tradefed.invoker.TestInvocation.prepareAndRun(TestInvocation.java:626)
    at com.android.tradefed.invoker.TestInvocation.performInvocation(TestInvocation.java:278)
    at com.android.tradefed.invoker.TestInvocation.invoke(TestInvocation.java:1357)
    at com.android.tradefed.command.CommandScheduler$InvocationThread.run(CommandScheduler.java:686)

观察日志,大概意思是某个view是空,导致改测试项没继续下去,反编译该测试apk,查看源码如下:

代码很简单,就是去测试app会去申请CALENDAR 权限,具有权限以后,从日历的数据库查询一条数据,查询成功,该测试项视为PASS

申请权限,其实就是会跳转权限管理界面,也就是APP的详情界面--》Permissions-->权限列表,找到CALENDAR 权限,然后点击进去允许。。

我们失败的原因是最后一个界面的允许权限,没获取到对应的控件。仔细看下这块找控件的代码,其实是根据权限--》label-->然后找到这个view--》点击进去

我们这里就是

android.permission.READ_CALENDAR--》CALENDAR根据这个label找到view..

其实这里我们就能找到问题了,如果一个界面上有两个TextView的名字都是CALENDAR,那这里就不一定会是权限列表的那个TexviewView,接着就不会进到第三个界面,也就会造成测试报错那样,找不到getDenyButton()isChecked,也就终止了测试。

因为我们的是平板项目,Android12以后的大屏或者平板项目,底部的导航栏会变成显示一个任务栏,从 NavigationBar 变成 Taskbar ,Taskbar 允许一部分app常驻于此;

可以看到不管点进哪个app,底部都有个TaskBar,而且我们的TaskBar 常驻的app里面刚好有App叫CALENDAR,这就会导致我们在测试的时候,第二个界面就会点击到底部TaskBar的CALENDAR

这就是我们测试失败的原因。修改方法也很简单,PermissionControllerTest29 APP内涉及的权限,底部不包含这些权限对应Label同名的APP就可以了

也就是我们底部的TASKBAR 不能包含APP名字为:Contacts,Calendar,Location,Camera即可。移除以后,复测PASS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1167053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搭建专属品牌的独立题库小程序,自定义小程序名称和Logo|题库刷题小程序定制开发

土著刷题Plus专业版,以【录题-分组-刷题-考试】为中心打造一套完备的在线组卷刷题学习平台,自定义品牌名称和Logo,入驻后,您将拥有自己独立的企业级专业运营管理平台。 土著刷题Plus专业版v1.3.1版本,我们迭代了独立小…

uniapp踩坑之项目:uniapp数字键盘组件—APP端

//在components文件夹创建digitKeyboard文件夹&#xff0c;再创建digitKeyboard.vue <!-- 数字键盘 --> <template><view class"digit-keyboard"><view class"digit-keyboard_bg" tap"hide"></view><view clas…

【Spring Boot】发送邮件功能

发送邮件功能 一.pom.xml文件添加邮件依赖二.发送邮件信息&#xff08;1&#xff09;固定配置在application.yml&#xff08;2&#xff09;发送邮箱配成活&#xff08;3&#xff09;底层发送邮件方法&#xff08;4&#xff09;QQ邮箱开通smtp服务&#xff08;5&#xff09;网易…

基础课17——智能客服系统

客户服务是一种以客户为中心的服务模式&#xff0c;旨在提高客户满意度和忠诚度&#xff0c;促进企业业务增长和可持续发展。在客户服务中&#xff0c;企业需要了解客户需求&#xff0c;提供优质、高效、个性化的服务&#xff0c;解决客户问题&#xff0c;满足客户需求&#xf…

蓝图分离卷积BSConv 学习笔记 (附代码)

论文地址&#xff1a;https://arxiv.org/abs/2003.13549 代码地址&#xff1a;https://github.com/zeiss-microscopy/BSConv 1.是什么&#xff1f; BSConv是深度可分离卷积DSConv的升级版本&#xff0c;它更好地利用内核内部相关性来实现高效分离。具体而言&#xff0c;BSCo…

lerna + vite + typescript 多库,多应用共存项目脚手架模板

最近想把多个代码仓进行合并&#xff0c;形成一个大的代码仓&#xff0c;需要将各个库以及应用放在一个项目下&#xff0c;统一打包管理。会形成如下文件结构&#xff1a; 在网上找了一圈&#xff0c;没有找到合适的脚手架模板。索性自己弄一个吧&#xff0c;开源一下&#x…

云产品OSS免费试用获取奖励步骤

文章目录 1、获取活动链接2、报名参加3、试用产品领取产品试用权限上传文件开启加速传输提交作品 4、提交任务获取奖励 1、获取活动链接 活动时间2023.11.1&#xff5e;2023.11.30 名额有限&#xff0c;先到先得 进群群主获取活动链接 2、报名参加 直接点击链接进入小程序进…

Centralized Feature Pyramid for Object Detection解读

Centralized Feature Pyramid for Object Detection 问题 主流的特征金字塔集中于层间特征交互&#xff0c;而忽略了层内特征规则。尽管一些方法试图在注意力机制或视觉变换器的帮助下学习紧凑的层内特征表示&#xff0c;但它们忽略了对密集预测任务非常重要的被忽略的角点区…

自动驾驶算法(四):RRT*算法讲解与代码实现(基于采样的路径规划)

目录 1 RRT算法和RRT*算法 2 RRT*代码相比于RRT的改进 3 RRT*完整代码 1 RRT算法和RRT*算法 从上篇博客我们可以看出&#xff0c;RRT算法找到最短路径特别快。因为它是一段一段的过去的&#xff0c;但同时它产生的路径也是非常糟糕、随机的只要找到了终点就会结束。 因此我们…

INFINI Labs 产品更新 | Agent 全新重构,优化指标采集,支持集中配置管理,支持动态下发等功能

INFINI Labs 产品又更新啦~ 本次更新主要有 Agent、Console、Loadgen 等产品&#xff0c;其中 Agent 进行全新重构升级&#xff0c;新版限制了 CPU 资源消耗&#xff0c;优化了内存&#xff0c;相比旧版内存使用率降低 10 倍&#xff0c;极大的降低了对宿主服务器造成资源占用…

Postgresql在linux环境下以源码方式安装

linux环境下源码方式的安装 1.下载安装包&#xff08;源码安装方式&#xff09; 安装包下载 https://www.postgresql.org/ftp/source/ 2.安装postgresql ① 创建安装目录 mkdir /opt/pgsql12② 解压下载的安装包 cd /opt/pgsql12 tar -zxvf postgresql-12.16.tar.gz ③编…

【UE5 Cesium】actor随着视角远近来变化其本身大小

效果 步骤 1. 首先我将“DynamicPawn”设置为默认的pawn类 2. 新建一个父类为actor的蓝图&#xff0c;添加一个静态网格体组件 当事件开始运行后添加一个定时器&#xff0c;委托给一个自定义事件&#xff0c;每2s执行一次&#xff0c;该事件每2s获取一下“DynamicPawn”和acto…

【优秀毕设】基于vue+ssm+springboot的校园交友网站系统设计(附源码论文)

摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…

智能客服系统应用什么技术?

随着科技的飞速发展&#xff0c;智能客服系统逐渐出现在我们的生活中。这些系统不仅能够提供即时的客户服务&#xff0c;还可以通过人工智能等技术实现更加高效和准确的服务。那么&#xff0c;智能客服系统究竟应用了哪些技术呢&#xff1f;本文将详细解析。 1、机器学习技术 …

专访虚拟人科技:如何利用 3DCAT 实时云渲染打造元宇宙空间

自古以来&#xff0c;人们对理想世界的探索从未停止&#xff0c;而最近元宇宙的热潮加速了这一步伐&#xff0c;带来了许多新的应用。作为元宇宙的关键入口&#xff0c;虚拟现实&#xff08;VR&#xff09;将成为连接虚拟和现实的桥梁。苹果发布的VISION PRO头戴设备将人们对VR…

YOLOv8改进之更换BiFPN并融合P2小目标检测层

目录 1. BiFPN 1.1 FPN的演进 2. YOLOv8改进之更换BiFPN并融合P2小目标检测层 1. BiFPN BiFPN&#xff08;Bi-directional Feature Pyramid Network&#xff09;是一种用于目标检测和语义分割任务的神经网络架构&#xff0c;旨在改善特征金字塔网络&#xff08;Feature Pyram…

京东平台3个热门API接口的分享【附代码实例】

应用程序接口API&#xff08;Application Programming Interface&#xff09;&#xff0c;是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统&#xff08;中后台系统&#xff09;或后台不同系统之间的交互点。包括外部接口、内部接口&#xf…

微服务接口测试中的参数传递

这是一个微服务蓬勃发展的时代。在微服务测试中&#xff0c;最典型的一种场景就是接口测试&#xff0c;其目标是验证微服务对客户端或其他微服务暴露的接口是否能够正常工作。对于最常见的基于Restful风格的微服务来说&#xff0c;其对外暴露的接口就是HTTP端点(Endpoint)。 这…

基于SSM的餐饮掌上设备点餐系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…