我在使用appium阅读联系人列表我的Android设备时遇到了问题。 我的目标是通过滚动到页面末尾阅读Android设备中的所有联系人,并在到达最后一次联系结束后退出。
我使用了以下代码。
package sampleinfo;
import java.util.ArrayList;
import java.util.List;
import org.openqa.selenium.Dimension;
import io.appium.java_client.MobileElement;
public class Readingcontacts extends sampleappiumlaunch{
List<String>previous=new ArrayList<String>();
List<String>current=new ArrayList<String>();
public void scrolltillEnd(){
System.out.println("Intiated method to read contacts of current window");
readContacts();
while(!current.equals(previous)){
System.out.println("Intiated method to Scroll...");
verticalScroll();
System.out.println("adding current window contacts to previous window list");
previous.addAll(current);
System.out.println("@@@@@@Previous List is of elements were....@@@@"+previous);
System.out.println("Intiated method to read contacts of current window");
readContacts();
}
System.out.println("****End of while loop..reached end of page..***");
String finalcontact = current.get(current.size() - 1);
System.out.println("Final contact name is"+finalcontact);
}
public void readContacts(){
String layout = "android.widget.ListView";
MobileElement Rootelframe = (MobileElement) appiumdriver.findElementByAndroidUIAutomator(
"new UiSelector().className(\"" + layout + "\").enabled(true).instance(0)");
List<MobileElement>viewgroup=Rootelframe.findElementsByClassName("android.view.ViewGroup");
for (int i=0;i<viewgroup.size();i++) {
try{
System.out.println("####..currently in view group index of...####"+i);
String str=viewgroup.get(i).findElementByClassName("android.widget.TextView").getText().toString();
System.out.println("@@@@@...Current List element is....@@@@"+str);
current.add(i, str);
}
catch(Exception e){
System.out.println("currently Text view element is not visiable in view group index of"+i);
}
}
System.out.println("*****current List of elements were.....******"+current);
}
public void verticalScroll() {
Dimension size=appiumdriver.manage().window().getSize();
int y_start=(int)(size.height*0.70);
int y_end=(int)(size.height*0.30);
int x=size.width/2;
if(!current.equals(previous)){
appiumdriver.swipe(x,y_start,x,y_end,5000);
}
else{
System.out.println("Reached end of page");
}
}
}
答案 0 :(得分:0)
您提出的条件无效。变量当前和上一个永远不会匹配。您可以通过在 verticalScroll()方法的else部分设置标志并在while循环中检查相同的标志来尝试下面的代码。
声明名为isPageEndReached = false的布尔变量类。如果到达页面末尾,则将值设置为true。并检查循环中的值是否为&#39;如果是,则打破循环。
答案 1 :(得分:0)
在填充之前和当前之前清除它们,而不要使用current.add(i, str);
来代替current.add(str);