Appium 2安装与使用java对Android进行自动化测试

这篇具有很好参考价值的文章主要介绍了Appium 2安装与使用java对Android进行自动化测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、Appium 2.1安装

1.1、系统要求

当前Appium2.1服务器的要求:

  • 支持macOS、Linux或Windows操作系统
  • Node.js版本要求^14.17.0 || ^16.13.0 | >=18.0.0
  • NPM版本>= 8 (NPM通常与Node.js捆绑在一起,但可以独立升级)

系统要求:http://appium.io/docs/en/2.1/intro/requirements/

1.2、安装Appium2.1服务

下载nodejs:https://nodejs.org/zh-cn/download/releases
本文下载:node-v18.17.1-win-x64.zip
解压在D:\Program Files\nodejs\node-v18.17.1-win-x64目录
在PATH环境变量中添加

D:\Program Files\nodejs\node-v18.17.1-win-x64

npm默认使用国外源,网络原因容易出现安装依赖失败,本文设置npm为国内源

npm config set registry https://registry.npmmirror.com

运行NPM命令安装Appium,参考官方安装http://appium.io/docs/en/2.1/quickstart/install/

npm i --location=global appium

图片

安装成功后,输入下边命令可以直接启动服务

appium

Appium 2安装与使用java对Android进行自动化测试,appium,java,android

1.3、安装UiAutomator2驱动

查看当前可用驱动appium driver list

C:\Users\admin>appium driver list
✔ Listing available drivers
- uiautomator2 [not installed]
- xcuitest [not installed]
- mac2 [not installed]
- espresso [not installed]
- safari [not installed]
- gecko [not installed]
- chromium [not installed]
  • uiautomator2 用于android自动化测试
  • xcuitest 用于ios自动化测试
    本文只研究android测试,输入下边命令安装
appium driver install uiautomator2

Appium 2安装与使用java对Android进行自动化测试,appium,java,android

官方参考:http://appium.io/docs/en/2.1/quickstart/uiauto2-driver/
可能会遇到的一个错误

Error installing Chromedriver: unable to verify the first certificate

# 解决方法
npm config set strict-ssl false
npm config set ca=""

1.4、安装Android SDK platform tools

下载Android SDK platform tools:Android SDK platform tools
解压目录:D:\ProgramData\android\sdk\platform-tools
在PATH环境变量中添加

D:\ProgramData\android\sdk\platform-tools

如果使用真机测试,只安装platform tools就可以了,如果使用模拟器,需要安装完整在sdk,可以下载Android Studio:https://developer.android.google.cn/studio,使用Android Studio里面的管理SDK工具管理相关SDK和工具。
Appium 2安装与使用java对Android进行自动化测试,appium,java,android
Appium 2安装与使用java对Android进行自动化测试,appium,java,android

1.5、下载OpenJDK

下载OpenJDK:https://21doc.net/java/awesomejava#jvm-and-jdk
当前版本支持JDK11,本文使用bellsoft-jdk11.0.20+8-windows-amd64.zip,下载地址:https://bell-sw.com/pages/downloads/

下载后解压在:C:\Program Files\Java\bellsoft\jdk-11.0.20
在PATH环境变量中添加

C:\Progra~1\Java\bellsoft\jdk-11.0.20\bin

2、Android自动代码例子

2.1、安装Android自动化测试元素定位工具Appium Inspector

Appium Inspector官网:https://github.com/appium/appium-inspector
官方介绍Appium Inspector基本上只是一个带有用户界面的Appium客户端(如WebdriverIO、Appium的Java客户端、Appium的Python客户端等)。有一个接口用于指定使用哪个Appium服务器、设置哪些功能,然后在启动会话后与元素和其他Appium命令进行交互。
在1.22版本后appium-deskop不集成Appium Inspector,所以Appium Inspector需要单独打开。
Appium Inspector支持web和客户端版本。

  • web版本
    web版本可以直接访问:https://inspector.appiumpro.com/使用。

  • 客户端版本
    下载地址:https://github.com/appium/appium-inspector/releases
    Appium 2安装与使用java对Android进行自动化测试,appium,java,android

点击“启动会话”,就可以打开APP,进行元素定位
Appium 2安装与使用java对Android进行自动化测试,appium,java,android

参数配置可查看:https://appium.io/docs/en/2.1/guides/caps/

** 启动会话可能会出现下边的错误提示**

Exception in thread "main" org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Response code 500. Message: An unknown server-side error occurred while processing the command. Original error: Check https://forum.xda-developers.com/t/i-cant-enable-write_secure_settings-for-an-app-over-adb.3855596/ for throubleshooting. Error executing adbExec. Original error: 'Command 'D:\\ProgramData\\android\\sdk\\platform-tools\\adb.exe -P 5037 -s 972cac1 shell 'settings delete global hidden_api_policy_pre_p_apps;settings delete global hidden_api_policy_p_apps;settings delete global hidden_api_policy'' exited with code 255'; Command output: Security exception: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS

解决办法

  • 小米设备: 开启 USB调试(安全设置)
    (1) 手机-插入 sim卡
    (2) 设置 - 更多设置 - 开发者选项 - USB调试(安全设置)- 开启

  • OPPO设备: 开启 禁止权限监控
    开发者选项 - 禁止权限监控 - 开启

2.2、编写android app自动化测试代码和使用extentreports生成测试报告

使用appium的java-client库(https://github.com/appium/java-client)编写android app自动化测试代码,并使用extentreports生成测试报告
maven工程,pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.penngo.app</groupId>
    <artifactId>monitor_app</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <log4j2.version>2.17.2</log4j2.version>
        <slf4j_simple.version>1.7.36</slf4j_simple.version>
        <lombok.version>1.18.24</lombok.version>
        <testng.version>7.4.0</testng.version>
        <hutool.version>5.8.3</hutool.version>
        <extentreports-testng-adapter.version>1.2.3</extentreports-testng-adapter.version>
        <extentreports.version>5.0.9</extentreports.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>8.5.1</version>
<!--            <scope>test</scope>-->
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testng.version}</version>
        </dependency>
        <dependency>
            <groupId>com.aventstack</groupId>
            <artifactId>extentreports</artifactId>
            <version>${extentreports.version}</version>
        </dependency>
        <dependency>
            <groupId>com.aventstack</groupId>
            <artifactId>extentreports-testng-adapter</artifactId>
            <version>${extentreports-testng-adapter.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>${slf4j_simple.version}</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>${hutool.version}</version>
        </dependency>
    </dependencies>


    <repositories>
        <repository>
            <id>alimaven</id>
            <name>Maven Aliyun Mirror</name>
            <url>https://maven.aliyun.com/repository/central</url>
        </repository>
    </repositories>
    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>${maven.compiler.source}</source>
                <target>${maven.compiler.source}</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
    </plugins>
    </build>
</project>

测试用例java代码

import cn.hutool.core.io.FileUtil;
import com.aventstack.extentreports.testng.listener.ExtentIReporterSuiteClassListenerAdapter;
import io.appium.java_client.AppiumBy;
import io.appium.java_client.android.Activity;
import io.appium.java_client.android.AndroidDriver;
import lombok.extern.slf4j.Slf4j;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;

import java.io.File;
import java.io.FileOutputStream;
import java.time.Duration;
import java.util.HashSet;
import java.util.List;

/**
 * 例子
 * https://github.com/appium/java-client/blob/master/src/test/java/io/appium/java_client/android/AndroidTouchTest.java
 */
@Listeners(ExtentIReporterSuiteClassListenerAdapter.class)
@Slf4j
@Test(description="APP测试", priority = 1)
public class AppTest {
    public static final String APP_ID = "com.penngo.xxx";
    protected static final int PORT = 4723;
    protected static AndroidDriver driver = null;
    private static AppiumDriverLocalService service;

    @BeforeClass
    public void setUpAll(){
        service = new AppiumServiceBuilder()
                .withIPAddress("127.0.0.1")
                .usingPort(PORT)
                .build();
        service.start();
        UiAutomator2Options options = new UiAutomator2Options()
                .setDeviceName("972cac1")
                .setAppPackage(APP_ID)
                .setAppActivity("com.penngo.xxx.activity.MainActivity")
                ;
        driver = new AndroidDriver(service.getUrl(), options);
    }

    @AfterClass
    public void tearDownAll(){
        if(driver != null){
            driver.quit();
        }
    }
    /**
     * app首页
     */
    @Test(description="APP首页", priority = 1)
    public void testHome() {
        String activity = driver.currentActivity();
        Assert.assertEquals(activity, ".activity.MainActivity");


    }

    /**
     * app 我首页
     */
    @Test(description="关于", priority = 2)
    public void testMe() {
        String activity = driver.currentActivity();
        // 获取底部5个选项
        WebElement navTabIndicator = driver.findElement(AppiumBy.id("com.penngo.xxx:id/NavTabIndicator"));
        List<WebElement> list = navTabIndicator.findElements(AppiumBy.className("android.widget.TextView"));
        System.out.println("list.size====="+ list.size());
        HashSet tabs = new HashSet();

        WebElement myElement = null;
        for(WebElement el:list){
            String text = el.getAttribute("text");
            if(text.equals("关于")){
                myElement = el;
            }
        }
        // 切换到关于选项卡
        myElement.click();
        new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.elementToBeClickable(AppiumBy.id("com.penngo.xxx:id/setting_fragment")));

        // 切换到设置
        WebElement setting = driver.findElement(AppiumBy.id("com.penngo.xxx:id/setting_fragment"));
        setting.click();

        new WebDriverWait(driver, Duration.ofSeconds(10)).until(d->{
            AndroidDriver driver2 = (AndroidDriver)d;
            String currentActive = driver2.currentActivity();
            if(!currentActive.equals(activity)){
                log.info("设置====" + activity);
                return currentActive;
            }
            else{
                return null;
            }
        });
        System.out.println("设置 Activity====" + driver.currentActivity());
        log.info("设置 Activity====" + driver.currentActivity());
        // 截图
        File screenShotFile = driver.getScreenshotAs(OutputType.FILE);
        System.out.println("screenShotFile====" + screenShotFile);

        FileUtil.copy(screenShotFile.getAbsolutePath(), new File("logs/setting.png").getAbsolutePath(), true);
    }

}


运行效果:
Appium 2安装与使用java对Android进行自动化测试,appium,java,android

生成测试报告:
Appium 2安装与使用java对Android进行自动化测试,appium,java,android

更多官方例子:https://github.com/appium/java-client/tree/master/src/test/java/io/appium/java_client/android文章来源地址https://www.toymoban.com/news/detail-661163.html

到了这里,关于Appium 2安装与使用java对Android进行自动化测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Android+Appium自动化测试环境搭建及实操

    Android+Appium自动化测试环境搭建及实操

     Appium是一个开源的移动端自动化测试工具,适用于 移动端原生APP、移动Web APP或混合APP 的自动化测试;  Appium继承了Selenium(Web端自动化测试工具),应用 WebDriver (JSON wire protocol)技术,借助操作系统自带的测试框架来驱动Android和IOS应用。 特点 :Appium是一个开源、跨平台、多

    2024年02月08日
    浏览(18)
  • Android常用9种自动化测试框架对比,Appium有哪些优势?

    Android常用9种自动化测试框架对比,Appium有哪些优势?

    随着移动终端的普及,手机应用越来越多,也越来越重要。 App的回归测试用例数量也越来越多,全量回归也越来越消耗时间。 移动 APP自动化测试 的难点 移动 APP的UI自动化测试长久以来一直是一个难点,难点在于UI的”变”, 变化导致自动化用例的大量维护。 从分层测试的角

    2024年01月21日
    浏览(8)
  • Java + Selenium + Appium自动化测试

    Java + Selenium + Appium自动化测试

    一、启动测试机或者Android模拟器(Genymotion俗称世界上最快的模拟器,可自行百度安装) 二、启动Appium(Appium环境安装可自行百度) 三、安装应用到Genymotion上,如下图我安装一个计算机的小应用,包名为CalcTest.apk 安装步骤:(基于Android SDK已经配置好了环境变量,可自行百

    2024年02月07日
    浏览(14)
  • java APP自动化测试AppIum

    java APP自动化测试AppIum

    一、前言 二、Appium环境搭建 2.1 JDK安装 2.2 Android SDK安装配置 2.3 模拟器安装及配置 2.4 Appium Desktop安装及使用 2.5 Appium配置连接模拟器 三、实战基本脚本编写 3.1 创建Maven项目并配置 3.2 简单Demo 四、写在最后   一、 前言 随着移动互联网的发展,APP上面的测试逐渐的流行起来。

    2024年02月05日
    浏览(11)
  • Java + Selenium + Appium手机自动化测试

    Java + Selenium + Appium手机自动化测试

    一、启动测试机或者Android模拟器(Genymotion俗称世界上最快的模拟器,可自行百度安装) 二、启动Appium(Appium环境安装可自行百度)   三、安装应用到Genymotion上,如下图我安装一个计算机的小应用,包名为CalcTest.apk 安装步骤:(基于Android SDK已经配置好了环境变量,可自行

    2024年02月06日
    浏览(14)
  • appium脚本执行Android_UI自动化,app总是闪退回桌面

    appium脚本执行Android_UI自动化,app总是闪退回桌面

    1. 使用工具 appium python pycharm 2. 被测对象及设备 测试真机上的app 3. 遇到的问题 批量执行测试用例,执行到部分用例某一步骤时,app会自动退回手机桌面,并开始执行下一条用例,因上一条故障导致下一条用例找不到页面元素而执行失败(每次失败位置是随机的)。所有用例

    2024年02月16日
    浏览(15)
  • mac+Appium自动化测试环境安装及配置

    mac+Appium自动化测试环境安装及配置

      在学习自动化测试,到了安装Appium环境的时候,发现mac参考的文档比较少,熬夜安装成功后,总结了下遇到的问题,以及要安装的软件,现在写下来,希望能给以后的人做参考。   首先总结了下要安装的相关软件:        建议先安装Homebrew【可选项】  安装脚本: /usr

    2024年02月14日
    浏览(10)
  • 基于scrcpy的Android群控项目重构,集成Appium服务执行自动化测试用例

    基于scrcpy的Android群控项目重构,集成Appium服务执行自动化测试用例

    基于scrcpy的Android群控项目重构 基于scrcpy的Android群控项目重构 进阶版 基于scrcpy的Android群控项目重构,获取Android屏幕元素信息并编写自动化事件(视频) 基于scrcpy的Android群控项目重构,获取Android屏幕元素信息并编写自动化事件(博客) 基于scrcpy的Android群控项目重构,集成

    2024年02月16日
    浏览(17)
  • 自动化测试之路 —— Appium使用教程

    自动化测试之路 —— Appium使用教程

    😏 作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡 主页地址:【Austin_zhai】 🙆 目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。 💎 声明:博主日常工作较为繁忙,文章会不定期更新,各类行业或职场问题欢

    2024年02月02日
    浏览(15)
  • 使用【Python+Appium】实现自动化测试

    使用【Python+Appium】实现自动化测试

    一、环境准备 1.脚本语言:Python3.x    IDE:安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境,path添加E:SoftwareAndroid_SDKplatform-tools 4.安装Appium for windows,官网地址 Redirecting  点击下载按钮会到GitHub的下载页面,选择对应平台下载   安装完成后,启动Appium,host和port默认的即可,然

    2024年02月08日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包