我正在为一个原生Android应用程序的导航抽屉而苦苦挣扎。
因此,抽屉中有11个元素,其中9个是可见的,其余的您必须向下滚动。
Appium Inspector view
这些元素包含两个子元素,first - imageView和second - textView元素。
Appium Inspector view
我想要做的是创建一个方法来迭代可见的抽屉元素,以搜索具有特定名称的元素,然后点击它,如果元素不可见,我将向下/向上滚动抽屉,然后重复迭代。
因此,我需要一个for循环来遍历textView元素,使用文本属性找到需要的元素,然后单击此textView的父元素。
但是,我正在努力使用xpath正确定位元素,而Appium似乎找不到它们。
有人能帮助我理解如何动态地指定xpath,以便我可以遍历元素吗?
谢谢。
发布于 2016-08-09 03:30:29
你可以试试我下面的方法。它使用PageObject模型,以及Selenium和Appium。它利用的是uiAutomator,而不是Xpath。
public class PageObjectXYZ {
private AndroidDriver driver;
@AndroidFindBy(uiAutomator = "new UiSelector().className("android.widget.TextView")")
private List<MobileElements> someTextViews;
public PageObjectXYZ(AndroidDriver driver) {
this.driver = driver;
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}
public void clickTheOneIWant(String option){
for(MobileElement me: someTextViews){
if(me.getAttribute("text").equals(option)){
this.driver.tap(1, me, 1000);
break;
}
}
}
}如果您只想使用xpath快速和肮脏,那么如下所示(可能需要一些程序集):
String x = "//RecyclerView/RelativeLayout/RelativeLayout/TextView";
String y = "//RecyclerView/RelativeLayout/RelativeLayout";
Android driver = new AndroidDriver(new URL("http://localhost:4723/wd/hub"), desiredCapabilities);
Arraylist<MobileElements> arrayTextViews = driver.findElementsByXpath(x);
Arraylist<MobileElements> arrayParentElements = driver.findElementsByXpath(y);
for(int i = 0; i < arrayTextViews.size(); i++){
if(arrayTextViews.get(i).getText().equals("text I want")){
arrayParentElements.get(i).click();
}
}https://stackoverflow.com/questions/38827852
复制相似问题