Python 如何判断已有的元素多少

bling8090 · 2019年04月22日 · 最后由 bling8090 回复于 2019年04月24日 · 2628 次阅读

python+uiautomator2
需求是这么定义的:有 5 个 SOS 号码,可以填 5 个也可以不填。
测试用例描述:先判断有没有旧的 SOS 号码,如果有全部删除后,再去添加 5 个;如果没有直接添加。
问题:我如何去判定原来的 SOS 号码有几个,然后做到一一删除。

#   针对于上一个脚本AddSOSAndScreen.py,有这么两处不足
#   1、如果我存在的旧的SOS号码没有5个,即存在1个--4个,执行就会报错
#    raise UiObjectNotFoundError({'code': -32002, 'method': 'wait'})  uiautomator2.UiObjectNotFoundError: -32002 Client error: <> data: , method: None
#   2、每次录入新的SOS号码,因为是随机,但是有可能随机匹配相同的号码,如何随机录入不同的SOS号码............解决方式:将list_tel定义为全局变量

import uiautomator2 as u2
from time import sleep
import random
import time

ip = '192.168.1.104'
package = 'com.njzx.shbsetting'
device = u2.connect(ip)
path = "E:\\pycharm\\run\\UiAutomator2\\F5\\screenpicture\\"
now_time = time.strftime("%Y-%m-%d-%H-%M-%S")

def start_app():    #   启动应用
    device.app_start(package)
    sleep(2)

def addTel_submit():
    device(resourceId="com.njzx.shbsetting:id/layout_sos").click()
    sleep(1)
    #   判断是否存在旧的SOS号码,若存在先删除再添加
    sos_old_tel1 = device(text = "SOS1")
    sos_old_tel2 = device(text="SOS2")
    sos_old_tel3 = device(text="SOS3")
    sos_old_tel4 = device(text="SOS4")
    sos_old_tel5 = device(text="SOS5")
    list_old_tel = [sos_old_tel1,sos_old_tel2,sos_old_tel3,sos_old_tel4,sos_old_tel5]
    if list_old_tel[0].exists:
        for x in range(len(list_old_tel)):
            device(resourceId="zte.shb.sossetting:id/delete").click()
            device(resourceId="zte.shb.sossetting:id/btn_set").click()
        addTel()
        device.press("home")
    else:
        addTel()
        device.press("home")


list_tel = [1774959158, 15152660926, 13222797082, 15365023694, 15951820949, 18551695620,1414141352545, 1344123313231, 124345545566]
def addTel():   #   添加SOS号码
    for i in range(0, 5):
        device(text="输入号码添加").click()
        sleep(1)
        device(resourceId="zte.shb.sossetting:id/et_num").click()
        sos_tel = random.choice(list_tel)
        list_tel.remove(sos_tel)
        print(list_tel)
        device(resourceId="zte.shb.sossetting:id/et_num").send_keys(sos_tel)
        device(resourceId="zte.shb.sossetting:id/btn_add").click()
        sleep(2)
        image = device.screenshot()
        image.save(path + now_time + '.jpg')
        sleep(1)


if __name__ == '__main__':
    start_app()
    addTel_submit()

共收到 1 条回复 时间 点赞

已经解决,只要统计出旧的 SOS 号码所代表的唯一控件,有多少个,以此为循环次数进行删除操作。

count_elments = device(resourceId = "zte.shb.sossetting:id/number").count
if count_elments != 0:
    for i in range(0,count_elments):
        device(resourceId="zte.shb.sossetting:id/delete").click()
        device(resourceId="zte.shb.sossetting:id/btn_set").click()
    addTel()
    device.press("home")
else:
    addTel()
    device.press("home")

原来的思路是:我统计出所有全部旧的 SOS 号码的控件,做成一个列表,然后判断,如果某个 SOS 号码不存在那么久 remove 掉。
这种方法不可行,因为它默认存在,并占用了内存。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册