我试图用espresso和java在android应用程序上进行自动化测试,我想在recycleview中将文本输入base\u input\u view\u input,其中base\u input\u view\u title的文本等于“first name”,布局检查器如下:
我试过用这个方法,但没用。
onView(withId(R.id.rvBasicInfo))
.perform(RecyclerViewActions.actionOnItem(allOf(withId(R.id.base_input_view_input),allOf(withId(R.id.base_input_view_title),withText("First name"))),typeText("aaaa")));
这是日志
Caused by: androidx.test.espresso.PerformException: Error performing 'scroll RecyclerView to: holder with view: (view.getId() is
<2131296360/com.test.a.vvv.app.ccc.ccc:id/base_input_view_input> and (view.getId() is
<2131296362> and an instance of android.widget.TextView and view.getText() with or without transformation to match: is "First name"))' on view 'RecyclerView{id=2131296919, res-name=rvBasicInfo, visibility=VISIBLE, width=1080, height=1595, has-focus=false, has-focusable=true,
has-window-focus=true, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=true, is-layout-requested=false, is-selected=false, layout-params=android.widget.LinearLayout$LayoutParams@eb7851f, tag=null, root-is-layout-requested=false,
has-input-connection=false, x=0.0, y=0.0, child-count=7}'.
请帮我更正代码。非常感谢!
1条答案
按热度按时间y53ybaqx1#
您的匹配程序没有选择正确的元素。您当前正在尝试选择id为的元素
base_input_view_input
是一个id为的元素base_input_view_title
带着文字First name
. 显然,这不起作用,因为您想要的元素没有两个不同的id!相反,我们应该关注元素之间的父/子/兄弟关系。对我来说,选择最具体的部分(通常是一个id)并反向工作以确定是什么使这个元素真正独特是很有帮助的。
(括号里可能没有……)
我设置了换行符来显示它们的匹配级别,因为事情有点混乱。我们想找到:
id为的元素
base_input_view_input
是一个元素的后代,这个元素。。。身份证
relInputView
有一个兄弟和一个元素。。。身份证是
base_input_view_title
并且有First name
因为有多个元素的id为base_input_view_input
,我们需要更具体的东西。如果下一个使这个唯一的东西是它的父元素(R.id.relInputView
)有一个具有特定文本的同胞(在本例中,First name
),那么我们应该检查一个元素是否具有这些属性。您还可以将这个匹配器抽象为一个函数,以便在
base_input_view_title
有不同的文本。