app自动化测试——appium的使用(代码片段)

宾有为 宾有为     2022-11-18     184

关键词:

目录

简介

Appium是一个开源测试自动化框架,用于原生、 混合和移动 Web 应用程序。

安装

Appium安装方式有两种,一种是通过npm命令行安装,另一种是通过安装可视化工具。

  • npm安装

    npm安装方式稍微麻烦一点,需要先安装npm才能进行操作,想了解的可参考:安装Appium

  • 可视化工具安装

    可视化工具的下载可前往Github下载

本文使用的是 可视化工具安装 方式。

配置 & Run

安装完成后启动Appium.exe,点击编辑配置


在弹出的配置界面中填写已提前配置好的环境变量路径并保存重新启动


重启后点击启动服务器


点击右上角的启动检查器会话



点击中间偏下方的 “ + ” 号添加参数

CapabilityDescription
platformName设备操作系统
platformVersion设备操作系统版本
deviceName设备名称(可通过执行adb的adb devies获取当前连接上的设备)
appPackage应用程序包名
appActivity从appPackage 中启动的 Android 活动的活动名称

更多Capability可参考:Appium Desired Capabilities

填写部分参数如下:


点击启动会话后弹出如下窗口:


Appium可以通过录制操作,生成JS、Java、Python、Ruby等程序可运行的语言。具体操作如:开始操作 → 点击app界面的某一个按钮或输入框 → 点击后会在右侧的 选定元素 中显示相关信息 → 选择 点击 或 发送密钥 的操作 → 刷新屏幕截图。


部分选择元素是无法选中的,需要使用坐标定位所点击位置。录制完相关操作,将录制生成的代码复制到剪贴板,粘贴至Android Studio 开发工具 @Test注解的方法里。


run 一下,自动化UI测试的操作步骤就完成了


Android Studio里面执行代码,应提前引入commons-lang3java-clientselenium-server-standalone三个jar包,下载地址在文章尾部。部分Java代码如下:

	@Before
    public void initAppium() 
        File classpathRoot = new File(System.getProperty("user.dir"));
        // 获取apps文件,前面测试应用所存放的目录
        File appDir = new File(classpathRoot, "/test_app/");
        // 获取apk文件
        File app = new File(appDir, "AppiumAutoTest.apk");
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("platformName", "测试的设备系统");
        capabilities.setCapability("platformVersion", "系统平台版本号");
        capabilities.setCapability("deviceName", "测试的设备名称");
        capabilities.setCapability("app", app.getAbsolutePath());
        capabilities.setCapability("appPackage", "被测应用包名");
        capabilities.setCapability("appActivity", "app启动的第一个运行界面");
        // 连接appium启动相应app
        try 
            driver = new AndroidDriver<>(new URL("http://192.168.31.98:4723/wd/hub"), capabilities);
         catch (MalformedURLException e) 
            e.printStackTrace();
        
        System.out.println("App is launched!");
    

    @Test
    public void startTest() throws InterruptedException 
        MobileElement el3 = (MobileElement) driver.findElementByAccessibilityId("Reflow");
        el3.click();
        sleep(1000);
        MobileElement el4 = (MobileElement) driver.findElementByAccessibilityId("Slideshow");
        el4.click();
        sleep(1000);
        MobileElement el5 = (MobileElement) driver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/androidx.drawerlayout.widget.DrawerLayout/android.view.ViewGroup/android.widget.LinearLayout[2]/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.view.ViewGroup");
        el5.click();
        sleep(1000);
        execRootCmdSilent("adb shell input tap 958 1588");
        sleep(1000);
        MobileElement el6 = (MobileElement) driver.findElementByAccessibilityId("更多选项");
        el6.click();
        sleep(1000);
        MobileElement el7 = (MobileElement) driver.findElementById("com.miyue.appiumautotest:id/title");
        el7.click();
        sleep(1000);
        MobileElement el8 = (MobileElement) driver.findElementByAccessibilityId("转到上一层级");
        el8.click();
    
    
	private void sleep(int second) throws InterruptedException 
        Thread.sleep(second);
    

    /**
     * 使用adb命令执行点击的坐标点
     * @param paramString
     */
    public void execRootCmdSilent(String paramString) 
        String content = "";
        BufferedReader reader = null;
        InputStream is = null;
        try 
            java.lang.Process process = Runtime.getRuntime().exec(paramString);
            is = process.getInputStream();
            reader = new BufferedReader(new InputStreamReader(is));
            StringBuffer output = new StringBuffer();
            int read;
            char[] buffer = new char[4096];
            while ((read = reader.read(buffer)) > 0) 
                output.append(buffer, 0, read);
            
            content = output.toString();
            System.out.println("App execution adb done!" + content);
         catch (Exception e) 
            e.printStackTrace();
            System.out.println("App issue!" + e.getMessage());
         finally 
            if (null != is) 
                try 
                    is.close();
                 catch (Exception e) 
                    e.printStackTrace();
                
            
            if (reader != null) 
                try 
                    reader.close();
                 catch (IOException e) 
                    e.printStackTrace();
                
            
        
    

    /**
     * 运行完成
     * @throws InterruptedException
     */
    @After
    public void end() throws InterruptedException 
        // 退出应用
        driver.quit();
    

问题 & 解决方案

  • no tasks available.

    原因:没有配置Run/Debug Configurations

  • Connection refused: connect.

    原因Appium服务未启动。

  • An unknown server-side error occurred while processing the command. Original error: Unable to find an active device or emulator with OS 11. The following are available: 6HJ4C19A29009173 (10).

    原因platformVersion 输入的操作系统与连接到的操作系统版本不对。

  • An unknown server-side error occurred while processing the command. Original error: Could not find a connected Android device in 20088ms.

    原因:未连接到测试设备,需要使用adb或数据线连接上设备,执行adb命令adb devices查看目前所连接到的设备,将设备名称拷贝粘贴至deviceName

  • 重新编写测试步骤的代码,应该提前clean运行缓存。

优点 & 缺点

优点

  • 支持第三方应用程序。
  • 支持同时测试多台设备。
  • 支持生成多种语言的测试代码。
  • 不需要把第三方代码编译进app中。
  • 解放了双手,避免了不必要的重复操作。
  • 支持IOS、Android、Windows的应用程序。
  • 支持Native apps、 Hybrid apps、Web apps。

缺点

  • 暂不支持可用于编写Android程序的Kotlin代码。
  • 相对于人工测试而言,Appium自动测试不太适合小规模的测试。

总结

噢,相信你体验之后肯定会刷新你对Appium的看法。

若测试的应用不需要进行多次重复性的UI测试,似乎没必要使用Appium自动化测试,与手动点击UI测试相比,速度慢的似乎不是一丁半点。

最近了解到一个叫AccessibilityService(无障碍服务)的东西,这玩意可以用来开发Application脚本,脚本执行速度那叫一个快。只可惜它不是一个自动化测试的框架,不然用来搞自动化测试应该很牛掰的吧。

本文Android Studio代码下载地址:Appium自动化测试的使用代码下载地址

参考资料

1、Appium官网
2、Appium下载地址
3、java-client.jar包下载地址
4、commons-lang3.jar包下载地址
5、Appium搭建Android自动化测试框架
6、selenium-server-standalone.jar包下载地址

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

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

app自动化测试----基础入门appium初使用2(uiautomator元素定位)(代码片段)

1.说明元素定位方式有多种,Android也有自身独有的定位方式。下面就单独介绍其基于uiautomator定位元素的方法。基本语法:driver.find_element_by_android_uiautomator(xx)参考文档:https://developer.android.com/reference/androidx/test/uiautomator/UiSelector&n... 查看详情

app自动化测试——appium的使用(代码片段)

...&解决方案优点&缺点总结简介Appium是一个开源测试自动化框架,用于原生、混合和移动Web应用程序。安装Appium安装方式有两种,一种是通过npm命令行安装,另一种是通过安装可视化工具。npm安装npm安装方式稍微... 查看详情

自动化测试之路——appium使用教程(代码片段)

@TOC1.目的  当今社会,人们的生活几乎已经无法离开各种的APP了,它提供给我们的便利与服务意义远远超出了其本身的软件价值。作为测试来说移动应用也早已是各大互联网公司的拳头产品,其本身的开发周期短,附属产... 查看详情

appium入坑必备--不写代码的自动化测试,你不心动吗?(代码片段)

       上一章我们讲了appium的一些基本操作,也是app测试中一些比较常用的一些方法。本章我们讲讲另外两种工具的使用,最后一种会让你心动!元素定位及工具使用-------必须学会的技能app定位的基本操作-------... 查看详情

app自动化测试系列之desiredcapabilities详解(代码片段)

在上一篇APP自动化系列文章:APP自动化测试系列之Appium介绍及运行原理,主要介绍appium的运行原理。以下主要介绍Appium中DesiredCapabilities的作用、常用配置及实战。一DesiredCapabilities介绍1DesiredCapabilities概念DesiredCapabilities是... 查看详情

(c#)appium自动化测试之卸载重装app(代码片段)

1、先获取session,实例化driver2、自动安装APP//安装driver.InstallApp("APP的路径");//判断是否安装完成,返回true\falseboolisInstalled=driver.IsAppInstalled("app包名");3、重启APP//重装过后要唤起APPdriver.ResetApp();4、卸载driver.RemoveApp("APP包名"); 查看详情

基于appium的app自动化测试框架(代码片段)

App自动化测试主要难点在于环境的搭建,appium完全是基于selenium进行的扩展,所以app测试框架也是基于web测试框架开发的一、设备连接(即构建基础的测试环境,保证可以驱动设备进行操作)0.准备测试环境1&#x... 查看详情

有关于appium自动化测试的问题

一般情况下是使用Mac下的appium来操作ios系统的app,或者是在win下的appium操作andriod系统的app,那么能否使用Mac下的appium来操作andriod的app呢?参考技术A目前好像没有这种操作,安卓和苹果系统不一样,appium里的获取app元素的方式也... 查看详情

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

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

appium学习笔记——appium初探,下载与安装以及初步的录制尝试(代码片段)

一.Appium简介Appium是一个开源测试自动化框架,可以用来测试NativeApp、混合应用、移动Web应用(H5应用)等,也是当下互联网企业实现移动自动化测试的重要工具。Appium坚持的测试理念:•无需用户对App进行任... 查看详情

appium学习笔记——appium初探,下载与安装以及初步的录制尝试(代码片段)

一.Appium简介Appium是一个开源测试自动化框架,可以用来测试NativeApp、混合应用、移动Web应用(H5应用)等,也是当下互联网企业实现移动自动化测试的重要工具。Appium坚持的测试理念:•无需用户对App进行任... 查看详情

爬虫学习笔记(二十一)——appium(代码片段)

...和作用1.1、概念appium是一个移动App(手机应用)自动化工具。支持iOS平台和Android平台上的原生应用,web应用和混合应用。它允许测试人员在不同的平台(iOS,Android)使用同一套API来写自动化测试脚本,... 查看详情

自动化测试之路——appium元素定位(代码片段)

@TOC1.目的  当今社会,人们的生活几乎已经无法离开形形色色的APP了,它提供给我们的便利与服务意义远远超出了其本身的软件价值。作为测试来说移动应用也早已是各大互联网公司的拳头产品,其本身的开发周期短,附... 查看详情

自动化测试之路——appium输入及模拟手势(代码片段)

  @TOC 1.目的  当今社会,人们的生活几乎已经无法离开各种各样的APP了,它提供给我们的便利与服务意义远远超出了其本身的软件价值。作为测试来说移动应用也早已是各大互联网公司的拳头产品,其本身的开... 查看详情

干货|app自动化测试之设备交互api详解(代码片段)

Appium提供了很多系统操作,在测试APP过程中会有一些特殊场景,比如来电话、短信,横竖屏切换,安装/卸载APP,手机上的键盘操作,录屏等功能。下面介绍几个常用的设备交互API。更多用法参见官网:... 查看详情

2022主流技术appium+ios自动化测试环境搭建(代码片段)

关于AppiumforIOSAppium是目前最主流的app自动化测试技术,能够同时支持IOS、Android平台上的移动应用自动化测试,能支持众多语言,包括:Java、Python、Ruby、JavaScript等;并且Appium是开源免费使用的。目前网上的关... 查看详情

appinum自动化测试利器入门(代码片段)

...令6.1查看是否连接成功6.2进程占用问题6.3通过命令获取app自动化核心参数7Appium定位元素的几种方法总结8应用测试案例8.1dingDing测试案例8.2studyEnhanceCountry测试案例1前言之前有些app,笔者进行学习任务时需要签到什么的,... 查看详情