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>
相关推荐
Jiaberrr1 小时前
Element UI教程:如何将Radio单选框的圆框改为方框
前端·javascript·vue.js·ui·elementui
Elastic 中国社区官方博客10 小时前
Elasticsearch:使用 LLM 实现传统搜索自动化
大数据·人工智能·elasticsearch·搜索引擎·ai·自动化·全文检索
南种北李1 天前
Linux自动化构建工具Make/Makefile
linux·运维·自动化
IG工程师1 天前
关于 S7 - 1200 通过存储卡进行程序更新
经验分享·笔记·自动化
怒放的生命.1 天前
电器自动化入门08:隔离变压器、行程开关介绍及选型
运维·自动化·电气自动化·电工基础
我爱学Python!1 天前
基于 LangChain 的自动化测试用例的生成与执行
人工智能·自然语言处理·langchain·自动化·llm·测试用例·大语言模型
神一样的老师2 天前
如何解决 Photoshop 中的“暂存盘已满”错误
ui·photoshop
ZOHO项目管理软件2 天前
自动化分配客服售后工单的高效策略
运维·自动化
JasonLiu19192 天前
论文推荐 |【Agent】自动化Agent设计系统
人工智能·自动化·llm·agent·智能体
伊织code2 天前
GraphRAG-Local-UI - 基于 GraphRAG 支持本地的聊天UI
ui·llm·rag·graphrag·local-ui