Robotium:让Solo在本地化版本中点击DatePicker

时间:2012-08-10 10:55:38

标签: android datepicker robotium datepickerdialog

我正在使用Robotium点击DatePickerDialog中的“Set”按钮

solo.clickOnButton("Set"); 

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

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

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

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

此致 金

4 个答案:

答案 0 :(得分:0)

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

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

solo.clickOnView(button);

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

答案 1 :(得分:0)

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

solo.clickOnButton(0);

答案 2 :(得分:0)

这是我的建议(假设您通过DialogFragment显示对话框):我有一个SelectDateDialogFragment,其中包含唯一的TAGonCreateDialog()方法,可以创建{ {1}}。然后我通过DatePickerDialog显示对话框。在Robotium测试中,我使用以下代码单击对话框的按钮:

selectDateDialogfragment.show(getFragmentManager(), SelectDateDialogFragment.TAG)

答案 3 :(得分:0)

我想与您分享一些细节。

首先:

solo.clickOnButton(0);

对我来说效果很好。但是,由于新的Dialogs没有" Set"和"取消"按钮,而是"取消"和#34;好的",这个解决方案现在可以选择新设备上的取消按钮,同时切换到

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);