• UI自动化(selenium+python)之元素定位的三种等待方式


    前言

    在UI自动化过程中,常遇到元素未找到,代码报错的情况。这种情况下,需要用等待wait。

    在selenium中可以用到三种等待方式即sleep,implicitly_wait,WebDriverWait

    一、固定等待(sleep)

        导入time模块,设定固定的等待时间

        缺点:在网络状态良好,元素可以加载出来的情况下,依然需要等待,会导致脚本允许时间延长。

          

    二、隐式等待(implicitly_wait)

           隐式等待是指页面元素在设定时间内全部加载完成,才能执行下一步。若超过了设定时间报异常

           缺点:页面的JS一般是放在body的最后加载的,若JS没有加载,页面想要的元素已经出现,这时还要继续等待。 

           也会影响脚本执行速度。

           

    三、显示等待(WebDriverWait)

           通过from selenium.webdriver.support.wait import WebDriverWait 导入方法WebDriverWait()

          

         参数:

         driver:浏览器驱动

         timeout:最长超时时间,单位秒

         poll_frequency:监测频率时长,单位秒

         ignored_exception:忽略的异常信息,若报的是元组内的异常,则不中断代码,继续执行。若报的元组外的异常,则中断代码,停止执行。

         WebDriverWait函数中有until和until not两个方法:

        until和until not都有参数method和message。注意这里的method参数必须含有_call_(),使得类实例对象可以像调用普通函数那样,以“对象名()”的形式使用

        method:在等待时间内,每隔一段时间调用下method这个参数,判断返回值是否为True,若为True则执行下一步。

        message:超时后,报TimeoutException写入message。

      

        WebDriverWait与expected_conditions结合使用:

      

         expected_conditions类提供的条件判断方法:

        

        除了上述expected_conditions方法,还可以使用匿名函数lambda

        lambda driver:driver.find_element(<定位元素>)

        例如:WebDriverWait(driver, 5, 1).until(lambda driver:driver.find_element_by_id('kw'))

         

  • 相关阅读:
    dotnet 6 使用 HttpWebRequest 进行 POST 文件将占用大量内存
    递增运算符重载
    左移运算符重载
    流程与标准
    Erp系统常用递归,查类目树,查上级,查下级
    判断一个点是否在指定的直角三角形内
    [LeetCode]2281. Sum of Total Strength of Wizards 计算公式推导详解(JavaScript版)
    Airtest+Poco常见Exception报错
    nodejs连接mysql数据库,报错Client does not support authentication protocol requested by server的解决方法
    Poco API精讲之元素树冻结freeze()
  • 原文地址:https://www.cnblogs.com/balllyh/p/12193496.html
Copyright © 2020-2023  润新知