UI自动化测试(Python)Web-三种元素等待

172 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情

src=http___i.cqdj.cc_forum_201307_27_160601dupc4j8gucap6mld.gif&refer=http___i.cqdj.gif

   您好,我是游手好闲的小羊!

一、什么是元素等待?

说明:在定位页面元素时如果未找到,会在指定时间内一直等待的过程;

二、为什么要设置元素等待?

  1. 网络速度慢
  2. 电脑配置低
  3. 服务器处理请求慢

三、元素等待类型

1.隐式等待(智能等待)

说明:定位元素时,如果能定位到元素则直接返回该元素,不触发等待; 如果不能定位到该元 素,则间隔一段时间后再去定位元素; 如果在达到最大时长时还没有找到指定元素,则抛出元素 不存在的异常 NoSuchElementException 。

实现方法

driver.implicitly_wait(timeout) (timeout:为等待最大时长,单位:秒) 说明:隐式等待为全局设置(只需要设置一次,就会作用于所有元素)

2.显式等待

概念:定位指定元素时,如果能定位到元素则直接返回该元素,不触发等待; 如果不能定位到该 元素,则间隔一段时间后再去定位元素; 如果在达到最大时长时还没有找到指定元素,则抛出超 时异常 TimeoutException

Selenium中把显式等待的相关方法封装在WebDriverWait类中

实现方法:

1. 导包 等待类 --> from selenium.webdriver.support.wait import WebDriverWait
2. WebDriverWait(driver, timeout, poll_frequency=0.5)
1). driver:浏览器驱动对象
2). timeout:超时的时长,单位:秒
3). poll_frequency:检测间隔时间,默认为0.53. 调用方法 until(method):直到...时
1). method:函数名称,该函数用来实现对元素的定位
2). 一般使用匿名函数来实现:lambda x: x.find_element_by_id("userA")
4. element = WebDriverWait(driver, 10, 1).until(lambda x: x.find_element_by_id("userA")

3.强制等待

说明::无条件等待

实现方法:

time.sleep(delay)

delay的单位为,delay设置多少秒页面就会等待多少秒(死等),这个方法很容易让线程挂掉,使程序抛异常,所以要慎用此方法。

四、显示等待与隐式区别

  1. 作用域:隐式为全局元素,显式等待为单个元素有效
  2. 使用方法:隐式等待直接通过驱动对象调用,而显式等待方法封装在WebDriverWait类中
  3. 达到最大超时时长后抛出的异常不同:隐式为NoSuchElementException,显式等待为TimeoutExcepti on

每天分享一点点,我是带你学习的小羊!