第一个示例
代码示例
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>testAppium</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>8.6.0</version>
</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>7.4.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>4.13.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
下面两种代码,可以互相整合一下,使代码更简洁
为了将差异最大化,作者没有简化代码
AppiumDriver
和 AndroidDriver
是父子关系
需要手动启动Appium
import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.net.MalformedURLException;
import java.net.URL;
public class AppTest {
// 创建驱动对象,这里是空的
protected static AndroidDriver driver = null;
@Test
public void run(){
System.out.println("Hello Appium");
}
@BeforeClass
public void beforeClass() throws MalformedURLException {
// DesiredCapabilities 可以理解为是 必需设备信息 类
DesiredCapabilities device = new DesiredCapabilities();
device.setCapability("deviceName", "mahe666_test");
device.setCapability("automationName", "UiAutomator2");
device.setCapability("platformName", "Android");
device.setCapability("platformVersion", "9");
device.setCapability("appPackage", "com.android.settings");
device.setCapability("appActivity", ".Settings");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/"), device);
}
@AfterClass
public void afterClass(){
if (driver != null) driver.quit();
}
}
自动启动Appium
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.options.UiAutomator2Options;
import io.appium.java_client.service.local.AppiumDriverLocalService;
import io.appium.java_client.service.local.AppiumServiceBuilder;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.net.MalformedURLException;
import java.net.URL;
public class AppTest {
// 创建驱动对象,这里是空的
protected static AndroidDriver driver = null;
private static AppiumDriverLocalService service;
@Test
public void run(){
System.out.println("Hello Appium");
}
@BeforeClass
public void beforeClass() throws MalformedURLException {
service = new AppiumServiceBuilder()
.withIPAddress("127.0.0.1")
.usingPort(4723)
.build();
service.start();
UiAutomator2Options options = new UiAutomator2Options()
.setDeviceName("mahe666_test")
.setAppPackage("com.android.settings")
.setAppActivity("com.android.settings.Settings")
;
driver = new AndroidDriver(service.getUrl(), options);
}
@AfterClass
public void afterClass(){
if (driver != null) driver.quit();
if (service != null) service.stop();
}
}
错误笔记
java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duration, org.openqa.selenium.remote.http.Filter, java.net.Proxy, org.openqa.selenium.Credentials)'
添加如下依赖至 pom.xml
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>4.13.0</version>
</dependency>
java: JPS incremental annotation processing is disabled. Compilation results on partial recompilation may be inaccurate.
Use build process "jps.track.ap.dependencies" VM flag to enable/disable incremental annotation processing environment.
Writing classes
更换或添加如下依赖至 pom.xml
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>