感谢 @chenhengjie123 @huanzhijin 耐心回答

测试的功能

模拟微信聊天,测试一次发送 9 张图片,图片是否全部发送成功的功能,未成功的图片左侧出现小感叹号的图标。

我的思路

同时选择 9 张图片发送后,获取聊天列表 textview,通过 textview[-1],textview[-2]...textview[-9] 这样遍历每一条消息的 LinearLayout,看是否包含小感叹号的图标,不包含则表示发送成功。

代码如下

listViews = wd.find_element_by_id("listview")                                        
textview = listViews.find_elements_by_class_name("android.widget.LinearLayout")      # 获取聊天信息的列表
for count in range(9):
    try:
        wd.textview[-(count+1)].find_element_by_id("station_chat_fail_img")      # 小感叹号图标 id = station_chat_fail_img
        ex = True
    except:
        ex = False
    if  ex == False:
        print("------- success to send the pic")
    else:
        print("------- fail to send the pic")

问题 1:

实际上是每次都会有发送不成功的图片,但是测试不出来,结果显示:

print(ex) 了一下,显示 9 个全是 False。

解决方法:

1.wd.textview[-(count+1)].find_element_by_id("station_chat_fail_img") 语法错误,取不到值,应该为textview[-(count+1)].find_element_by_id("station_chat_fail_img")
2.因为感叹号图标一直存在,只是图片发送成功和不成功时透明度不同,所以只是 find 这个 element 是判断不出来的,应该改为textview[-(count+1)].find_element_by_id("station_chat_fail_img").is_displayed()

问题 2

问题 1 解决后,出现了另一个问题,发现上面的方法不能准确判断到第几张图片发送不成功

解决方法:

因为在 Android 的 Appium 的默认模式下,只有屏幕上显示出来的 element 才能被 find 到,而我的屏幕上一次只能显示 4 张图片,没办法全部取到 textview 的 9 个元素。于是修改为每次取最后 3 张图片进行判断,然后滑动一次屏幕,循环 3 次:

for x in range(3): 
    listViews = wd.find_element_by_id("listview")
    textview = listViews.find_elements_by_class_name("android.widget.LinearLayout")  
    for count in range(3):
        try:
            textview[-(count+1)].find_element_by_id("station_chat_fail_img").is_displayed()
            ex = True 
        except:
            ex = False
        if  ex == False:
            print("------- success to send the pic")
        else:
            print("------- fail to send the pic")
    wd.swipe(300,100,300,1020,800)

然后,获取完整 textview 的方法目前 Android 需要用 Selendroid 模式,这个我会继续学习。


↙↙↙阅读原文可查看相关链接,并与作者交流