我遇到了与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效果很好!
答案 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());
}