我正在使用Robotium点击DatePickerDialog中的“Set”按钮
solo.clickOnButton("Set");
如果我现在将测试设备的语言更改为其他语言,则Robotium无法找到该按钮,因为文本不再是“已设置”,而是翻译后的单词。
是否有可能以不同的方式访问Picker中的按钮?
在Jelly Bean中,DatePicker丢失了“取消”按钮,我无法使用clickOnButton(int index)方法。
我唯一的想法是在DatePickerDialog上使用setButton来访问按钮文本的本地化字符串资源或保留对按钮的引用。 但也许有人知道更好的方式来获得访问权,而无需自定义按钮文本。
此致 金
答案 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
,其中包含唯一的TAG
和onCreateDialog()
方法,可以创建{ {1}}。然后我通过DatePickerDialog
显示对话框。在Robotium测试中,我使用以下代码单击对话框的按钮:
selectDateDialogfragment.show(getFragmentManager(), SelectDateDialogFragment.TAG)
答案 3 :(得分:0)
我想与您分享一些细节。
首先:
solo.clickOnButton(0);
对我来说效果很好。但是,由于新的Dialogs没有" Set"和"取消"按钮,而是"取消"和#34;好的",这个解决方案现在可以选择新设备上的取消按钮,同时切换到
solo.clickOnButton(1);
会破坏旧设备的测试。
所以我通过两次修改迁移到了csoltenborn的解决方案:
这是我的解决方案,也许它可以增加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);