【发布时间】:2015-08-14 13:10:30
【问题描述】:
我对 Android 上的 Espresso 还很陌生,我遇到了以下问题: 我希望 Espresso 对按钮执行长按(或其他操作),并且在按住按钮的同时,我想检查不同视图的状态。
在(或多或少)伪代码中:
onView(withId(button_id)).perform(pressButtonDown());
onView(withId(textBox_id)).check(matches(withText("Button is pressed")));
onView(withId(button_id)).perform(releaseButton());
我尝试使用 MotionEvents.sendDown() 和 .sendUp() 编写 2 个自定义 Taps,PRESS 和 RELEASE,但没有成功。 如果这是正确的路径,我可以发布到目前为止的代码。
编辑:
public class PressViewActions
{
public static ViewAction pressDown(){
return new GeneralClickAction(HoldTap.DOWN, GeneralLocation.CENTER, Press.THUMB);
}
public static ViewAction release() {
return new GeneralClickAction(HoldTap.UP, GeneralLocation.CENTER, Press.THUMB);
}
}
以及 Tappers 的代码:
public enum HoldTap implements Tapper {
DOWN {
@Override
public Tapper.Status sendTap(UiController uiController, float[] coordinates, float[] precision)
{
checkNotNull(uiController);
checkNotNull(coordinates);
checkNotNull(precision);
DownResultHolder res = MotionEvents.sendDown(uiController, coordinates, precision);
ResultHolder.setController(uiController);
ResultHolder.setResult(res);
return Status.SUCCESS;
}
},
UP{
@Override
public Tapper.Status sendTap(UiController uiController, float[] coordinates, float[] precision)
{
DownResultHolder res = ResultHolder.getResult();
UiController controller = ResultHolder.getController();
try {
if(!MotionEvents.sendUp(controller, res.down))
{
MotionEvents.sendCancel(controller, res.down);
return Status.FAILURE;
}
}
finally {
//res.down.recycle();
}
return Status.SUCCESS;
}
}
}
我得到的错误如下:
android.support.test.espresso.PerformException: Error performing 'up click' on view 'with id: de.test.app:id/key_ptt'.
...
...
Caused by: java.lang.RuntimeException: Couldn't click at: 281.5,1117.5 precision: 25.0, 25.0 . Tapper: UP coordinate provider: CENTER precision describer: THUMB. Tried 3 times. With Rollback? false
我希望,这会有所帮助。
我们将不胜感激任何帮助和想法!
提前坦克很多!
【问题讨论】:
-
我认为总体思路应该可行,发布自定义水龙头的代码
标签: android automated-tests ui-automation android-espresso