09-appium-等待activity-Android

本文介绍Android自动化测试中wait_activity方法的使用,通过该方法可等待指定的activity出现,提高测试效率。文章提供了具体代码示例。

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

目录

前言

wait_activity方法介绍

wait_activity方法使用


前言

  • 在Android端app自动化过程中,可以等待某个页面activity出现后操作,避免使用固定的等待时间,可有效节省时间。

wait_activity方法介绍

    def wait_activity(self: T, activity: str, timeout: int, interval: int = 1) -> bool:
        """等待一个活动:阻塞直到目标活动出现或超时.

        这是一个android专属的方法.

        Args:
            activity: 等待的页面activity
            timeout: 最大等待时间,单位为秒
            interval: 重试间隔时间,单位为秒

        Returns:
            如果显示了目标activity,则为True
        """
        try:
            WebDriverWait(self, timeout, interval).until(lambda d: d.current_activity == activity)
            return True
        except TimeoutException:
            return False

wait_activity方法使用

# -*- coding: utf-8 -*-
# @Time    : 2021/5/1
# @Author  : 大海
from appium import webdriver

desired_capabilities = {
    "platformName": "Android", 
    "deviceName": "127.0.0.1:62001",  # adb devices 查看,这里使用的是夜神模拟器
    "platformVersion": "7.1.2",
    "appPackage": "com.jingdong.app.mall",  # 京东app
    "appActivity": ".main.MainActivity"

}

driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_capabilities=desired_capabilities)
driver.implicitly_wait(10)

# 打印当前的activity
print(driver.current_activity)
# 打印当前的包名
print(driver.current_package)
# 等待activity,超时时长为10s
flag = driver.wait_activity('.main.MainActivity', 10)
print(flag)
# 点击同意
driver.find_element_by_id('com.jingdong.app.mall:id/bqd').click()
# 点击家具厨具
driver.find_element_by_id('com.jingdong.app.mall:id/ic').click()

# driver.quit()

 

 

### 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 为了使用 Appium 的 Java 客户端,需要先下载对应的依赖库。推荐的方式是通过 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
发出的红包

打赏作者

爱学习de测试小白

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值