3

我遇到了与 Robotium 一起使用的 searchText() 函数的问题。

我正在寻找这个字符串:

<string name="provisioning_wizard_title_2">Service Activation Wizard (Step 2)</string>

我在字符串 xml 中定义了它,并以这种方式搜索它:

Activity act=solo.getCurrentActivity(); 
String string = solo.getString(act.getResources().getIdentifier("provisioning_wizard_title_2", "string", act.getPackageName()));

当我打电话时它失败了

assertTrue(solo.searchText(string));

如果我打电话,它也会失败:

assertTrue(solo.searchText("Service Activation Wizard (Step 2)"));

即使那是我在聚焦屏幕活动中看到的字符串。

奇怪的是,如果我使用没有最后一个字符的相同字符串,它会起作用:

assertTrue(solo.searchText("Service Activation Wizard (Step 2"));

如果我使用它就可以了

assertTrue(solo.searchText(string.substring(0, string.length()-1)));

我希望有人能帮助我。

对不起我的英语不好!

谢谢你。

问题 解决了感谢 Renas Reda(Robotium 的创始人和维护者),我解决了问题。问题是由于 searchText() 中的正则表达式支持;有些角色会触发它。使用 Pattern.quote(string) 示例:Pattern.qoute("provisioning_wizard_title_2") 一切都很好!

4

2 回答 2

2

我通常使用Solo#waitForText(...),所以我确保我不会失去一些比赛条件。

尝试这个:

assertTrue(solo.waitForText( solo.getString(R.string. provisioning_wizard_title_2) );

R.java确保从生产项目(而不是测试项目)导入正确的文件。

于 2013-07-19T16:44:20.590 回答
0

我不确定,你正在获取什么字符串。尝试记录它:

Log.d("Debug", "String is: " + string);

您应该打电话,这可能是与包相关的另一个问题,因为活动可能在另一个包中,而不是应用程序的主包:

String string = solo.getString(act.getResources().getIdentifier(act.getPackageName()+":string/provisioning_wizard_title_2"), null, null));  

您还可以获取所有可见文本,以确保屏幕上显示的内容:

for(TextView textView : solo.getCurrentViews(TextView.class)) {
    Log.d("DEBUG", "Text on the screen: " + textView.getText().toString());
}
于 2013-07-19T16:30:37.003 回答