Appium 在指定控件内做上下滑动

那天写了个 控件内点击指定位置:http://testerhome.com/topics/2247

今天重新改了下,对控件内的滑动,如下控件我需要在控件里面滑动,选取:


具体代码如下(目前只做滑动一次,有需要可以自己再做修改,如果有更好方式操作,求推荐):
/**
     * 控制滑动方向
     */
    public enum Heading {
        UP, DOWN
    }

    /**
     * 控件内上下滑动
     *
     * @param step    测试步骤
     * @param by      控件定位方式
     * @param heading 滑动方向 UP  DOWN
     */
    public void swipeControl(String step, By by, Heading heading) {
        // 获取控件开始位置的坐标轴
        Point start = this.findElement(driver, by).getLocation();
        int startX = start.x;
        int startY = start.y;

        // 获取控件坐标轴差
        Dimension q = this.findElement(driver, by).getSize();
        int x = q.getWidth();
        int y = q.getHeight();
        // 计算出控件结束坐标
        int endX = x + startX;
        int endY = y + startY;

        // 计算中间点坐标
        int centreX = (endX + startX) / 2;
        int centreY = (endY + startY) / 2;

        switch (heading) {
            // 向上滑动
            case UP:
                driver.swipe(centreX, centreY + 30, centreX, centreY - 30, 500);
                break;
            // 向下滑动
            case DOWN:
                driver.swipe(centreX, centreY - 30, centreX, centreY + 30, 500);
                break;
        }
        log.info(step);
    }
### 如何在 Appium 中通过滑动操作来查找元素 #### 实现滑动功能的函数 Appium 提供了多种方法用于控制屏幕滚动,以便能够找到目标元素。以下是常用的几种实现方式: 1. **`swipe()` 函数** `swipe()` 是一种基本的滑动方法,允许指定起始坐标和结束坐标的偏移量以及持续时间。这种方法适用于精确控制滑动行为。 ```python driver.swipe(start_x, start_y, end_x, end_y, duration) ``` 参数说明: - `start_x`, `start_y`: 起始位置的 X 和 Y 坐标[^1]。 - `end_x`, `end_y`: 结束位置的 X 和 Y 坐标。 - `duration`: 滑动的时间(毫秒),默认为 500ms。 2. **`scroll_to()` 方法** 如果知道目标元素的部分属性(如 ID 或名称),可以使用 `scroll_to()` 来自动寻找并滚动到该元素的位置。 ```python from appium.webdriver.common.mobileby import MobileBy element = driver.find_element(MobileBy.ANDROID_UIAUTOMATOR, 'new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(text("目标文本"))') ``` 3. **自定义循环滑动逻辑** 当无法直接定位到目标元素时,可以通过编写脚本来模拟多次滑动直到找到目标为止。 ```python max_swipes = 5 found = False for _ in range(max_swipes): try: target_element = driver.find_element_by_id('target_element_id') # 替换为目标ID found = True break except NoSuchElementException: screen_size = driver.get_window_size() width = screen_size['width'] height = screen_size['height'] start_x = int(width / 2) start_y = int(height * 0.8) end_y = int(height * 0.2) driver.swipe(start_x, start_y, start_x, end_y, 500) if not found: raise Exception("Element not found after multiple swipes.") ``` #### 工具支持与调试技巧 为了更高效地完成上述任务,还可以借助一些辅助工具和技术手段: - 使用 `uiautomatorviewer` 工具可以帮助开发者快速识别页面上的控件及其对应的属性值[^5]。 - 启动 Appium Server 并确保其正常工作对于整个流程至关重要。如果遇到配置困难,则可通过命令行工具如 `appium-doctor` 进行诊断[^2]^。 #### 总结 综上所述,在实际开发过程中可以根据具体需求选择合适的滑屏策略,并结合其他技术手段提高效率。无论是简单的上下翻页还是复杂的多维度移动都可以轻松应对。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值