在 adb 中迭代列表视图 - uiautomator
Iterating list view in adb - uiautomator
我正在尝试在 adb shell 中迭代列表视图。我正在使用 uiautomator,但是,我的元素似乎比设备中捕获的元素多。如果我要使用滚动,我将能够访问元素。但是无论如何我不必滚动并简单地遍历列表元素吗?
此屏幕截图由 uiautomator 完成。
我的代码片段。
>>> a = d(index = 0, className = 'android.widget.ListView')
>>> for i in a.child(): print i.info
这似乎无法打印任何内容或遍历列表视图。
我正在使用下面的代码在 phone 书中按姓名查找联系人 [这是一个列表元素]。希望这段代码对你有帮助。此刻我查看每个元素,如果请求的元素可用,我退出循环,否则我向下滑动。我不确定它会有多大帮助,但它会给出一个基本的想法。我正在使用 appium 进行一些 UI 自动化。有更好知识的人请指导或纠正是否有任何方法可以加快此 activity 以获取列表所有元素的列表,这也对我有帮助
public Boolean Get_PhContact_ByName(MobileDriver d, String strName){
Boolean bFoundName = false;
while(bFoundName == false)
{
List <WebElement> ContactList = d.findElements(By.id(ID_MENU_CONTACT_NAMES));
int lstSize = ContactList.size();
System.out.println(String.valueOf(lstSize));
for(int iIndex = 0; iIndex < lstSize; iIndex++)
{
WebElement xName = ContactList.get(iIndex);
String strNameOrNumber = xName.getText().replaceAll("(?:\n|\r)", "").trim();
System.out.println(strNameOrNumber);
if(strNameOrNumber.equals(strName))
{
System.out.println("Found Name" + strName);
xName.click();
bFoundName = true;
}
}
if(bFoundName == false)
PerformSwipeDown(d);
}
return true;
}
public void PerformSwipeDown(MobileDriver d)
{
String originalContext = d.getContext();
d.context("NATIVE_APP");
org.openqa.selenium.Dimension size = (org.openqa.selenium.Dimension) d.manage().window().getSize();
int starty = (int) (size.height * 0.8);
int endy = (int) (size.height * 0.20);
int startx = size.width / 2;
((AndroidDriver)d).swipe(startx, starty, startx, endy, 1000);
d.context(originalContext );
}
public void PerformSwipeUp(MobileDriver d)
{
String originalContext = d.getContext();
d.context("NATIVE_APP");
org.openqa.selenium.Dimension size = (org.openqa.selenium.Dimension) d.manage().window().getSize();
int starty = (int) (size.height * 0.20);
int endy = (int) (size.height * 0.8);
int startx = size.width / 2;
((AndroidDriver)d).swipe(startx, starty, startx, endy, 1000);
d.context(originalContext );
}
我正在尝试在 adb shell 中迭代列表视图。我正在使用 uiautomator,但是,我的元素似乎比设备中捕获的元素多。如果我要使用滚动,我将能够访问元素。但是无论如何我不必滚动并简单地遍历列表元素吗?
此屏幕截图由 uiautomator 完成。
我的代码片段。
>>> a = d(index = 0, className = 'android.widget.ListView')
>>> for i in a.child(): print i.info
这似乎无法打印任何内容或遍历列表视图。
我正在使用下面的代码在 phone 书中按姓名查找联系人 [这是一个列表元素]。希望这段代码对你有帮助。此刻我查看每个元素,如果请求的元素可用,我退出循环,否则我向下滑动。我不确定它会有多大帮助,但它会给出一个基本的想法。我正在使用 appium 进行一些 UI 自动化。有更好知识的人请指导或纠正是否有任何方法可以加快此 activity 以获取列表所有元素的列表,这也对我有帮助
public Boolean Get_PhContact_ByName(MobileDriver d, String strName){
Boolean bFoundName = false;
while(bFoundName == false)
{
List <WebElement> ContactList = d.findElements(By.id(ID_MENU_CONTACT_NAMES));
int lstSize = ContactList.size();
System.out.println(String.valueOf(lstSize));
for(int iIndex = 0; iIndex < lstSize; iIndex++)
{
WebElement xName = ContactList.get(iIndex);
String strNameOrNumber = xName.getText().replaceAll("(?:\n|\r)", "").trim();
System.out.println(strNameOrNumber);
if(strNameOrNumber.equals(strName))
{
System.out.println("Found Name" + strName);
xName.click();
bFoundName = true;
}
}
if(bFoundName == false)
PerformSwipeDown(d);
}
return true;
}
public void PerformSwipeDown(MobileDriver d)
{
String originalContext = d.getContext();
d.context("NATIVE_APP");
org.openqa.selenium.Dimension size = (org.openqa.selenium.Dimension) d.manage().window().getSize();
int starty = (int) (size.height * 0.8);
int endy = (int) (size.height * 0.20);
int startx = size.width / 2;
((AndroidDriver)d).swipe(startx, starty, startx, endy, 1000);
d.context(originalContext );
}
public void PerformSwipeUp(MobileDriver d)
{
String originalContext = d.getContext();
d.context("NATIVE_APP");
org.openqa.selenium.Dimension size = (org.openqa.selenium.Dimension) d.manage().window().getSize();
int starty = (int) (size.height * 0.20);
int endy = (int) (size.height * 0.8);
int startx = size.width / 2;
((AndroidDriver)d).swipe(startx, starty, startx, endy, 1000);
d.context(originalContext );
}