文章目录
- appium连接手机
- java代码实现-第一版
- 第二版-接入testng和隐式等待显示等待
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】
{
"platformName": "Android",
"platformVersion": "11",
"deviceName": "emulator-5554",
"appPackage": "com.wandoujia.phoenix2",
"appActivity": "com.pp.assistant.activity.PPMainActivity"
}
连接后页面
java代码实现-第一版
pom
<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仓库
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和隐式等待显示等待
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 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>