Selenium 您所在的位置:网站首页 python等待5秒 Selenium

Selenium

2023-08-14 19:04| 来源: 网络整理| 查看: 265

UI层面的自动化的测试,由于网络、电脑配置等因素的不同,导致页面的加载速度不同,因此为了保证测试脚本的稳定性,需要在脚本中添加相应的等待时间。 1. 休眠等待 添加休眠非常简单,只需要引入python的time包,调用其中的sleep()方法。 这一种休眠方式会强制休眠对应的时间长度,不管页面或元素是否显示,因此会出现影响运行效率的问题,长时间的休眠不建议使用。

用法:

# -*- coding:utf-8 -*- from selenium import webdriver import time time.sleep(0.1) # 休眠0.1秒 time.sleep(3) # 休眠3秒

2. 智能等待-隐式等待 通过添加implicitly_wait()方法就可以实现智能等待,其为是 webdirver 提供的一个超时等待,文档中的解释:隐式地等待一个元素被发现,或命令来完成。 当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常。 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM。一旦设置了隐式等待,则它存在整个 WebDriver 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢,它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。

用法:

driver.implicitly_wait(30)

3. 智能等待-显示等待 WebDriverWait()类: webdirver 提供的方法。简单来说就是WebDriver每隔一段时间就对页面元素进行检测,直到达到设定条件或超过设定时间,默认会抛出NoSuchElementException的异常。

文档解释:

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None) driver - WebDriver 的驱动程序(Ie, Firefox, Chrome 或远程) timeout - 超时时间,默认以秒为单位 poll_frequency - 休眠时间的间隔(步长)时间,默认为 0.5 秒 ignored_exceptions - 超时后的异常信息,默认情况下抛 NoSuchElementException 异常。 WebDriverWait()一般由 until()或 until_not()方法配合使用,下面是 until()和 until_not()方法的说明。 until(method, message=’’) 调用该方法提供的驱动程序作为一个参数,直到返回值不为 False。 until_not(method, message=’’) 调用该方法提供的驱动程序作为一个参数,直到返回值为 False。

文档中提供的实例

from selenium.webdriver.support.ui import WebDriverWait element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("someId")) is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until_not(lambda x: x.find_element_by_id("someId").is_displayed())

同城WebDriverWait要和expected_conditions.py文件配合使用,expected_conditions.py提供了一系列用于元素判断的方法,按需使用对应的方法即可。

几个方法实例:

from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 等待元素出现在DOM WebDriverWait(self._driver).until(EC.presence_of_element_located((By.ID, value))) # 等待元素显示在页面 WebDriverWait(self._driver,10).until(EC.visibility_of_element_located((By.NAME, value))) # 等待元素从页面消失 WebDriverWait(self._driver, 10, 0.2).until_not(EC.visibility_of_element_located((By.CLASS_NAME, value)))) # 等待页面的title显示 WebDriverWait(self._driver, 5,0.2).until(EC.title_contains(title))

另外: 隐式等待和显示等待的策略都是一样的,第一次找不到元素后都会继续重试直至超时。区别是显示等待是针对特定元素,隐式等待是针对所有元素(相当于在 webdriver api 的所有 find 方法里加了等待)。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有