使用 Appium/WebdriverIO 在 Android 原生应用程序中精确滚动

问题描述 投票:0回答:2

问题

我正在尝试使用 Appium 和 WebdriverIO 在 Android 本机应用程序中执行精确滚动。

最终目标是在包含可滚动内容的 Android 视图(例如:ScrollViews/WebViews)中执行快照测试(比较屏幕截图),因此需要像素完美的结果。

到目前为止我已经尝试过的事情

似乎有几种滚动方式,例如 touchActionperformActions

使用

touchAction

这看起来是最直接的方法(事实上,这就是 Appium Inspector 在记录滑动手势时产生的结果)

await driver.touchAction([
   { action: 'press', x: 200, y: 400 },
   { action: 'moveTo', x: 200, y: 200 },
   'release'
])

这可以很好地滚动内容,但是存在以下问题:

  1. 有时手势似乎对 ScrollView 没有影响(尽管我通过在开发人员设置中启用了指针位置来仔细检查是否正在执行滑动)。
  2. 它仅在 WebView 中一致滚动(就滚动距离而言)。

使用Appium的performActions

await driver.performActions([ { type: 'pointer', id: 'finger1', parameters: { pointerType: 'touch' }, actions: [ { type: 'pointerMove', duration: 0, x: 200, y: 400 }, { type: 'pointerDown', button: 0 }, { type: 'pause', duration: 100 }, { type: 'pointerMove', duration: 1000, origin: 'pointer', x: 200, y: 200 }, { type: 'pointerUp', button: 0 }, ], }, ])
这似乎适用于所有类型的内容(ScrollViews 或 WebViews),但滚动距离根本不一致。

在所有情况下,滚动距离似乎会根据手势的持续时间而有很大差异,但即使像 10000 毫秒这样非常长的持续时间也不会导致 100% 一致的滚动距离。

在摆弄

performActions

 时,我还尝试在 
pointerMove
pointerUp
 操作之间加入额外的暂停,试图消除手势速度作为失败因素:

... { type: 'pointerMove', duration: 1000, origin: 'pointer', x: 200, y: 200 }, { type: 'pause', duration: 1000 }, { type: 'pointerUp', button: 0 }, ...
但是一旦发生 

pointerUp

 操作,内容就会滚动一点,再次导致不可预测的滚动距离。

问题

有没有一种使用 Appium/WebdriverIO 进行滚动的方法,在滚动距离方面始终会产生 100% 一致的结果?

appium android-testing webdriver-io appium-android gui-testing
2个回答
0
投票
我不确定这是否可以回答你的问题,但是你尝试过吗

scrollGesture

import { driver } from '@wdio/globals'; export class CommonAction{ async scrollUp(){ const screenSize = await driver.getWindowSize(); await driver.executeScript("mobile: scrollGesture", [ { direction: "up", left: screenSize.width * 0.5, top: screenSize.height * 0.5, width: screenSize.width * 0.9, height: screenSize.height * 0.9, percent: 0.25} ]); } async scrollDown(){ const screenSize = await driver.getWindowSize(); await driver.executeScript("mobile: scrollGesture", [ { direction: "down", left: screenSize.width * 0.025, top: screenSize.height * 0.025, width: screenSize.width * 0.9, height: screenSize.height * 0.9, percent: 0.25} ]); } } export default new CommonAction();
我的 GitHub 存储库上的完整示例:

https://github.com/ahmadazerichandrabhuana/wdioandroid/blob/main/test/pageobjects/common.action.js

希望它能有所帮助,很抱歉这么晚才回复。


-1
投票
我正在使用下面的行向下滚动并找到文本 Driver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector()).scrollIntoView(textContains("********"));");

© www.soinside.com 2019 - 2024. All rights reserved.