Android UI 在 AlertDialog 内部视图上使用 Espresso 进行测试
Android UI testing with Espresso on an AlertDialog inner views
我正在使用 Espresso 测试对 AlertDialog 的内部 ListView 的点击,但一直收到 NoMatchingViewException。 Dialog 有一个 ListView,可以读取设备中的帐户。
AlertDialog.Builder builder = new AlertDialog.Builder(activity_reference);
builder.setTitle(R.string.main_dialog_title);
ListView lv = new ListView(activity_reference);
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(activity_reference, android.R.layout.simple_list_item_1, android.R.id.text1,
gUsernameList);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(activity_reference, "You selected :" + gUsernameList.get(position), Toast.LENGTH_LONG).show();
account_selected = gUsernameList.get(position);
}
}
);
builder.setView(lv);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton) {
if (account_selected == null) {
return;
}
dialog.dismiss();
Intent myIntent = new Intent(activity_reference, GraphActivity.class);
myIntent.putExtra("account_selected", account_selected); //Optional parameters
activity_reference.startActivity(myIntent);
}
}
);
final Dialog dialog = builder.create();
dialog.show();
并在测试中
onView(withText(R.string.test_account)).inRoot(isDialog()).check(matches(isDisplayed()));
我做错了什么吗?
提前致谢。
编辑:我也尝试过使用 UIAutomator,但得到了 UIObjectNotFoundException,尽管它显然存在于 uiautomatorviewer 中。
看来我只是缺少启动代码。
mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
activityTestRule.getActivity();
抱歉误报。
我正在使用 Espresso 测试对 AlertDialog 的内部 ListView 的点击,但一直收到 NoMatchingViewException。 Dialog 有一个 ListView,可以读取设备中的帐户。
AlertDialog.Builder builder = new AlertDialog.Builder(activity_reference);
builder.setTitle(R.string.main_dialog_title);
ListView lv = new ListView(activity_reference);
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(activity_reference, android.R.layout.simple_list_item_1, android.R.id.text1,
gUsernameList);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(activity_reference, "You selected :" + gUsernameList.get(position), Toast.LENGTH_LONG).show();
account_selected = gUsernameList.get(position);
}
}
);
builder.setView(lv);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton) {
if (account_selected == null) {
return;
}
dialog.dismiss();
Intent myIntent = new Intent(activity_reference, GraphActivity.class);
myIntent.putExtra("account_selected", account_selected); //Optional parameters
activity_reference.startActivity(myIntent);
}
}
);
final Dialog dialog = builder.create();
dialog.show();
并在测试中
onView(withText(R.string.test_account)).inRoot(isDialog()).check(matches(isDisplayed()));
我做错了什么吗? 提前致谢。
编辑:我也尝试过使用 UIAutomator,但得到了 UIObjectNotFoundException,尽管它显然存在于 uiautomatorviewer 中。
看来我只是缺少启动代码。
mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
activityTestRule.getActivity();
抱歉误报。