APP的UI自动化demo(appium+java)

文章目录

appium连接手机

准备工作

1、查看连接手机模拟器是否连接成功,获取设备名称

执行命令:adb devices

2、查看android内核版本号--->paltformVersion

执行命令:adb shell getprop ro.build.version.release

3、模拟器上打开要测试的app,查看包名和活动名

adb shell dumpsys window |grep mCurrentFocus

打开并启动appium

之前出现过appium连接不上手机模拟器,在修改配置中JAVA_HOME和ANDROID_HOME填写下正确的路径后可以了

点击打开连接配置页面

填写并保存后点击【start Session】

bash 复制代码
{
  "platformName": "Android",
  "platformVersion": "11",
  "deviceName": "emulator-5554",
  "appPackage": "com.wandoujia.phoenix2",
  "appActivity": "com.pp.assistant.activity.PPMainActivity"
}

连接后页面

java代码实现-第一版

pom

xml 复制代码
 <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>9.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-remote-driver</artifactId>
            <version>4.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-api</artifactId>
            <version>4.9.0</version>
        </dependency>

查找比较新的jar地址
阿里云maven仓库

java 复制代码
import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.nativekey.AndroidKey;
import io.appium.java_client.android.nativekey.KeyEvent;
import java.net.URL;

public class AppTest {
    public static void main(String[] args) throws Exception {
        AndroidDriver driver = null;
        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability("platformName", "Android");
        cap.setCapability("platformVersion", "11");
        cap.setCapability("deviceName", "emulator-5554");
        cap.setCapability("appPackage", "com.wandoujia.phoenix2");
        cap.setCapability("appActivity", "com.pp.assistant.activity.PPMainActivity");
        cap.setCapability("unicodeKeyboard", "true");
        cap.setCapability("resetKeyboard", "true");
        cap.setCapability("noSign", "true");
        driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), cap);
        Thread.sleep(5000);
        //点击【同意】
        driver.findElement(By.id("com.wandoujia.phoenix2:id/n8")).click();
        Thread.sleep(2000);
        //点击系统的返回
        driver.pressKey(new KeyEvent(AndroidKey.BACK));
        Thread.sleep(5000);
        driver.quit();

    }
}

第二版-接入testng和隐式等待显示等待

java 复制代码
import io.appium.java_client.android.nativekey.AndroidKey;
import io.appium.java_client.android.nativekey.KeyEvent;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import io.appium.java_client.android.AndroidDriver;

import org.openqa.selenium.remote.DesiredCapabilities;

import org.openqa.selenium.support.ui.ExpectedConditions;

import org.openqa.selenium.*;

import java.net.MalformedURLException;
import java.net.URL;
import java.time.Duration;

public class AppTest {
    AndroidDriver driver;

    @BeforeClass
    public void setUp() throws MalformedURLException, InterruptedException {

        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability("platformName", "Android");
        cap.setCapability("platformVersion", "11");
        cap.setCapability("deviceName", "emulator-5554");
        cap.setCapability("appPackage", "com.wandoujia.phoenix2");
        cap.setCapability("appActivity", "com.pp.assistant.activity.PPMainActivity");
        cap.setCapability("unicodeKeyboard", "true");
        cap.setCapability("resetKeyboard", "true");
        cap.setCapability("noSign", "true");
        driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), cap);
        //隐式等待
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));

    }

    @Test
    public void testNew() {
        //显示等待
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10), Duration.ofSeconds(1));
        WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("com.wandoujia.phoenix2:id/n8")));
        element.click();
        driver.pressKey(new KeyEvent(AndroidKey.BACK));
    }

    @AfterClass
    public void tearDown() {
        driver.quit();
    }


}

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>org.example</groupId>
    <artifactId>app_ui</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>18</maven.compiler.source>
        <maven.compiler.target>18</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>9.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-remote-driver</artifactId>
            <version>4.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-api</artifactId>
            <version>4.9.0</version>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.4.0</version> <!-- 这里使用最新版本的 TestNG -->
            <scope>test</scope>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <!-- Maven Surefire 插件,用于运行 TestNG 测试 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M5</version> <!-- 这里使用最新版本的 Maven Surefire 插件 -->
                <configuration>
                    <suiteXmlFiles>
                        <!-- 指定 TestNG 测试套件 XML 文件 -->
                        <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
相关推荐
miaowu3574 小时前
AI智能体推动数字化转型:从流程自动化到决策辅助的完整路线图
大数据·人工智能·自动化
QYR-分析8 小时前
智能化自动化浪潮下,机器人末端执行器行业赛道发展全景解析
人工智能·机器人·自动化
祉猷并茂,雯华若锦9 小时前
Appium 3.x安卓按键与通知栏操作全指南
android·appium
workflower9 小时前
模型中心主义路径
大数据·人工智能·深度学习·机器学习·自动化·制造
JaneConan9 小时前
鸿蒙 ArkUI 深水区:@Watch 和 @Observed,状态变了「自动跑」+ 嵌套对象「深层重绘」
开发语言·后端·ui·harmonyos
Urbano9 小时前
卫衣全工序自动化智造科普:替代工位、设备选型与产能升级方案
大数据·人工智能·自动化
施棠海11 小时前
Pixel2XML实战:10分钟从设计稿做出一个能拨号的Android拨号盘页面(附完整业务代码)
android·java·ui
施棠海12 小时前
设计稿一键变成可运行的Android页面:Pixel2XML全流程UI开发框架实战(附完整源码)
android·ui·架构
YangYang9YangYan13 小时前
2026自动化背景无项目经验转数据分析的可行性分析
运维·数据分析·自动化
Helen_cai14 小时前
OpenHarmony 通用状态加载、空页面、错误兜底组件封装(全局业务通用 UI 组件 API23)
开发语言·ui·华为·php·harmonyos