zoukankan      html  css  js  c++  java
  • selenium自动化测试中的等待操作(9)

    一、selenium自动化测试中的等待操作
    1.为什么要做等待:因为被测系统反应需要一些时间,所以有些步骤之间需要加一些必要的等待操作。
    2.等待的实现三种方式:
    (1)方式一:强制等待固定时间,只需要导入python语言自带的time模块里的sleep函数,在脚本中调用sleep函数,增加以秒为单位的时间数作为参数即可。优点是代码语法简洁,适合初学者使用,缺点是不灵活,等待的时间是固定的。
    示例:
    from time import sleep
    sleep(3)
    (2)方式二:隐式等待,是全局的设置,在每一次查找定位元素前都会自动做等待,直到等待到元素能定位到为止,等待时间不是固定的。只需要在启动浏览器的步骤后,设置一下所有元素找不到时最多等待多长时间,也就是隐式等待的超时时间即可,后面的步骤中间不需要加等待元素出现的步骤了。如果到达超时时间仍然找不到元素,会抛出异常NoSuchElementException。优点是等待时间比强制等待灵活,而且是全局设置,不用书写很多次,缺点是如果判断元素找不到,需要等待很长时间,只能等待元素出现,不能等待其他的条件成立,功能有限。
    语法:driver.implicitly_wait(超时时间)
    说明:超时时间单位是秒。
    示例:
    driver=webdriver.Firefox()
    # 设置隐式等待的超时时间是15秒
    driver.implicitly_wait(15)
    (3)方式三:式等待,是功能最强大的等待方式,也是语法最复杂的等待方式,可以自定义等待的条件,例如等待一个弹出框出现、等待一个按钮变为可用的状态、等待一个单选按钮变为选中的状态、等待当前网页标题变为xxx、等待当前url变为xxx……,它不是全局的设置,哪里需要等待,就在哪里书写代码。
    a.第一步:在文件开头处导入selenium专门设计的一个显式等待类WebDriverWait和自定义等待条件的模块expected_conditions,语法如下
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    b.第二步:在需要等待的步骤之间,实例化WebDriverWait对象,它的构造函数至少要给定两个必填参数,第一个参数是driver,第二个参数是等待的超时时间(以秒为单位)。
    示例:
    # 实例化WebDriverWait对象,等待超时时间是15秒
    w1=WebDriverWait(driver,15)
    c.第三步:准备自定义的等待条件,需要调用expected_conditions模块里的实现类构造函数描述需要等待的条件,具体参考Selenium资料expected_conditions.txt里的说明。
    示例1:
    # 准备等待条件:网页的标题包含“用户中心”
    c1=EC.title_contains("用户中心")
    示例2:
    # 准备等待条件:网页的标题等于“用户中心_ECSHOP演示站 - Powered by ECShop”
    c1=EC.title_is("用户中心_ECSHOP演示站 - Powered by ECShop")
    示例3:
    # 准备等待条件:等待用户名文本框出现在当前网页源代码里
    c2=EC.presence_of_element_located((By.NAME,"username"))
    d.第四步:调用WebDriverWait类里的until函数或until_not函数来等待条件成立或不成立,参数就是第三步所准备的那个等待条件的对象。
    示例:
    w1.until(c1)

    补充:显示等待的条件如果是presence_of_element_located,那么until函数会返回刚才所等待出现的元素对象,随后可以直接操作该元素。---了解!
    示例:
    # # 显式等待,等待跳转回留言板页(等待网页源代码里出现主题文本框)
    w1=WebDriverWait(driver,15)
    c1=EC.presence_of_element_located((By.NAME,"msg_title"))
    zhu=w1.until(c1)
    # 输入主题
    #zhu=driver.find_element(By.NAME,"msg_title")
    zhu.send_keys("hello")

  • 相关阅读:
    Listbox与dataGridView的获取鼠标点击事件的区别!!!
    鼠标点击单元格显示在相应文本框中的方法(单元格事件)
    岁月不停~~
    中小学信息学奥林匹克竞赛-理论知识考点--输入输出设备
    中小学信息学奥林匹克竞赛-理论知识考点--计算机组成
    中小学信息学奥林匹克竞赛-理论知识考点--存储容量
    中小学信息学奥林匹克竞赛-理论知识考点--ASCII
    中小学信息学奥林匹克竞赛-理论知识考点--二进制
    scrapy install
    写出输出结果
  • 原文地址:https://www.cnblogs.com/guog1/p/14154527.html
Copyright © 2011-2022 走看看