2013-08-12 2 views
3

나는 Google의 자동 응답기에 상당한 경험을 가지고 있습니다. 그러나, 전화의 홈 화면에 위젯을 추가 할 때 나는 혼란스러워 보인다. 지금은 간단하게 유지하고 위젯이 추가 될 화면은 비어 있다고 가정합니다. 생각 프로세스는 앱 서랍을 열고 위젯 탭을 클릭 한 다음 추가 할 위젯을 찾습니다.> 길게 클릭하고 홈 화면으로 위젯을 드래그합니다. 위젯이 "길게 클릭 할 수있는"것처럼 보이지 않는 것 같습니다. 모든 생각/제안/해결책을 주시면 감사하겠습니다. 구현 한 코드는 다음과 같습니다. uiautomator 안드로이드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); 
} 
+0

가능한 복제본 : http://stackoverflow.com/questions/32111654 - 귀하의 노력 결과를 듣고 싶습니다. 귀하가 저보다 훨씬 가까이에있는 것처럼 보입니다! – Nilzor

+0

여기에 해결책이 없다고 생각합니까? : -/ –

답변

0

롱 클릭은 또한 사용하여 수행 할 수 있습니다 : 하나는 다른 좌표 좌표에서

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

는 슬쩍을 수행합니다. 단계 수를 지정하여 스 와이프의 매끄럽고 빠른 속도를 제어 할 수 있습니다. 각 단계 실행은 단계 당 5 밀리 초로 조절되므로 100 단계의 경우 스 와이프가 완료되는 데 약 0.5 초가 소요됩니다.

매개 변수 :

STARTX :: 시작에 대한 X 축 값이

이 시작에 대한

startY :: Y 축 값이 결말에 대한

endX : X 축 좌표 값을 좌표 :: :: 종료에 대한 Y 축 값

단계 좌표

ENDY 좌표 와이프 동작에 대한 단계의 수이다.

결과 :

슬쩍 수행 true의 경우

, 작업이 실패하거나 좌표가 유효하지 않은 경우는 false.

가입일 :

안드로이드 API 레벨 18

그래서 (STARTX, startY) = (endX, 앤디)를 제공합니다. 이는 길게 누르는 것과 동일하게 작동합니다.

+1

나는 이것을 시도해보고 작동하는지 알려 줄 것이다. –

+0

이것은 작동하지 않습니다. 왜냐하면 드래그가 발생하기 전에 먼저 요소를 오래 눌러야하고 drag()에 의해 호출되지 않기 때문입니다. 그래도 고마워. –

+1

''세그먼트 '의 세 점을 가진'public boolean swipe (Point [] segments, int segmentSteps)'가 더 잘 작동한다고 생각합니다.그러면 '세그먼트'의 처음 2 점은 동일 할 수 있고 (길게 누르십시오) 다음 위젯이 다음 점으로 드래그됩니다. – Anders

-2

당신이 dragTo (동일한 UI 객체 단계)를 사용할 수 있습니다

는 단계> (100)는 클릭이 앤더스 아이디어를 사용하여 충분히

1

긴 있는지 확인해야 *, 나는 길게 누르면 위젯 드래그로 관리 그것은

@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) 
} 

뭔가 일이 일어나고하지만 믿고 집에 어딘가에하지만 내 구성 활동을 볼 간단히 위젯 목록으로 돌아 :((콜린 코드)를 이동하기 전에 : - 백은/그건처럼 클릭 수

+1

이 질문이 오래 되었기 때문에 나는 또 다른 질문을 열었습니다. 위 코드가 작동한다는 것을 알았지 만, 여기서 내 테스트가 끝나기 때문에 테스트가 끝나면 내 config 활동이 종료됩니다. 내 구성 활동의 확인 버튼을 클릭하면 위젯이 올바르게 설정됩니다! –

관련 문제