5

私は 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);
}
4

4 に答える 4

1

Anders のアイデアを使用して、ウィジェットを長押ししてホームのどこかにドラッグすることができましたが、ウィジェット リストに戻る前に構成アクティビティが簡単に表示されます :( (Kolin コード)

@Before fun setWidgetOnHome() {
    mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
    val screenSize = Point(mDevice.displayWidth, mDevice.displayHeight)
    val screenCenter = Point(screenSize.x / 2, screenSize.y / 2)

    mDevice.pressHome()

    val launcherPackage = mDevice.launcherPackageName!!
    mDevice.wait(Until.hasObject(By.pkg(launcherPackage).depth(0)), LAUNCH_TIMEOUT)

    // attempt long press
    mDevice.swipe(arrayOf(screenCenter, screenCenter), 150)
    pauseTest(2000)

    mDevice.findObject(By.text("Widgets")).click()
    mDevice.waitForIdle()

    val y = screenSize.y / 2

    var widget = mDevice.findObject(By.text("Efficio"))
    var additionalSwipe = 1
    while (widget == null || additionalSwipe > 0) {
        mDevice.swipe(screenCenter.x, y, screenCenter.x, 0, 150)
        mDevice.waitForIdle()
        if (widget == null) {
            widget = mDevice.findObject(By.text("Efficio"))
        } else {
            additionalSwipe--
        }
    }
    val b = widget.visibleBounds
    val c = Point(b.left + 150, b.bottom + 150)
    val dest = Point(c.x + 250, c.y + 250)
    mDevice.swipe(arrayOf(c, c, dest), 150)
}

私は何かが起こっていると信じていますが、何ですか?:-/ 背中がクリックされたようなものです

于 2016-10-07T11:57:18.380 に答える
0

Long click in uiautomator Android can also be performed by using :

   public boolean drag (int startX, int startY, int endX, int endY, int steps)

Performs a swipe from one coordinate to another coordinate. You can control the smoothness and speed of the swipe by specifying the number of steps. Each step execution is throttled to 5 milliseconds per step, so for a 100 steps, the swipe will take around 0.5 seconds to complete.

Parameters:

startX :: X-axis value for the starting coordinate

startY :: Y-axis value for the starting coordinate

endX :: X-axis value for the ending coordinate

endY :: Y-axis value for the ending coordinate

Steps :: is the number of steps for the swipe action.

Returns :

true if swipe is performed, false if the operation fails or the coordinates are invalid.

Since :

Android API Level 18

So give (startX,startY) = (endX,endY) . This would act equivalent to a long-click.

于 2013-08-13T11:15:10.563 に答える
-2

dragTo を使用できます (同じ UI オブジェクト、手順)

*クリックが十分に長いことを確認するには、ステップ数を 100 以上にする必要があります

于 2014-02-25T14:20:43.817 に答える