Java实现App自动化(Appium Demo)

package AppUI;

import java.net.URL;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.remote.DesiredCapabilities;

import io.appium.java_client.android.AndroidDriver;

//selenium-server-standalone-3.141.59.jar

//java-client-7.3.0.jar

public class App {

DesiredCapabilities cap;

public static void main(String\[\] args) {

AndroidDriver driver;

DesiredCapabilities des = new DesiredCapabilities();

// des.setCapability("automationName", "Appium");//Selendroid //自动化的模式选择

// des.setCapability("app", "C:\\software\\CalcTest.apk");//配置待测试的apk的路径

// des.setCapability("browserName", "chrome"); //h5

des.setCapability("platformName", "Android");//平台名称

//adb shell getprop ro.build.version.release

des.setCapability("platformVersion", "13");//手机操作系统版本

// des.setCapability("udid", "192.168.229.101:5555");//连接的物理设备的唯一设备标识

des.setCapability("deviceName", "emulator-5554");//使用的手机类型或模拟器类型 UDID

des.setCapability("appPackage", "com.android.settings");//App安装后的包名,注意与原来的CalcTest.apk不一样

des.setCapability("appActivity", "com.android.settings.Settings");//app测试人员常常要获取activity,进行相关测试,后续会讲到

des.setCapability("unicodeKeyboard", true);//支持中文输入

des.setCapability("resetKeyboard", true);//支持中文输入

des.setCapability("newCommandTimeout", "10");//没有新命令时的超时时间设置

des.setCapability("nosign", true);//跳过检查和对应用进行 debug 签名的步骤

try {

driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), des);

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//设置超时等待时间,默认250ms

//*contains(@name,"")

//android.widget.TextViewcontains(@text,"Network")

driver.findElement(By.xpath("//android.widget.TextViewcontains(@text,\\"Network\\")")).click();//定位'1'

System.out.println("11");

// driver.findElement(By.xpath("//android.widget.TextViewcontains(@text,'Network')")).click();//定位'1'

// driver.findElement(By.id("com.android.calculator2:id/plus")).click();//定位'+'

//

// driver.findElement(By.id("com.android.calculator2:id/digit6")).click();//定位'6'

//

// driver.findElement(By.id("com.android.calculator2:id/equal")).click();//定位'='

Thread.sleep(5000);

// 关闭Appium会话

driver.quit();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}//虚拟机默认地址

System.out.println("Pass");

}

}

相关推荐
LuTshoes25 分钟前
spring ai 实战-MCP
java·人工智能·spring
CodeStats32 分钟前
【Java类加载器】Java 类加载器完整体系深度拆解(下):自定义加载器实战与 SPI 破坏双亲委派(MySQL 驱动揭秘)
java·开发语言·jvm·classloader·双亲委派
dishugj35 分钟前
操作系统四大特征|软考架构师考点梳理
java·linux·服务器
砚底藏山河44 分钟前
并发与限频工程:把20只的2秒压到0.5秒不封号(魔码量化实战 #03)
java·开发语言·数据库·python·金融
ly76891 小时前
Spring WebFlux背压机制在生产环境的调优与陷阱
java·spring·microsoft·webflux·project reactor·背压·响应式流
云雀衔光1 小时前
MCP 协议全景:为什么它是 AI 连接工具的「USB-C」
java·开发语言·数据库·人工智能·ai编程
ly76891 小时前
Spring 异步编程的隐藏风险:@Async 线程池耗尽与异常处理详解
java·后端·spring·异常处理·线程池·任务拒绝
用户8181870627461 小时前
第23章 热点Key问题排查与解决:大促场景经典坑
java·后端
IT枫斗者枫哥1 小时前
Java 接口超时后,重试为什么会多建一条任务?
java
用户3126874877201 小时前
CAS 到底是怎么保证原子性的?从 Unsafe 到 VarHandle 的演进
java