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>
相关推荐
野蛮的大西瓜4 小时前
开源呼叫中心中,如何将ASR与IVR菜单结合,实现动态的IVR交互
人工智能·机器人·自动化·音视频·信息与通信
爱学测试的李木子11 小时前
从0到1搭建 Android 自动化 python+appium 环境
android·软件测试·python·测试工具·自动化
~央千澈~13 小时前
优雅草央千澈-关于蓝湖如何快速的标注交互原型是如何使用的-如何使用蓝湖设计交互原型和整个软件项目的流程逻辑-实践项目详细说明
ui·交互·蓝湖
努力学习的小廉14 小时前
深入了解Linux —— make和makefile自动化构建工具
linux·服务器·自动化
小张认为的测试15 小时前
Linux性能监控命令_nmon 安装与使用以及生成分析Excel图表
linux·服务器·测试工具·自动化·php·excel·压力测试
深圳安锐科技有限公司18 小时前
首次接触结构安全自动化监测系统,价格高吗?后期维护?
运维·自动化
军训猫猫头18 小时前
20.抽卡只有金,带保底(WPF) C#
ui·c#·wpf
TGB-Earnest18 小时前
【py脚本+logstash+es实现自动化检测工具】
大数据·elasticsearch·自动化
wuningw19 小时前
ant-design-ui的Select选择器多选时同时获取label与vaule值
ui·arcgis
SoraLuna1 天前
「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台
开发语言·macos·ui·华为·harmonyos