0

我正在使用 Robotium 通过在 DatePickerDialog 中单击“设置”按钮

solo.clickOnButton("Set"); 

如果我现在将测试设备的语言更改为其他语言,Robotium 将无法找到该按钮,因为文本不再是“设置”而是翻译后的单词。

是否有可能以不同的方式访问 Picker 中的按钮?

正如在 Jelly Bean 中,DatePicker 丢失了“取消”按钮,我无法使用 clickOnButton(int index) 方法。

我唯一的想法是在 DatePickerDialog 上使用 setButton 来访问按钮文本的本地化字符串资源或保留对按钮的引用。但也许有人知道无需自定义按钮文本即可获得访问权限的更好方法。

问候金

4

4 回答 4

0

Here's my suggestion (assuming you are showing the dialog via a DialogFragment): I have a SelectDateDialogFragment with a unique TAG and an onCreateDialog() method which creates a DatePickerDialog. I then show the dialog via selectDateDialogfragment.show(getFragmentManager(), SelectDateDialogFragment.TAG). In the Robotium tests, I use code like the following to click the dialog's buttons:

solo.clickOnView(editDateButton);

solo.waitForFragmentByTag(SelectDateDialogFragment.TAG);

solo.setDatePicker(0, 2000, 1, 1);

SelectDateDialogFragment dialogFragment = (SelectDateDialogFragment) activity.getFragmentManager()
        .findFragmentByTag(SelectDateDialogFragment.TAG);
DatePickerDialog dialog = (DatePickerDialog) dialogFragment.getDialog();
Button okButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
solo.clickOnView(okButton);

solo.waitForDialogToClose();
于 2014-10-07T18:31:36.473 回答
0

如果您可以访问源代码,则可以同时使用 getString() 和 getView():

Button button = (Button) solo.getView(R.id.x);

solo.clickOnView(button);

还有 solo.getString(R.string.x) 可以很好地用于本地化构建。

于 2012-08-10T12:13:34.160 回答
0

我知道这不是最好的解决方案,但它对我有用:

solo.clickOnButton(0);
于 2013-05-23T21:12:05.907 回答
0

我想和你分享一些细节。

第一的:

solo.clickOnButton(0);

一段时间对我来说效果很好。但是由于新的对话框没有“设置”和“取消”按钮,而是“取消”和“确定”,这个解决方案现在将在新设备上选择取消按钮,而只是切换到

solo.clickOnButton(1);

会打破旧设备的测试。

所以我通过两个修改迁移到 csoltenborn 的解决方案:

  • 因为我想与旧设备保持兼容,所以我使用 SupportFragmentManager
  • 由于我的片段根据设备及其方向嵌套在另一个片段中,因此有时我必须访问某些片段 ChildFragmentManager。

这是我的解决方案,也许它可以添加到 csoltenborn 的好答案:

DialogFragment dialogFrag;

Fragment outerFragment = getActivity().getSupportFragmentManager().findFragmentByTag("outerFragmentTAG");
    if (outerFragment == null) {
        dialogFrag = (DialogFragment)getActivity().getSupportFragmentManager().findFragmentByTag("datePicker");
    } else {
        dialogFrag = (DialogFragment)outerFragment.getChildFragmentManager().findFragmentByTag("datePicker");
    }
    Button okButton = ((DatePickerDialog)dialogFrag.getDialog()).getButton(DialogInterface.BUTTON_POSITIVE);
    solo.clickOnView(okButton);
于 2015-11-17T19:38:08.627 回答