美文网首页
『心善渊』Selenium3.0基础 — 28.Selenium

『心善渊』Selenium3.0基础 — 28.Selenium

作者: 繁华似锦Fighting | 来源:发表于2020-09-07 17:45 被阅读0次

    1、什么是元素等待

    WebDriver定位页面元素时如果未找到,会在指定时间内一直等待的过程。为了保证脚本运行的稳定性,需要脚本中添加等待时间。

    2、为什么要设置元素等待

    在元素定位的时,可能出现脚本已经运行到定位某个元素的时候,但该元素尚未加载到页面,此时脚本会因无法定位到该元素而导致执行失败。换句话说就是代码执行的速度,快于页面元素加载的速度,我们需要等待页面元素全部加载完成之后,再做定位元素。元素等待本质是为了解决时序上不匹配的问题。

    页面加载速度慢的原因:

    1. 由于网络速度原因。
    2. 电脑配置原因。
    3. 服务器处理请求原因。

    3、Selenium中常用的等待方式

    Selenium中常用的等待时间方式有三种:

    1. 强制等待:time.sleep()
    2. 隐式等待:implicitly_wait()
    3. 显式等待:WebDriverWait()

    4、强制等待

    设置等待最简单的方法就是强制等待,其实就是time.sleep()方法。不管它什么情况,让程序暂停运行一定时间,时间过后继续运行。缺点是不智能,如果设置的时间太短,元素还没有加载出来一样会报错。设置的时间太长,则会浪费时间。因而在实际UI自动化脚本开发中,这个方式一般比较少用。

    5、隐式等待

    (1)隐式等待介绍

    WebDriver提供了mplicitly_wait()方法来实现隐式等待。隐式等待相当于设置全局等待,在定位元素时,对所有元素设置的超时时间。implicitly_wait()默认参数的单位为秒,默认设置超时时间为0,设置后这个隐式等待会在WebDriver对象实例的整个生命周期起作用。

    从等待作用上看,是可以满足需要的,但是考虑到实际应用场景,driver(浏览器)要等待的元素和脚本要操作的元素未必相同,也就是说,脚本要操作的元素已经出现,但因为设置了全局等待,driver(浏览器)也会继续等待页面上其他无关元素,直至整个页面加载完毕。所以与显式等待相比,可能会出现一些无效等待的情况。

    如果超出了设置的时长,元素还没有被加载,则抛NoSuchElementException异常(可自己指定异常或自定义异常)。

    (2)示例

    """
    1.学习目标:
        掌握selenium隐式等待方法使用
    2.操作
        2.1 隐式等待方法
            driver.implicitly_wait(最大等待时间,单位:秒)
        2.2 隐式等待作用
            在规定的时间内等待页面所有元素加载;
        2.3 使用场景:
            在有页面跳转的时候,可以使用隐式等待。
    3.需求
        实现selenium隐式等待方法
    """
    # 1.导入selenium
    from selenium import webdriver
    import time
    from selenium.common.exceptions import NoSuchElementException
    
    # 2.打开浏览器
    driver = webdriver.Chrome()
    
    # 3.打开页面
    url = "https://www.jd.com/"
    driver.get(url)
    
    # 4. 添加隐式等待
    print("等待开始时间", time.time())
    # 等待5秒钟,最多等待5秒。
    # 如果在5秒内加载完成,加载完就继续执行。
    driver.implicitly_wait(5)
    print("等待结束时间", time.time())
    
    # 5. 定位元素,点击链接
    try:
        driver.find_element_by_link_text("秒杀").click()
    except NoSuchElementException as e:
        print(e)
    finally:
        # 6.关闭浏览器
        time.sleep(3)
        driver.quit()
        
    """
    输出结果:
    等待开始时间 1590511914.654972
    等待结束时间 1590511914.6569717
    """
    

    说明:

    在上面的案例中implicitly_wait()设置等待时长为5秒。这个5秒的设置并不针对页面上的某一个元素进行等待,也不是一个固定的等待时间。如果页面全部元素提前加载完,不用等待全部时间。如果直到超出设置时长(5秒)还没有定位到元素,则抛出异常。

    相关文章

      网友评论

          本文标题:『心善渊』Selenium3.0基础 — 28.Selenium

          本文链接:https://www.haomeiwen.com/subject/nyelektx.html