使用 JAVA 编写的 Appium 测试中 LinearLayout 元素列表的奇怪行为

strange behavior of indexing of list of LinearLayout element in Appium test writen with JAVA

我正在使用 Appium 测试本地 Android 移动应用程序,测试在 Java.

中编写

在下面的代码中,我试图在应用程序的菜单列表中搜索某个项目并单击。菜单一共有4个项目,但是listSize读为35,每次执行读的都不一样。另外,如果我点击 menuList.get(0).click(),在执行过程中是第二个项目而不是第一个项目获得了点击。

打印出下面列出的结果。

Appium 版本 1.4.13.1,JDK 版本 1.8.0_66。不确定任何其他信息是否相关,如果您有疑问,请询问。

List<WebElement> menuList = driver.findElementsByClassName("android.widget.LinearLayout");
    int listSize = menuList.size();
    int index = 0;
    Boolean menuFound = false;
    while(!menuFound && index < listSize)
    {
        String label = menuList.get(index).findElement(By.id("no.ruter.reise.qa:id/label")).getText();
        System.out.printf("%d of %d, %s\n", index, listSize, label);
        if (label.equals(menuItem)){
            menuList.get(index).click();
            System.out.printf("\t%s %s\n", menuItem, "click");
            menuFound = true;
        }
        index++;
    }

打印结果:

Test: avgangMinpositionTilStavNaa
0 of 35, Avgangstider
1 of 35, Avgangstider
2 of 35, Avgangstider
3 of 35, Avgangstider
4 of 35, Avgangstider
5 of 35, Avgangstider
6 of 35, Avgangstider
7 of 35, Avgangstider
8 of 35, Avgangstider
9 of 35, Avgangstider
10 of 35, Avgangstider
11 of 35, Avgangstider
12 of 35, Avgangstider
13 of 35, Avgangstider
14 of 35, Avgangstider
15 of 35, Avgangstider
16 of 35, Avgangstider
17 of 35, Avgangstider
18 of 35, Avgangstider
19 of 35, Avgangstider
20 of 35, Avgangstider
21 of 35, Avgangstider
22 of 35, Avgangstider
23 of 35, Avgangstider
24 of 35, Avgangstider
25 of 35, Avgangstider
26 of 35, Avgangstider
27 of 35, Avgangstider
28 of 35, Avgangstider
29 of 35, Avgangstider
30 of 35, Avgangstider
31 of 35, Avgangstider
32 of 35, Favoritter
33 of 35, Kart
34 of 35, Finn reise
    Finn reise click
    Finn reise

您正在使用 "android.widget.LinearLayout" class,这很常见,您的应用程序有 35 个布局,class 名称 "android.widget.LinearLayout"。

这些布局可能是嵌套格式。您需要为菜单创建定位器,如果您的所有菜单定位器都有 id "no.ruter.reise.qa:id/label",您可以使用以下代码:

List<WebElement> menuList = driver.findElementsByClassName("no.ruter.reise.qa:id/label");
int listSize = menuList.size();
int index = 0;
Boolean menuFound = false;
for(WebElement menu : menuList)
{
    String label = menu.getText();
    System.out.printf("%d of, %s\n", index,label);
    if (label.equals(menuItem)){
        menu.click();
        System.out.printf("\t%s %s\n", menuItem, "click");
        menuFound = true;
    }
    index++;
}