appium+java实现androidapp自动化测试(代码片段)

OkidoGreen OkidoGreen     2023-03-19     759

关键词:

一、Appium:
是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。 它使用WebDriver协议驱动iOS,Android和Windows应用程序;
UiAutomator测试框架是AndroidSDK自带的App UI自动化测试Java库;
appium在Android端基于WebDriver协议,利用Bootstrap.jar,最后通过调用UiAutomator的命令,实现App的自动化测试。
demo:https://github.com/vachelx/AutoTest

二、工作原理

1.Client端将自动化测试脚本发送给Service;
2.Server端与移动设备连接,将脚本解析后通过UiAutomator命令控制和监听移动设备;
3.appium针对主流语言分别开发的相应的appium库(Python Java PHP Ruby等),均已经集成在Server端,所以Service端可解析多种语言的测试脚本;
4.appium针对每种语言都开发了对应的Client,我们只需要选择想用的语言对应的Client。

三、Java + appium配置
1.安装appium服务端:
提供了可视化版本appium-desktop:
https://github.com/appium/appium-desktop/releases/tag/v1.18.3
安装后主页面Host和port使用默认的即可。

Edit Configurations中配置Android SDK和jdk对应的路径;然后可以启动Service

2.Server链接测试用移动设备:连上usb,预配置链接设备相关参数(cilent初始化需要和这些参数对应)
deviceName:adb devices -l 获取;
platformVersion:adb shell getprop ro.build.version.release 获取;
appPackage: 测试应用的包名
appActivity: 要测试的页面
(这里服务器地址要记住,在Client中需要)
启动会话后移动设备和server会连接上;(appium-desktop提供了录制功能直接操作移动设备生成脚本)

3.Client端配置
这里使用Android studio + java编译测试脚本
直接依赖java-client库https://github.com/appium/java-client即可
脚本运行可以借助junit4
(如若使用Python,需要安装Python3+Python3的appium库,最好再安装Python的IDE)

使用
新建空的Android项目-> 新建java library module;
项目build.gradle中添加:

allprojects 
    repositories 
        google()
        jcenter()
        //项目build.gradle的中添加
        maven  url "https://jitpack.io" 
    

library module的build.gradle中添加依赖

apply plugin: 'java-library'

dependencies 
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'junit:junit:4.12'
    implementation 'androidx.test:runner:1.3.0'
    // 生成测试报告的extentreports库
    implementation group: 'com.aventstack', name: 'extentreports', version: '5.0.4'
    // java-client
    implementation 'com.github.appium:java-client:7.3.0'

接下来可以编写测试脚本了
脚本测试开始前需要配置与服务端的链接,拿到AndroidDriver以对移动设备进行指定操作;
需要在Junit合适的地方进行该初始化操作(和上面的服务端预配置参数一致)

  public AndroidDriver initDriver() 
        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
        desiredCapabilities.setCapability("platformName", "Android");
        desiredCapabilities.setCapability("appPackage", "com.tencent.mm");
        desiredCapabilities.setCapability("deviceName", "V1838A");
        desiredCapabilities.setCapability("platformVersion", "10");
        desiredCapabilities.setCapability("appActivity", "com.tencent.mm.ui.LauncherUI");
        desiredCapabilities.setCapability("resetKeyboard", true);
        desiredCapabilities.setCapability("noReset", true);
        desiredCapabilities.setCapability("automationName", "UiAutomator2");
        desiredCapabilities.setCapability("ensureWebviewsHavePages", true);
// 这里Url为服务端url driver即为服务端链接的移动设备驱动者
        driver = new AndroidDriver(new URL(Config.REMOTE_URL), desiredCapabilities);
        return driver;
    

demo:

public class JumpWXFriends
    private AndroidDriver mDriver; // 测试手机的控制者
    private static ExtentReports mExtent;
    
    @BeforeClass
    public static void beforeClass() // 在类初始化前初始化报告生成器
         String reportPath = "reports/" + Util.getMarkDate() + "/" + Util.getMarkTime() + ".html";
         mExtent = new ExtentReports();
         ExtentSparkReporter spark = new ExtentSparkReporter(reportPath);
         spark.config().setOfflineMode(true);
        mExtent .attachReporter(spark);
    
    
    // 监听每个@Test方法执行前后的额外操作->记录报告
    @Rule
    public TestWatcher eu = new ExtendWatcher(mExtent); 
    
    // case开始前初始化与Service链连接
    @Before
    public void setUp() throws MalformedURLException 
        // 上面的与服务器链接的初始化操作 
        mDriver = getDriver();
    
    
    @After
    public void tearDown() 
        // testcase测试结束后关闭连接
       mDriver.quit();
    
    
    @Test
    public void testJumpWXFriends() 
        Util.waitActivity(MAIN_ACTIVITY, 30, mDriver);
        Util.sleep(1);
// 这个是Appium-desktop生成的脚本代码
// 从微信主页 - 发现 - 朋友圈 - 向下滑动一段
        MobileElement el1 = (MobileElement) mDriver.findElementByXPath("//android.widget.FrameLayout[@content-desc=\\"当前所在页面,与的聊天\\"]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.RelativeLayout[3]/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.ImageView[1]");
        el1.click();
        MobileElement el2 = (MobileElement) mDriver.findElementByXPath("//android.widget.FrameLayout[@content-desc=\\"当前所在页面,与的聊天\\"]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/com.tencent.mm.ui.mogic.WxViewPager/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.ListView/android.widget.LinearLayout[1]/android.widget.LinearLayout/android.widget.LinearLayout[1]/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout");
        el2.click();
        new TouchAction(mDriver).press(PointOption.point(1200, 787)).moveTo(PointOption.point(734, 271)).release().perform();
    

appium自动化的一个实例

实现appium的自动化,三步走,具体如下:第一步:启动appium的服务端:可以通过命令行的方式启动:cmd,然后输入appium,如下图也可以打开桌面程序appium,点击右上角的运行按钮,如下图:  第二步,写自动化脚步,我这... 查看详情

使用 Appium 访问 React 元素以实现自动化

】使用Appium访问React元素以实现自动化【英文标题】:AccessingReactElementsusingAppiumforAutomation【发布时间】:2016-02-2912:08:08【问题描述】:我一直在使用Appium测试一个混合android应用程序,包括在NATIVE和WEBVIEW上下文之间频繁转换。这... 查看详情

多图预警,appium实现手机自动化,搭配mitmproxy不就实现自动采集了吗?(代码片段)

本篇博客为你带来一款手机自动化软件Appium,看这个名字,与Selenium一致,你就能琢磨一些事情了。既然是一款软件的学习,那最难的是什么?把这款软件安装到电脑上,并让其运行起来。Appium这么学就对... 查看详情

测试appium原理

文章目录​​前言​​​​Appium的实现原理​​​​被测设备为安卓​​​​被测设备为苹果​​前言Appium是一块主流的移动自动化测试框架,支持跨语言(如Java,Python等)Appium的实现原理被测设备为安卓对于安卓被测设备,... 查看详情

appium关于游戏自动化有啥好的方法去实现么

参考技术A优势就是可以随意选择编程语言,appium兼容性还不错。劣势就是难用 查看详情

如何实现appium移动端的新特性:getContexts for android混合自动化

】如何实现appium移动端的新特性:getContextsforandroid混合自动化【英文标题】:Howtoimplementappium\'snewfeatureofmobile:getContextsforandroidhybridautomation【发布时间】:2021-10-2021:59:05【问题描述】:Appium引入了使用移动命令mobile:getContexts收集we... 查看详情

Google Instant App - 如何使用 Appium 实现自动化

】GoogleInstantApp-如何使用Appium实现自动化【英文标题】:GoogleInstantApp-HowtobegoaboutautomatingwithAppium【发布时间】:2017-12-3012:01:59【问题描述】:我们知道应用程序需要由浏览器启动,然后应用程序容器会与缓存的应用程序一起出现... 查看详情

iPhone 6[OS 9.2] 可以使用 SFSafariViewController、appium 和 Selenium WebDriver 实现自动化吗?

】iPhone6[OS9.2]可以使用SFSafariViewController、appium和SeleniumWebDriver实现自动化吗?【英文标题】:CaniPhone6[OS9.2]beautomatedusingSFSafariViewController,appium&SeleniumWebDriver?【发布时间】:2016-01-1110:46:17【问题描述】:我是SFSafariViewControlle 查看详情

appium工具使用

一、appium简介1、appium是开源的支持移动测试的自动化测试框架,官网是appium.io2、appium支持的平台:Android、iOS、某些windows应用3、测试时支持的移动APP的类型  原生(native):实现技术(Android:java,iOS:objective-c)  web(htm... 查看详情

python+appium实现app自动化测试(代码片段)

Python+Appium实现app自动化测试一、Appium简介Appium是一款开源工具,用于自动化iOS、Android和Windows桌面平台上的本地、移动web和混合应用程序。原生应用是指那些使用iOS、Android或Windowssdk编写的应用。移动网页应用是通过移动... 查看详情

android自动化测试:如何实现appium每次运行,不安装app(代码片段)

fromappiumimportwebdriverfromappium.webdriver.common.touch_actionimportTouchActionimporttimecaps=caps[“platformName”]=“Android”caps[“deviceName”]=“CVH7N15C14002535”caps[‘noReset’]=True 查看详情

appium自动化滑动鼠标滚动条的用法

在做APP自动化的时候,有的时候,需要下滑页面进行定位。例如下图: 有的时候也可能向上滑动,这个时候就要用到关键字:scroll了。RF上的解释:看它的说明就很简单了,只要输入两个参数:开始位置和结束位置。这里需... 查看详情

python+appium自动化实现qq名片赞

参考技术Afrom appium import webdriverfrom utils.appiumtools import find_element# from utils.appiumtools import find_elementimport timedesired_caps = desired_caps['platformName'] = 'Android'  ... 查看详情

appium+python自动化50-生成定位对象模板templet(jinja2)

...用代码去自动生成代码,做到代码自动化接着上一篇讲:appium+python自动化49-yaml管理定位元素jinja2简介1.jinja2官方文档 查看详情

appium+python自动化50-生成定位对象模板templet(jinja2)

...用代码去自动生成代码,做到代码自动化接着上一篇讲:appium+python自动化49-yaml管理定位元素jinja2简介1.jinja2官方文档:官 查看详情

python爬虫:使用appium在移动端抓取微博数据(代码片段)

目录使用Appium在移动端抓取微博数据查找AndroidApp的Package和入口记录微博刷新动作爬取微博第一条信息使用Appium在移动端抓取微博数据Appium是移动端的自动化测试工具,读者可以类比为PC端的selenium。通过它,我们可以驱... 查看详情

python爬虫:使用appium在移动端抓取微博数据(代码片段)

目录使用Appium在移动端抓取微博数据查找AndroidApp的Package和入口记录微博刷新动作爬取微博第一条信息使用Appium在移动端抓取微博数据Appium是移动端的自动化测试工具,读者可以类比为PC端的selenium。通过它,我们可以驱... 查看详情

appium移动端自动化测试一

最近公司决定使用appium为主体框架做一个移动端得自动化测试系统,我会陆续记录项目得进展。1.首先是appium环境得搭建,需要安装appium-server,appium-desktop,android-sdk等一系列工具,编译工具我用的是IDEA 这些安装请自行百度。... 查看详情