Appium之java API(01)-AppiumDriver

本文深入解析了AppiumDriver API,包括获取不同语言环境下字符串、按键操作、活动切换、应用安装与卸载等功能,并提供了实例代码演示,旨在帮助开发者高效地进行自动化测试与应用操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AppiumDriver


getAppStrings()


默认系统语言对应的Strings.xml文件内的数据。


driver.getAppStrings(String language)


查找某一个语言环境对应的字符串文件Strings.xml内数据


sendKeyEvent(int key)


按下某个键,具体哪个键由key值决定,key值定义在AndroidKeyCode类中


sendKeyEvent(int key, Integer metastate)


按下某个键的同时按下附加键(Ctrl/Alt/Shift等),具体是哪些键,由key值(AndroidKeyCode类中定义)和metastate(AndroidKeyMetastate类中定义)决定。


currentActivity()


获取当前activity,比如(.ApiDemos)


isAppInstalled(String bundleId)


根据bundleId来判断该应用是否已经安装


installApp(String appPath)


安装app,appPath为应用的本地路径


removeApp(String bundleId)


卸载app.bundleId在android中代表的是报名,而在ios中有专门的bundleId号。


closeApp()


关闭应用,其实就是按home键把应用置于后台


launchApp()


启动应用


resetApp()


先closeApp然后在launchAPP


 pushFile(String remotePath, byte[] base64Data)


将字符数组用64位格式写到远程目录的某个文件中。也可以理解为把本地文件push到设备上。


pullFile(String remotePath)


将设备上的文件pull到本地硬盘上


pullFolder(String remotePath)


将设备上的文件夹pull到本地硬盘上,一般远程文件为/data/local/tmp下的文件。


setNetworkConnection(NetworkConnectionSetting connection)


设置手机的网络连接状态,可以开关蓝牙、wifi、数据流量。通过NetworkConnectionSetting中的属性来设置各个网络连接的状态。


getNetworkConnection()


得到当前网络的状态


openNotifications()


打开通知栏


runAppInBackground(int seconds)


与resetApp类似,区别是resetApp关闭后立即启动,而这个方法是关闭后等待seconds秒后再启动。


hideKeyboard()


ios隐藏键盘


hideKeyboard(String strategy, String keyName)


隐藏键盘,只能用于ios上。


performTouchAction(TouchAction touchAction)


执行一个touch动作,该touch动作是由TouchAction封装的。


performMultiTouchAction(MultiTouchAction multiAction)


执行多步touch动作,由MultiTouchAction封装的多步操作。


tap(int fingers, WebElement element, int duration)


点击element控件中心点按下,duration*5毫秒秒后松开,如此重复fingers次。


tap(int fingers, int x, int y, int duration)


点击(x,y)点按下,duration*5毫秒后松开,如此重复fingers次。


swipe(int startx, int starty, int endx, int endy, int duration)


从(startx,starty)滑到(endx,endy),分duration步滑,每一步用时是5毫秒。


pinch(WebElement el)


2个手指操作控件,从对角线向中心点滑动。


pinch(int x, int y)


以(x,y)为基准,计算得出(x,y-100),(x,y+100)两个点,然后2个手指按住这两个点同时滑到(x,y)


zoom(WebElement el)


与pinch(el)的动作刚好相反。两个手指由控件的中心点慢慢向控件的左顶点后右底点滑动。


zoom(int x, int y)


和pinch(x,y)相反。两个手指从(x,y)点开始向(x,y-100)和(x,y+100)滑动。


getNamedTextField(String name)


一般用在ios中。根据accessibility id获得控件对象。


endTestCoverage(String intent, String path)


结束测试覆盖率的检测。(没用过,不太了解)path为.ec文件的路径。


lockScreen(int seconds)


锁屏多少秒后解锁(使用的时候提示还没实现该方法)


shake()


模拟摇晃手机(目前还没实现)


scrollTo(String text)


滚动到某个text属性为指定的字符串的控件


scrollToExact(String text)


滚动到某个text属性包含传入的字符串的控件


context(String name)


设置上下文


getContextHandles()


可用上下文


getContext()


当前上下文


rotate(ScreenOrientation orientation)


设置屏幕横屏或者竖屏


getOrientation()


获取当前屏幕的方向


findElementByIosUIAutomation(String using)


利用ios中的uiautomation中的属性来获取控件


findElementsByIosUIAutomation(String using)


和上面一样,不过获得的是多个控件


findElementByAndroidUIAutomator(String using)


利用android的uiautoamtor中的属性来获取单个控件。


findElementsByAndroidUIAutomator(String using)


和上面一样,但是该方法获得是多个控件


findElementByAccessibilityId(String using)


利用accessibility id来获取单个控件


findElementsByAccessibilityId(String using)


利用accessibility id来获得多个控件





### Appium Java-Client 使用教程 #### 1. Appium Java-Client 的基本概念 Appium 是一种开源工具,支持多种编程语言编写自动化测试脚本。其中 `java-client` 库是专门为 Java 开发者设计的客户端库,允许开发者通过 Java 编写针对移动应用的自动化测试脚本。 主要启动文件包括以下几个核心类[^3]: - **AppiumDriver.java**: 抽象类,提供与 Appium Server 进行通信的基础功能。 - **AndroidDriver.java**: 针对 Android 平台的具体实现类。 - **XCUITestDriver.java**: 针对 iOS 平台的具体实现类。 这些类继承自 `RemoteWebDriver` 类并扩展了其功能以适应移动端的需求。 --- #### 2. 下载和安装 Appium Java-Client 为了使用 AppiumJava 客户端,需要先下载对应的依赖库。推荐的方式是通过 Maven 构建工具管理项目依赖项。以下是 Maven 中央仓库中的最新版本声明: ```xml <dependency> <groupId>io.appium</groupId> <artifactId>java-client</artifactId> <version>7.6.0</version> <!-- 版本号可能随时间更新 --> </dependency> ``` 如果未使用 Maven,则可以从 JCenter 或其他镜像站点手动下载 `.jar` 文件,并将其添加到项目的构建路径中。例如,可以访问以下链接获取 jar 包: [https://mvnrepository.com/artifact/io.appium/java-client](https://mvnrepository.com/artifact/io.appium/java-client) 注意:从 v6.x 开始,部分 API 方法已被废弃或更改,因此建议查阅官方文档以确认最新的接口定义[^1]。 --- #### 3. 基础配置与初始化 在开始测试前,需设置 DesiredCapabilities 参数来指定设备平台和其他选项。下面是一个简单的示例代码片段展示如何连接至 Appium Server: ```java import io.appium.java_client.AppiumDriver; import org.openqa.selenium.remote.DesiredCapabilities; import java.net.URL; public class AppiumTest { public static void main(String[] args) throws Exception { DesiredCapabilities caps = new DesiredCapabilities(); // 设置通用能力参数 caps.setCapability("platformName", "Android"); caps.setCapability("deviceName", "emulator-5554"); // 替换为实际设备名称 caps.setCapability("appPackage", "com.example.package"); caps.setCapability("appActivity", ".MainActivity"); URL serverUrl = new URL("http://localhost:4723/wd/hub"); AppiumDriver driver = new AppiumDriver(serverUrl, caps); System.out.println("Session started successfully."); } } ``` 上述代码展示了如何创建一个新的会话并与目标应用程序交互。 --- #### 4. 执行触摸动作 (Touch Actions) 随着 `java-client` 更新至 6.x 及以上版本,许多旧版方法被标记为已弃用,比如 `swipe()` 函数不再可用[^2]。取而代之的是更灵活的 `TouchAction` 对象及其关联方法。以下是如何执行滑动操作的一个例子: ```java import io.appium.java_client.TouchAction; import io.appium.java_client.android.AndroidDriver; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; public class SwipeExample { public static void main(String[] args) throws InterruptedException { // 初始化 AndroidDriver... WebElement elementToSwipeFrom = driver.findElement(By.id("element_id")); int startX = elementToSwipeFrom.getLocation().getX(); int startY = elementToSwipeFrom.getLocation().getY(); TouchAction touchAction = new TouchAction(driver); touchAction.press(startX, startY).waitAction(2000).moveTo(endX, endY).release().perform(); Thread.sleep(2000); // 等待两秒观察效果 } } ``` 此代码演示了一个基于屏幕坐标的简单滑动手势。 --- #### 5. 处理点击事件 对于单次点击或者长按某位置的操作,也可以借助于 `TouchAction` 实现。例如: ```java int centerX = screenDimensions.width / 2; int centerY = screenDimensions.height / 2; new TouchAction<>(driver).tap(PointOption.point(centerX, centerY)).perform(); // 上述语句实现了屏幕上中心区域的一次轻触行为。 ``` 更多高级手势可以通过组合多个基础动作完成复杂场景下的模拟输入。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值