【问题标题】:How to automate unlock pattern on a real phone using uiautomator?如何使用 uiautomator 在真实手机上自动解锁模式?
【发布时间】:2013-12-17 16:22:36
【问题描述】:

我最近开始学习uiautomator,用于各种Android设备的UI测试。目前我正在 Galaxy S4 上进行测试。

我正在寻找任何可用于自动解锁用户为解锁手机而绘制的解锁图案的类或方法。例如,我将字母N 作为“绘制图案”来解锁手机。如何在uiautomator 中自动执行此解锁模式?

【问题讨论】:

  • 解锁是您测试的一部分吗?如果不是,解锁它会更容易,然后运行您的测试。

标签: android automation ui-automation android-uiautomator


【解决方案1】:

假设您有字母“N”作为解锁图案,那么首先您在设备中找到该 N 形状的每个点的坐标。正如您所提到的,整个图案锁将有 9 个点,您必须获得 4 个点的 (x,y) 坐标。要获取坐标,您可以使用 前面一个答案中提到的相同方法。

  1. 转到“设置”->“开发者选项”。
  2. 在“输入”部分 -> 您将找到一个选项“指针位置” -> 启用该选项。

获得 4 个点的坐标后,使用 UiAutomator Framework 的 swipe(Point[] segments, int segmentSteps) 方法。

此方法的输入是您从设备屏幕获得的 4 组坐标作为点数组。这将通过点连续滑动。

我在下面给出了一个示例脚本供您理解。

import android.graphics.Point;

public void unlockpatternlock() throws UiObjectNotFoundException, Exception {
    Point[] cordinates = new Point[4];
    cordinates[0] = new Point(248,1520);
    cordinates[1] = new Point(248,929);
    cordinates[2] = new Point(796,1520);
    cordinates[3] = new Point(796,929);
    getUiDevice().wakeUp();
    getUiDevice().swipe(cordinates, 10);
} 

上面的脚本会平滑地绘制 N 形。请记住根据您的设备屏幕输入坐标。

【讨论】:

  • 这是一个很好的答案。它还帮助我使用 uiautomator 绘制形状
【解决方案2】:

This 是我知道的唯一方法,但尝试找到您的 x 和 y 坐标可能会很乏味。

UiDevice.getInstance().swipe(int startX, int startY, int endX, int endY, int steps)

我看到的唯一问题是做一个“N”,你需要三个swipe。要解锁,需要连续滑动一次。

给它一个展示。找到你的 x 和 y 会很困难。我会转到我的“应用程序主页”页面并查看位于相对相同位置的应用程序(带有uiautomatorviewer),找到它们的坐标,然后从那里开始。

注意int steps 是您想要滑动的速度和“流畅度”。我喜欢用 5 或 10。看起来很自然。

【讨论】:

  • 感谢您的建议。但是,uiautomatorviwer 工具不提供点的精确坐标。该工具仅提供包含 9 个点的整个框控件的详细信息。如果用户提供了起点和终点,我正在寻找任何可以创建模式的内置方法。
  • 这就是为什么我说寻找你的坐标会很乏味。因此,打开您的 uiviewer,转到您的应用程序页面,查看与您的“点”位置接近的应用程序,并从中检索边界。并以此为基础工作。没有解锁模式的内置方法。这将是 uiautomator 的唯一方法
【解决方案3】:

要找出屏幕的坐标,你可以按照这个:

[1] Go to 'Settings' -> 'Developer Options'.
[2] Under 'INPUT' section -> you will find a option 'Pointer Location' -> enable that option.

之后,如果您触摸屏幕上的任意位置 -> 您可以在设备的屏幕顶部查看该点的确切屏幕坐标。

在你得到坐标后,你可以像这样使用滑动方法 -

UiDevice.getInstance().swipe(390, 1138, 719, 1128, 40);

该方法很容易给出从何处拖动到哪一点的确切坐标。

我已经用过这个了,效果很好!

【讨论】:

【解决方案4】:

TouchAction obj = new TouchAction(driver); obj.press(PointOption.point(551,1238)).moveTo(PointOption.point(545, 1019)).release().perform();

使用此方法滑动,它适用于模式 (5,2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 2020-02-23
    • 2021-06-03
    • 2020-07-09
    相关资源
    最近更新 更多