UiAutomator-将小部件添加到主屏幕

Jus*_*pez 5 automation android android-uiautomator

我在Google的uiautomator方面拥有丰富的经验;但是,在将小部件添加到手机主屏幕时,我似乎很沮丧。现在,让它保持简单,并假设要添加小部件的屏幕为空。考虑的过程将是打开应用程序抽屉>单击窗口小部件选项卡>找到要添加的窗口小部件>长按并将窗口小部件拖动到主屏幕。似乎小部件不是“长期可点击的”。任何想法/建议/解决方案将不胜感激。我实现的代码如下。

@Override
protected void setUp() throws UiObjectNotFoundException {
    getUiDevice().pressHome();

    new UiObject(new UiSelector().className(TEXT_VIEW).description("Apps")).clickAndWaitForNewWindow();
    new UiObject(new UiSelector().className(TEXT_VIEW).text("Widgets")).click();

    UiScrollable widgets = new UiScrollable(new UiSelector().scrollable(true));
    widgets.setAsHorizontalList();
    widgets.flingToEnd(MAX_SWIPES);

    UiObject widget = widgets.getChildByText(
            new UiSelector().className(TEXT_VIEW).resourceId("com.android.launcher:id/widget_name"),
            WIDGET_NAME
    );

    // Returns true
    System.out.println("exists(): " + widget.exists());
    // Returns false...
    System.out.println("longClickable(): " + widget.isLongClickable());

    widget.longClick();

    // Also tried...
    int startX = sonosWidget.getVisibleBounds().centerX();
    int startY = sonosWidget.getVisibleBounds().centerY();
    getUiDevice().drag(startX, startY, 0, 0, 3);
}
Run Code Online (Sandbox Code Playgroud)

Smr*_*iti 0

在 uiautomator Android 中长按也可以使用以下命令执行:

   public boolean drag (int startX, int startY, int endX, int endY, int steps)
Run Code Online (Sandbox Code Playgroud)

执行从一个坐标到另一坐标的滑动。您可以通过指定步数来控制滑动的平滑度和速度。每个步骤的执行时间被限制为 5 毫秒,因此对于 100 个步骤,滑动将需要大约 0.5 秒才能完成。

参数:

startX :: 起始坐标的 X 轴值

startY :: 起始坐标的 Y 轴值

endX :: 结束坐标的 X 轴值

endY :: 结束坐标的 Y 轴值

Steps :: 是滑动操作的步数。

返回:

如果执行滑动,则为 true;如果操作失败或坐标无效,则为 false。

自从 :

Android API 级别 18

所以给出 (startX,startY) = (endX,endY) 。这相当于长按。