首页 文章 精选 留言 我的

精选列表

搜索[自动化工具],共10000篇文章
优秀的个人博客,低调大师

Java自动化测试(Android app界面元素 33)

App分类 Native App 原生App 优点 直接依托于操作系统,交互性最强,性能最好,功能最为强大 缺点 开发成本高,更新缓慢,审核周期慢,维护成本高 Hybrid App 混合型App 优点 开发成本较低,可以跨平台,调试方便,维护成本低,功能可复用,性能和体验要比web app好,更新较自由 缺点 相比原生性能仍有较大损耗,不适用于交互性较强的app Web App 使用浏览器展示 优点 开发成本低,可以跨平台,调试方便,更新无需通知用户,不需要手动升级,无需安装App,不会占用手机存储空间 缺点 无法获取系统级别的通知/提醒/动效等,用户留存率低,体验差,设计受限较多 如何区分 开启显示布局界面,当看到出现方框则使用的是原生 定位 ActivityName & PackageName PackageName「包名」 应用的唯一身份标示,系统通过包名识别不同的应用,如两个相同包名的应用在安装时会提示覆盖 ActivityName「类名」 Activity:android四大组件之一,就是一个和用户交互的界面 $adbshelldumpsysactivity|grep"mFocusedActivity"#Android8以上$adbshelldumpsysactivity|grep"mResumedActivity" 查找当前Activity 启动入口appActivity和Activity的区别: appActivity在App中是唯一的,它的作用是用来启动app的 $aaptdumpbadgingD:\apk\base.apk|find"launchable-activity" App页面布局 布局类型 框架布局 所有控件都被放置在左上的区域 下一个子控件会重叠覆盖上一个控件 线性布局 控件的排序方式:垂直/水平 绝对布局 采用坐标轴的方式定位控件 左上角(0,0) 往右x+ 往下y+ 相对布局 根据参照物的位置,来确定控件的位置 表格布局 通过表格的行列布局控件位置 元素定位 打开uiautomatorviewer $cd/Users/zhongxin/Library/Android/sdk/tools/bin$shuiautomatorviewer uiautomatorviewer id定位 resource-id定位,App是允许「resource-id」相同,如果有相同的resource-id,那么获取第一个元素 androidDriver.findElement(MobileBy.id("com.lemon.lemonban:id/category_title")).click(); text定位 androidDriver.findElement(MobileBy.AndroidUIAutomator("newUiSelector().text(\"全程班\")")).click(); className定位 类似web tagName找到元素类型 androidDriver.findElement(MobileBy.className("android.widget.TextView")).click(); Xpath定位 androidDriver.findElement(MobileBy.xpath("//android.widget.TextView[@text='全程班']")).click();androidDriver.findElement(MobileBy.xpath("//android.widget.FrameLayout[@resource-id='com.lemon.lemonban:id/navigation_tiku']")).click(); 坐标定位 TouchActiontouchAction=newTouchAction(androidDriver);PointOptionpointOption=PointOption.point(445,1539);touchAction.press(pointOption).release().perform(); toast元素定位 Toast是一种简单的消息提示框。当视图显示给用户,在应用程序中显示为浮动。和Dialog不一样的是,它永远不会获得焦点,无法被点击。 获取方式1:隐式等待 androidDriver.manage().timeouts().implicitlyWait(8,TimeUnit.SECONDS);androidDriver.findElement(MobileBy.xpath("//*[contains(@text,'错误的账号信息')]")); 获取方式2:显式等待 WebDriverWaitwait=newWebDriverWait(androidDriver,5);WebElementelement=wait.until(ExpectedConditions.presenceOfElementLocated(MobileBy.xpath("//*[contains(@text,'错误的账号信息')]")));element.getText(); 使用Appium定位 1.填写连接信息 填写连接信息 2. 启动会话 Appium 调试代码 packagecom.zhongxin.day03;importio.appium.java_client.MobileBy;importio.appium.java_client.TouchAction;importio.appium.java_client.android.AndroidDriver;importio.appium.java_client.touch.offset.PointOption;importorg.apache.tools.ant.taskdefs.Touch;importorg.aspectj.apache.bcel.ExceptionConstants;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.remote.DesiredCapabilities;importorg.openqa.selenium.support.ui.ExpectedConditions;importorg.openqa.selenium.support.ui.WebDriverWait;importorg.testng.annotations.AfterTest;importorg.testng.annotations.BeforeTest;importorg.testng.annotations.Test;importjava.net.MalformedURLException;importjava.net.URL;importjava.util.concurrent.TimeUnit;publicclassElementLocator{privateAndroidDriverandroidDriver;@BeforeTestpublicvoidsetUp()throwsMalformedURLException{DesiredCapabilitiescapabilities=newDesiredCapabilities();capabilities.setCapability("platformName","Android");capabilities.setCapability("deviceName","127.0.0.1:62001");capabilities.setCapability("appPackage","com.lemon.lemonban");capabilities.setCapability("appActivity","com.lemon.lemonban.activity.WelcomeActivity");URLurl=newURL("http://127.0.0.1:4723/wd/hub");androidDriver=newAndroidDriver(url,capabilities);androidDriver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);}@Testpublicvoidtest01(){//androidDriver.findElement(MobileBy.id("com.lemon.lemonban:id/category_title")).click();//androidDriver.findElement(MobileBy.AndroidUIAutomator("newUiSelector().text(\"全程班\")")).click();//androidDriver.findElement(MobileBy.className("android.widget.TextView")).click();//androidDriver.findElement(MobileBy.xpath("//android.widget.TextView[@text='全程班']")).click();//androidDriver.findElement(MobileBy.xpath("//android.widget.FrameLayout[@resource-id='com.lemon.lemonban:id/navigation_tiku']")).click();//TouchActiontouchAction=newTouchAction(androidDriver);//PointOptionpointOption=PointOption.point(445,1539);//touchAction.press(pointOption).release().perform();androidDriver.manage().timeouts().implicitlyWait(8,TimeUnit.SECONDS);androidDriver.findElement(MobileBy.xpath("//*[contains(@text,'错误的账号信息')]"));WebDriverWaitwait=newWebDriverWait(androidDriver,5);WebElementelement=wait.until(ExpectedConditions.presenceOfElementLocated(MobileBy.xpath("//*[contains(@text,'错误的账号信息')]")));Stringtext=element.getText();System.out.println(text);}@AfterTestpublicvoidtearDown()throwsInterruptedException{Thread.sleep(2000);androidDriver.quit();}} 本文分享自微信公众号 - 测试游记(zx94_11)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册