Java 停止使用Robotium滚动
我正在尝试使用Robotium验证一个大列表的内容,出于某种原因,一旦程序到达可见列表的底部,Robotium将开始滚动,并一直滚动直到它到达列表的底部。我能做些什么来阻止这一切发生吗?理想情况下,程序将验证可见内容,滚动到足以显示未验证内容的部分,然后在验证后滚动到底部,最终允许测试应用程序验证列表中的所有内容 以下是我正在使用的代码:Java 停止使用Robotium滚动,java,android,automation,robotium,Java,Android,Automation,Robotium,我正在尝试使用Robotium验证一个大列表的内容,出于某种原因,一旦程序到达可见列表的底部,Robotium将开始滚动,并一直滚动直到它到达列表的底部。我能做些什么来阻止这一切发生吗?理想情况下,程序将验证可见内容,滚动到足以显示未验证内容的部分,然后在验证后滚动到底部,最终允许测试应用程序验证列表中的所有内容 以下是我正在使用的代码: public void testCatalogLinkContent(){ //VERIFY USER IS ON HOMEPAGE
public void testCatalogLinkContent(){
//VERIFY USER IS ON HOMEPAGE
try {
solo.sleep(3000);
assertTrue(solo.searchText(" Apps")) ;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//CLICK ON CATALOG
try{
solo.clickOnText(" Apps");
}catch(Exception e){
e.printStackTrace();
}
//Search for Music in menu
if(solo.searchText(RECOMMENDED)==false){
Log.e(TAG, RECOMMENDED + " Not found!!!");
}else{
Log.i(TAG, RECOMMENDED + " Found");
}
//Search for UAT in menu
if(solo.searchText(UAT)==false){
Log.e(TAG, UAT + " Not found!!!");
}else{
Log.i(TAG, UAT + " Found");
}
//Search for NEW APPS in menu
if(solo.searchText(NEW)==false){
Log.e(TAG, NEW + " Not found!!!");
}else{
Log.i(TAG, NEW + " Found");
}
//Search for TOP SELLERS in menu
if(solo.searchText(TOPSELLER)==false){
Log.e(TAG, TOPSELLER + " Not found!!!");
}else{
Log.i(TAG, TOPSELLER + " Found");
}
if(solo.searchText(TOPDOWNLOAD)==false){
Log.e(TAG, TOPDOWNLOAD + " Not found!!!");
}else{
Log.i(TAG, TOPDOWNLOAD + " Found");
}
//Search for EA in menu
if(solo.searchText(EA)==false){
Log.e(TAG, EA + " Not found!!!");
}else{
Log.i(TAG, EA + " Found");
}
//Search for FEATURED in menu
if(solo.searchText(FEATURED)==false){
Log.e(TAG, FEATURED + " Not found!!!");
}else{
Log.i(TAG, FEATURED + " Found");
}
//Search for GAMES in menu
if(solo.searchText(GAMES)==false){
Log.e(TAG, GAMES + " Not found!!!");
}else{
Log.i(TAG, GAMES + " Found");
}
//Search for APPS in menu
if(solo.searchText(APPS)==false){
Log.e(TAG, APPS + " Not found!!!");
}else{
Log.i(TAG, APPS + " Found");
}
//Search for SOCIAL in menu
if(solo.searchText(SOCIAL)==false){
Log.e(TAG, SOCIAL + " Not found!!!");
}else{
Log.i(TAG, SOCIAL + " Found");
}
//Search for ENTERTAINMENT in menu
if(solo.searchText(ENTERTAINMENT)==false){
Log.e(TAG, ENTERTAINMENT + " Not found!!!");
}else{
Log.i(TAG,ENTERTAINMENT + " Found");
}
//Search for THEMES in menu
if(solo.searchText(THEMES)==false){
Log.e(TAG, THEMES + " Not found!!!");
}else{
Log.i(TAG, THEMES + " Found");
}
//Search for TOOLS in menu
if(solo.searchText(TOOLS)==false){
Log.e(TAG, TOOLS + " Not found!!!");
}else{
Log.i(TAG, TOOLS + " Found");
}
//Search for NEWSin menu
if(solo.searchText(NEWS)==false){
Log.e(TAG, NEWS + " Not found!!!");
}else{
Log.i(TAG, NEWS + " Found");
}
//Search for READING in menu
if(solo.searchText(READING)==false){
Log.e(TAG, READING + " Not found!!!");
}else{
Log.i(TAG, READING + " Found");
}
//Search for MONEY in menu
if(solo.searchText(MONEY)==false){
Log.e(TAG, MONEY + " Not found!!!");
}else{
Log.i(TAG, MONEY + " Found");
}
//Search for SHOPPING in menu
if(solo.searchText(SHOPPING)==false){
Log.e(TAG, SHOPPING + " Not found!!!");
}else{
Log.i(TAG, SHOPPING + " Found");
}
//Search for FITNESS in menu
if(solo.searchText(FITNESS)==false){
Log.e(TAG, FITNESS + " Not found!!!");
}else{
Log.i(TAG, FITNESS + " Found");
}
//Search for TRAVEL in menu
if(solo.searchText(TRAVEL)==false){
Log.e(TAG,TRAVEL + " Not found!!!");
}else{
Log.i(TAG, TRAVEL + " Found");
}
//Search for BUSINESS in menu
if(solo.searchText(BUSINESS)==false){
Log.e(TAG, BUSINESS + " Not found!!!");
}else{
Log.i(TAG, BUSINESS + " Found");
}
//Search for SPANISH in menu
if(solo.searchText(SPANISH)==false){
Log.e(TAG, SPANISH + " Not found!!!");
}else{
Log.i(TAG, SPANISH + " Found");
}
}
Robotium的工作方式是“扫描”布局,因此当您指示它执行
solo.searchText()
时,它将查找您指定的内容,如果在当前可见区域中找不到,它将滚动您的视图,直到找到它(或放弃)。我的猜测是,它找不到文本“Apps”,因为您的文本实际上是“Apps”
,而且由于它找不到它,您会得到您指定的行为“无限滚动”。因此要解决此问题,我必须做以下几点:
public void testCatalogLinkContent(){
//VERIFY USER IS ON HOMEPAGE
try {
solo.sleep(3000);
assertTrue(solo.searchText("Apps")) ;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//CLICK ON CATALOG
try{
solo.clickOnText("Apps");
}catch(Exception e){
e.printStackTrace();
}
//Search for Music in menu
if(solo.searchText(RECOMMENDED)==false){
Log.e(TAG, RECOMMENDED + " Not found!!!");
}else{
Log.i(TAG, RECOMMENDED + " Found");
}
//Search for UAT in menu
if(solo.searchText(UAT)==false){
Log.e(TAG, UAT + " Not found!!!");
}else{
Log.i(TAG, UAT + " Found");
}
//Search for NEW APPS in menu
if(solo.searchText(NEW)==false){
Log.e(TAG, NEW + " Not found!!!");
}else{
Log.i(TAG, NEW + " Found");
}
//Search for TOP SELLERS in menu
if(solo.searchText(TOPSELLER)==false){
Log.e(TAG, TOPSELLER + " Not found!!!");
}else{
Log.i(TAG, TOPSELLER + " Found");
}
//Search for top downloaded
if(solo.searchText(TOPDOWNLOAD)==false){
Log.e(TAG, TOPDOWNLOAD + " Not found!!!");
}else{
Log.i(TAG, TOPDOWNLOAD + " Found");
}
//Search for EA in menu
if(solo.searchText(EA)==false){
Log.e(TAG, EA + " Not found!!!");
}else{
Log.i(TAG, EA + " Found");
}
solo.scrollUp();
//Search for FEATURED in menu
if(solo.searchText(FEATURED)==false){
Log.e(TAG, FEATURED + " Not found!!!");
}else{
Log.i(TAG, FEATURED + " Found");
}
solo.scrollUp();
//Search for GAMES in menu
if(solo.searchText(GAMES)==false){
Log.e(TAG, GAMES + " Not found!!!");
}else{
Log.i(TAG, GAMES + " Found");
}
solo.scrollUp();
//Search for APPS in menu
if(solo.searchText(APPS)==false){
Log.e(TAG, APPS + " Not found!!!");
}else{
Log.i(TAG, APPS + " Found");
}
solo.scrollUp();
//Search for SOCIAL in menu
if(solo.searchText(SOCIAL)==false){
Log.e(TAG, SOCIAL + " Not found!!!");
}else{
Log.i(TAG, SOCIAL + " Found");
}
solo.scrollUp();
//Search for ENTERTAINMENT in menu
if(solo.searchText(ENTERTAINMENT)==false){
Log.e(TAG, ENTERTAINMENT + " Not found!!!");
}else{
Log.i(TAG,ENTERTAINMENT + " Found");
}
solo.scrollUp();
//Search for MUSIC in menu
if(solo.searchText(MUSIC)==false){
Log.e(TAG, MUSIC + " Not found!!!");
}else{
Log.i(TAG, MUSIC + " Found");
}
solo.scrollUp();
//Search for THEMES in menu
if(solo.searchText(THEMES)==false){
Log.e(TAG, THEMES + " Not found!!!");
}else{
Log.i(TAG, THEMES + " Found");
}
solo.scrollUp();
//Search for TOOLS in menu
if(solo.searchText(TOOLS)==false){
Log.e(TAG, TOOLS + " Not found!!!");
}else{
Log.i(TAG, TOOLS + " Found");
}
solo.scrollUp();
//Search for NEWSin menu
if(solo.searchText(NEWS)==false){
Log.e(TAG, NEWS + " Not found!!!");
}else{
Log.i(TAG, NEWS + " Found");
}
solo.scrollUp();
//Search for SPORTS in menu
if(solo.searchText(SPORTS)==false){
Log.e(TAG, SPORTS + " Not found!!!");
}else{
Log.i(TAG, SPORTS + " Found");
}
solo.scrollUp();
//Search for READING in menu
if(solo.searchText(READING)==false){
Log.e(TAG, READING + " Not found!!!");
}else{
Log.i(TAG, READING + " Found");
}
solo.scrollUp();
//Search for MONEY in menu
if(solo.searchText(MONEY)==false){
Log.e(TAG, MONEY + " Not found!!!");
}else{
Log.i(TAG, MONEY + " Found");
}
//Search for SHOPPING in menu
if(solo.searchText(SHOPPING)==false){
Log.e(TAG, SHOPPING + " Not found!!!");
}else{
Log.i(TAG, SHOPPING + " Found");
}
//Search for FITNESS in menu
if(solo.searchText(FITNESS)==false){
Log.e(TAG, FITNESS + " Not found!!!");
}else{
Log.i(TAG, FITNESS + " Found");
}
//Search for TRAVEL in menu
if(solo.searchText(TRAVEL)==false){
Log.e(TAG,TRAVEL + " Not found!!!");
}else{
Log.i(TAG, TRAVEL + " Found");
}
//Search for BUSINESS in menu
if(solo.searchText(BUSINESS)==false){
Log.e(TAG, BUSINESS + " Not found!!!");
}else{
Log.i(TAG, BUSINESS + " Found");
}
//Search for SPANISH in menu
if(solo.searchText(SPANISH)==false){
Log.e(TAG, SPANISH + " Not found!!!");
}else{
Log.i(TAG, SPANISH + " Found");
}
}
在每次搜索之前(和之后),我插入了solo.scrollUp()
这不是实现这一目标的最漂亮的方法,也不是最有效的方法,但它现在起作用了
谢谢大家的帮助 我遇到了类似的问题。
似乎robotium在搜索文本和视图时会自动向下滚动。假设在方法A中,它使用资源ID搜索一些视图,然后向下滚动到底部以查找所有这些视图,如果在方法B中向上滚动或向上滚动到顶部,则它不起作用;如果只在方法A中向上滚动或向上滚动,它仍然有效。非常奇怪的东西。不,它可以找到应用程序。它停止寻找东西的地方是在游戏之后。我有从上到下列出的项目。因此,如果它只是一个搜索问题,直到找到它,它会很好地滚动。但事实并非如此。一旦找不到,它就会一直滚动到底。所以,我很困惑,它的行为是否符合设计?也就是说,它没有找到什么东西,而是一直在寻找。你是想说它不在那里吗?我想说的是,我正在搜索的所有项目都在那里。但当我运行程序时,一旦Robotium看不到文本,它就会一直滚动到底。这会导致三分之一的测试失败,因为正在搜索的项目不在屏幕上,但实际上在屏幕上。听起来您需要在查找文本之前向上滚动:
protectedvoidscrolltotop(){while(solo.scrollUp();}
是的,我就是这样做的。感谢您的帮助。searchText中有一个参数可以阻止它滚动。有关更多信息,请参阅javadoc。