感谢 @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")
实际上是每次都会有发送不成功的图片,但是测试不出来,结果显示:
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()
问题 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 模式,这个我会继续学习。