一、等待的作用

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

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

二、等待方式

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

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

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

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

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

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

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

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

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

四、代码实现

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

web自动化测试-selenium的三种等待的更多相关文章

  1. Selenium中三种等待的使用方式---规避网络延迟、代码不稳定问题

    在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...

  2. Selenium:三种等待方式

    UI自动化测试,大多都是通过定位页面元素来模拟实际的生产场景操作.但在编写自动化测试脚本中,经常出现元素定位不到的情况,究其原因,无非两种情况:1.有frame:2.没有设置等待. 因为代码运行速度和 ...

  3. selenium webdriver三种等待方法

    webdriver三种等待方法 1.使用WebDriverWait from selenium import webdriverfrom selenium.webdriver.common.by im ...

  4. 【转】selenium webdriver三种等待方法

    原文:https://www.cnblogs.com/lgh344902118/p/6015593.html webdriver三种等待方法 1.使用WebDriverWait from seleni ...

  5. selenium的三种等待

    1. 强制等待 最简单粗暴,sleep(xx),不管你浏览器是否加载完了,程序都得等待xx秒,时间一到,再继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样等待,不过不建议总用这种等待方式, ...

  6. Selenium:三种等待方式详解

    我们在做WEB自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要求我们在有些场景下加等待时间. 我们平常用到的有三种等待方式: 强制等待 隐式等待 显示等待 一. ...

  7. Selenium4+Python3系列(六) - Selenium的三种等待,强制等待、隐式等待、显式等待

    为什么要设置元素等待 直白点说,怕报错,哈哈哈! 肯定有人会说,这也有点太直白了吧. 用一句通俗易懂的话就是:等待元素已被加载完全之后,再去定位该元素,就不会出现定位失败的报错了. 如何避免元素未加载 ...

  8. selenium的三种等待方式

    selenium有三种等待方式 1.time.sleep() 设置等待最简单的方法就是强制等待,但一般不建议使用,可以在调试的时候进行使用 2.隐性等待 driver.implictily_wait( ...

  9. selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep())---基于python

    我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中 ...

随机推荐

  1. web记住我功能的实现

    在web网页中经常可以看到记住我这样的功能,其实现原理是登陆时候在response中写入cookie,发送请求时,取出cookie判断,如果有则说明已经登陆 写cookie Cookie cookie ...

  2. log4j重复打印的解决方法

    log4j的logger(旧版本称logger)是层次结构的,子logger会继承父logger的属性,appender也是可继承的属性,这常常 容易导致配置错误而引起的log4j输出重复的log信息 ...

  3. Word 插入脚注、尾注与题注 -- 视频教程(5)

    >> 视频教程链接:B站,速度快,清晰 未完 ...... 点击访问原文(进入后根据右侧标签,快速定位到本文)

  4. yzoj 2372 小B的数字 题解

    题意 判断是否存在一个序列 $ b_i $ 使得 $ \prod_{i = 1}^{n} b_i  | b_i^{a_i}$ 恒成立,其中 $ b_i $ 中的每个数都是2的正整数次幂. 样例输入 3 ...

  5. Django框架之第五篇(模板层) --变量、过滤器、标签、自定义标签、过滤器,模板的继承、模板的注入、静态文件

    模板层 模板层就是html页面,Django系统中的(template) 一.视图层给模板传值的两种方法 方式一:通过键值对的形式传参,指名道姓的传参 n = 'xxx'f = 'yyy'return ...

  6. [译] QUIC Wire Layout Specification - Introduction & Overview | QUIC协议标准中文翻译(1) 简介和概述

    本文同步发布于: https://www.pengrl.com/p/33330/ ,转载请注明出处,谢谢. 目录 Introduction | 简介 Conventions and Definitio ...

  7. head first c# -- 第七章 (接口与抽象类)

    接口的作用: 例子:有鸡,鸭,牛,羊4个类,还有farmer类: farmer.feed(obj obj) { obj.eat() } // 没有接口: farmer.feedChicken(Chic ...

  8. SpringBootSecurity学习(07)网页版登录整合JDBC

    数据库中定义用户 前面我们定义用户是在配置文件和代码中定义死的默认用户,一般在开发中是不会这样做的,我们的用户都是来自我们的用户表,存储在数据库中.操作数据库的技术有很多,spring securit ...

  9. 应用中有多个Spring Property PlaceHolder导致@Value只能获取到默认值

    背景 工作中负责的一套计费系统需要开发一个新通知功能,在扣费等事件触发后发送MQ,然后消费MQ发送邮件或短信通知给客户.因为有多套环境,测试时需要知道是从哪套环境发出的邮件,又不想维护多套通知模板,因 ...

  10. 2019 顺网游戏java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.顺网游戏等公司offer,岗位是Java后端开发,因为发展原因最终选择去了顺网游戏,入职一年时间了,也成为了面 ...