IOS没有activity怎么办?ios页面唯一标识解决方案

遇到的问题

众所周知,ios页面没有像android一样activity的概念,那么我们在做ios UI遍历或者ios Monkey的时候如何定义一个页面呢?下面提供两种解决方案

方案1 页面关键元素,生成页面标识

思路

通过wda获取的dom(python-wda的API:s.source()),然后筛选关键元素,我用的筛选方案是筛选dom中的button节点,然后删除影响比较大的因素,如长度过长,含有数字特殊字符的,再通过该信息生成页面md5
缺点:dom获取时间比较久,如果遇到比较复杂的页面,比如购物车,会耗时特别长

代码

筛选node

if node.type == "Button":
   self.iosButtonList.append(node.label)

删除无效节点,生成md5

def init_page_info_ios_activity(device, page):
    """
    创建ios页面的唯一标识activity
    挑选dom中的button,删除影响比较大的因素,如长度过长,含有数字特殊字符的
    :param device:
    :param page:
    :return:
    """
    activity = ''
    if device.client == "android":
        return
    for label in page.iosButtonList:
        # 如果长度四个字符跳过
        if len(label) > 3:
            continue
        # 如果存在数字那么跳过
        if bool(re.search(r'\d', label)):
            continue
        activity += label
    md5 = hashlib.md5(activity.encode()).hexdigest()
    page.currentActivity = md5

方案2 图片通过cv能力,生成页面指纹

思路

页面截图,图片先cv处理灰度化、然后缩放为8*9的缩略图,最后再生成包含图像信息的指纹。阈值可以根据自己需要进行定制

利用事件操作前后的屏幕截图生成的像素指纹,进行对比判断是否为相同页面

缺点:遇到动态页面,如视频或者banner会影响判断

代码

生成指纹

def dHash(img):
    # 差值哈希算法
    # 缩放8*8
    img = cv2.resize(img, (9, 8))
    # 转换灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    hash_str = ''
    # 每行前一个像素大于后一个像素为1,相反为0,生成哈希
    for i in range(8):
        for j in range(8):
            if gray[i, j] > gray[i, j + 1]:
                hash_str = hash_str + '1'
            else:
                hash_str = hash_str + '0'
    # print('==> dhash:', hash_str)
    return hash_str

对比指纹



def compare_pic_by_dhash(path1, path2, threshold=18):
    """
    通过差值hash判断图片相似度
    :param path1:
    :param path2:
    :param threshold: 阈值
    :return:
    """
    img1 = cv2.imread(path1)
    img2 = cv2.imread(path2)
    hash1 = dHash(img1)
    hash2 = dHash(img2)
    n2 = cmpHash(hash1, hash2)
    #print('差值哈希算法相似度dHash:', n2)
    if n2 > threshold:
        return False
    if n2 == -1:
        raise ValueError("compare para error")
    return True

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值