(7)获取元素、等待页面加载完成封装

本文介绍了Python中用于自动化测试的ObjectMap.py工具类的两个关键方法:element_get用于根据定位类型和表达式获取页面元素,支持设置超时和元素是否必须可见;wait_for_read_state_complete函数则等待页面加载完成,通过JavaScript检查document.readyState。
摘要由CSDN通过智能技术生成

封装 OBjectMap.py工具类
在这里插入图片描述

一、获取元素

获取元素思路流程图
在这里插入图片描述
获取元素封装代码

 def element_get(self,driver,locate_type,locator_expression,timeout=10,must_be_visible=False):
        """
        #获取元素
        :param driver:
        :param locate_type:定位类型
        :param locator_expression:定位表达式
        :param timeout:超时
        :param must_be_visible:必须可见
        :return:
        """
        start_ms=time.time()*1000  #开始时间 获取当前时间戳
        stop_ms=start_ms+(timeout*1000) #结束时间
        for x in range(int(timeout*10)):
         #寻找元素
         try:
            element=driver.find_element(by=locate_type,value=locator_expression)
            if not must_be_visible: #如果元素不是必须可见的,直接返回元素
                return element
            else:  #如果元素是必须可见的,则需要判断元素是否可见
                if element.is_displayed(): #如果元素可见
                    return element
                else:  #如果不可见,抛出异常
                    raise Exception()
         except Exception: #判断是否大于结束时间,大于则退出循环,反之,继续等待元素是否可见
             now_ms=time.time()*1000
             if now_ms>=stop_ms:
                 break
             pass
         time.sleep(0.1)
        raise ElementNotVisibleException("元素定位失败,定位方式:"+locate_type+"定位表达式:"+locator_expression)

二、等待页面加载完成

等待页面加载思路流程图
在这里插入图片描述
等待页面加载完成封装代码

def wait_for_read_state_complete(self,driver,timeout=30):
    """
    等待页面加载完成
    :param driver:
    :param timeout: 超时
    :return:
    """
    start_ms = time.time() * 1000  # 开始时间 获取当前时间戳
    stop_ms = start_ms + (timeout * 1000)  # 结束时间
    for x in range(int(timeout*10)):
        try:
            read_state=driver.execute_script("return document.readyState")
        except WebDriverException: #如果有driver错误,执行js会失败,直接跳过
            time.sleep(0.03)
            return True
        if read_state=="complete":#如果页面全部加载完成返回True
            time.sleep(0.01)
            return True
        else:#如果页面超时就break
            now_ms=time.time()*1000
            if now_ms>=stop_ms:
                break
            time.sleep(0.1)
    raise Exception("打开网页时,页面元素在%s秒后依旧没有加载完成" % timeout)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值