Robotium for Android - solo.searchText()无效

时间:2013-07-19 08:43:18

标签: android robotium

我遇到了与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”)和eveything效果很好!

2 个答案:

答案 0 :(得分:2)

我通常使用Solo#waitForText(...)所以我确保我没有失去一些竞争条件。

试试这个:

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

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

答案 1 :(得分: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());
}