Java 单击第二个活动上的按钮执行时出错';单击';或';滚动至';在望
单击浓缩咖啡测试中的按钮出现问题。假设我有两个活动“活动1”和“活动2”。单击Activity1中的对话框“确定”按钮将启动Activity2,其中Activity2中的按钮无法单击Java 单击第二个活动上的按钮执行时出错';单击';或';滚动至';在望,java,android,unit-testing,testing,android-espresso,Java,Android,Unit Testing,Testing,Android Espresso,单击浓缩咖啡测试中的按钮出现问题。假设我有两个活动“活动1”和“活动2”。单击Activity1中的对话框“确定”按钮将启动Activity2,其中Activity2中的按钮无法单击 // The current activity in testing // ..... onView(withText(R.string.dialog_btn_ok)).perform(click()); // go to the second activity // The button on the seco
// The current activity in testing
// .....
onView(withText(R.string.dialog_btn_ok)).perform(click()); // go to the second activity
// The button on the second activity
onView(withId(R.id.btnMP)).check(matches(isDisplayed())); // this is ok
onView(withId(R.id.btnMP)).perform(click()); // got error here
android.support.test.espresso.PerformException:执行时出错
id为的“单击查看”按钮:
原因:java.lang.RuntimeException:将不执行操作
因为目标视图与以下一项或多项不匹配
约束:至少90%的视图区域显示给用户
用户。目标视图:“按钮{id=2131296390,res name=btnMP,
可见性=可见,宽度=652,高度=160,焦点为假,
has focusable=true,has window focus=true,is clickable=true,
启用=真,聚焦=假,聚焦=真,
请求的布局是否为false,选择的布局是否为false,
根是布局请求=false,输入连接=false,x=20.0,
y=-16.0,text=Modify参数,输入类型=0,ime目标=false,
has links=false}”
当我使用perform(scrollTo())
更改此选项时,会显示另一个错误
// The button on the second activity
onView(withId(R.id.btnMP)).check(matches(isDisplayed())); // this is ok
onView(withId(R.id.btnMP)).perform(scrollTo(), click()); // got error here
android.support.test.espresso.PerformException:执行时出错
'滚动到id为的'on view'
原因:java.lang.RuntimeException:将不执行操作,因为
目标视图与以下一个或多个约束不匹配:
(视图的有效可见性=可见,并且是:(is)的后代。)
可从类分配:类android.widget.ScrollView或是
可从类分配:类android.widget.HorizontalScrollView)
目标视图:“按钮{id=2131296390,res name=btnMP,
可见性=可见,宽度=652,高度=160,焦点为假,
has focusable=true,has window focus=true,is clickable=true,
启用=真,聚焦=假,聚焦=真,
请求的布局是否为false,选择的布局是否为false,
根是布局请求=false,输入连接=false,x=20.0,
y=-16.0,text=Modify参数,输入类型=0,ime目标=false,
has links=false}位于
您的id
R.id.btnMP
视图似乎在屏幕上不可见,因此您收到了第一个错误。您正试图通过scrollTo()
解决此问题,但您的视图不在ScrollView内部。那么你的活动是如何组织的呢?如果您使用的是RecyclerView
(例如),您应该使用特殊版本的scrollTo-等等。因此,首先查看您的视图所在的位置,然后就会清楚如何滚动到该视图。您的id为R.id.btnMP的视图似乎在屏幕上不可见,因此您收到了第一个错误。您正试图通过scrollTo()
解决此问题,但您的视图不在ScrollView内部。那么你的活动是如何组织的呢?如果您使用的是RecyclerView
(例如),您应该使用特殊版本的scrollTo-等等。因此,首先查看视图的宿主位置,然后就可以清楚地了解如何滚动到视图。解决方案是创建自定义视图,使视图可见性低于Espresso的GeneralClickAction要求。当前,最小可见性值为90%-请参见代码行60。将其设置为80%或更低。只需复制整个类并重命名它,然后将为此方法提供的值更改为80isdisplayingatelast(80)
。然后创建使用自定义常规单击操作的单击操作:
public static ViewAction customClick() {
return actionWithAssertions(
new CustomGeneralClickAction(Tap.SINGLE, GeneralLocation.VISIBLE_CENTER, Press.FINGER));
}
但是,如果可能的话,我宁愿修改活动的布局,以避免创建按钮可见性的变通方法。解决方案是创建自定义视图可见性,您希望单击的视图可见性小于Espresso的GeneralClickAction所需的值。当前,最小可见性值为90%-请参见代码行60。将其设置为80%或更低。只需复制整个类并重命名它,然后将为此方法提供的值更改为80
isdisplayingatelast(80)
。然后创建使用自定义常规单击操作的单击操作:
public static ViewAction customClick() {
return actionWithAssertions(
new CustomGeneralClickAction(Tap.SINGLE, GeneralLocation.VISIBLE_CENTER, Press.FINGER));
}
但是,如果可能的话,我宁愿修改活动的布局,以避免创建按钮可见性的变通方法。正如错误消息所说,它可能至少不会显示整个视图90%的区域。试试看,
iscompletlydisplayed()
而不是isDisplayed()
,或者更好地尝试使用isdisplayingatelast()
以百分比形式通过90。是的,iscompletlydisplayed()
失败,出现错误DefaultFailureHandler$AssertionFailedWithCauseError:“至少100%的视图区域显示给用户。”与所选视图不匹配。
对此我能做些什么?您已禁用测试设备上的动画吗?请确保禁用它们:转到“设置”>“开发人员选项”并禁用“窗口动画比例”、“过渡动画比例”和“动画师持续时间比例”。事实上,scrollTo()
应该可以解决问题,对吗?您解决了禁用动画的问题了吗?关于scollTo()。试试看,iscompletlydisplayed()
而不是isDisplayed()
,或者更好地尝试使用isdisplayingatelast()
以百分比形式通过90。是的,iscompletlydisplayed()
失败,出现错误DefaultFailureHandler$AssertionFailedWithCauseError:“至少100%的视图区域显示给用户。”与所选视图不匹配。
对此我能做些什么?您已禁用测试设备上的动画吗?请确保禁用它们:转到“设置”>“开发人员选项”并禁用“窗口动画比例”、“过渡动画比例”和“动画师持续时间比例”。事实上,scrollTo()
应该可以解决问题,对吗?您解决了禁用动画的问题了吗?关于scollTo()
我不确定问题是否相同。我只使用LinearLayou