zoukankan      html  css  js  c++  java
  • web自动化测试-selenium的三种等待

    一、等待的作用

      1、在系统的功能运行过程中,所有的内容是需要一定的时间来实现展示,

      2、时间耗费长短与网络速度、系统框架设定、接口的执行复杂度有关,
      3、因此需要设置缓冲时间,若未设置缓冲时间,容易导致元素找不到

    二、等待方式

      强制等待 sleep()
        导入time中的sleep,等待X秒后再执行后面的代码
        缺点
          1、无法精确把握等待的时间(如无法判断页面是否加载完成,是否可以进行下一步操作)
          2、一直使用强制等待会降低自动化效率,浪费大量时间
        优点
          1、简单使用,一般在调试中使用

        隐式等待
        设置一个隐形的等待,设置最长等待时间,如果在这个时间内完成了页面内容全部加载,则进行下一步操作,否则一直等待时间结束,再进行下一步
        缺点

          必须等待页面加载完成才能进行下一步,应用度上不太灵活
        优点

          对整个WebDriver周期有效,所以只需要设置一次

      显示等待
        专门用于指定的条件进行等待,在设置的最大时长内,依照查找的时间频率来进行搜索,查找指定的对象,until表示如果找到,则继续下一步,否则报出异常
        优点

          精确对某个特定条件进行等待,条件成立进行下一步,否则报出异常
        缺点

          应用上而言,相较于其他两种等待更为复杂

    三、自动化中应该避免的坑

      页面元素定位不到原因:
        1、元素定位错误
        2、未添加等待时间
        3、直接copy容易出错
      针对上述问题,采用xpath方式手写定位,确认元素的正确性

    四、代码实现

     1 from selenium import webdriver
     2 from selenium.webdriver.support.wait import WebDriverWait
     3 from selenium.webdriver.support import expected_conditions as ec
     4 from selenium.webdriver.common.by import By
     5 dr=webdriver.Chrome()
     6 
     7 #隐式等待 
     8 dr.implicitly_wait(20)
     9 
    10 dr.get('http://www.baidu.com')
    11 
    12 #显示等待
    13 element = WebDriverWait(dr,20).until(ec.presence_of_element_located((By.ID,'KW')))
    14 element.send_keys('selenium')
    15 
    16 dr.quit()
    五、expected_conditions类说明
     1 ec.title_is 判断当前页面标题是否符合预期
     2 ec.title_contains  判断当前页面标题是否包含预期字符串
     3 ec.presence_of_element_located  判断元素是否被加载DOM树里,不代表元素一定可见
     4 ec.visibility_of_element_located  判断元素是否可见
     5 ec.visibility_of 与上面方法作用相同,只是上面方法参数为定位,该方法接收的参数为定位后的元素
     6 ec.presence_of_all_elements_located  判断是否至少有一个元素存在DOM树里
     7 ec.text_to_be_present_in_element  判断某个元素的text是否包含预期的字符串
     8 ec.text_to_be_present_in_element_value  判断某个元素的value属性是否包含预期的字符串
     9 ec.frame_to_be_available_and_switch_to_it 判断该表单是否可以切换进去
    10 ec.invisibility_of_element_located  判断某个元素是否不存在DOM树里
    11 ec.element_to_be_clickable  判断某个元素是否可见并可以点击
    12 ec.staleness_of  等到一个元素从DOM树里移除
    13 ec.element_to_be_selected  判断某个元素是否被选中
    14 ec.element_selection_state_to_be  与上面方法作用相同,只是上面方法参数为定位,该方法接收的参数为定位后的元素
    15 ec.alert_is_present  判断页面是否存在alert




  • 相关阅读:
    图像处理之图像分割
    matlab 矩阵运算技巧
    回溯法:八皇后问题
    spring框架学习笔记(二)
    spring框架学习笔记(一)
    java下搭建Webservice服务
    log4j使用
    Mybatis使用
    java序列化与反序列化
    java常用数据类型
  • 原文地址:https://www.cnblogs.com/puti306/p/11829729.html
Copyright © 2011-2022 走看看