zoukankan      html  css  js  c++  java
  • Selenium-几种等待方式

    强制等待

      一直使用的time.sleep(5),可以放在任意地方,不好的地方,不太准确确定时间

    隐形等待

      driver.implicitly_wait(5)

        设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截至,然后执行下一步.注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步

        但他还有一个问题,如果你页面加载挺好的,他会一闪而过,你也看不到具体的东西

        对整个driver的周期都起作用,所以只要设置一次即可,和sleep不同

    显性等待

      WebDriverWait,配合该类的unitl()和until_not()方法,就能够根据判断条件而进行灵活的等待.

    如何理解?

      每隔N秒检查下,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException异常

      语法如下:

        from selenium.webdriver.support.wait import WebDriverWait

        WebDriverWait(driver,超时时长,调用频率).until(可执行方法,超时的时候返回的信息)

        对上述部分的解释:

          drvier:  生成的driver是什么名字,就是什么

          超时时长:  超时时长

          调用频率:  调用unitl或until_not中的方法的间隔时间,默认是0.5秒

          until是当元素出现或什么条件成立则继续执行

          unitl_not是当元素消失或什么条件不成立则继续执行

          可执行的方法:  达到条件,执行的下一步

          超时的时候返回的信息:  超时返回的异常

    #! /usr/bin/env python
    #coding=utf-8
    
    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    import time
    
    driver = webdriver.Firefox()
    #隐性等待
    driver.implicitly_wait(5)
    driver.get("https://www.baidu.com/")
    
    #显性等待
    #WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("kw"),message = "元素加载超时").send_keys("博客园")
    
    kw = WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("kw"),message = "元素加载超时")
    kw.send_keys("博客园")
    
    time.sleep(3)
    driver.quit()

    调试的时候用 强制等待

    等调通了,再改成隐形等待或者显性等待

  • 相关阅读:
    【推荐】com.alibaba方式xml转json,能将xml的所有属性方法,全部转化为json
    关于使用JAXB读取xml文档转换为java对象报错:类的两个属性具有相同名称com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsExc...
    java正则,将<a或者</a,尖括号后面的字母改成大写
    javaben转xml
    三次握手四次挥手
    RPC接口测试(六)RPC协议解析(重要!重要!重要!)
    os.popen(cmd) 与 os.system(cmd) 的区别
    jmeter测试webSocket接口
    Ubuntu20.04 体验和美化
    API可视化管理平台YApi
  • 原文地址:https://www.cnblogs.com/R-bear/p/7470853.html
Copyright © 2011-2022 走看看