python-web自动化测试-元素等待

        由于网络等原因,页面的加载速度远远低于代码的执行速度导致元素定位失败。当页面元素定位失败时,在指定时间内一直等待的过程叫做元素等待。元素等待有强制等待、隐式等待、显示等待三种。

一、强制等待

        方法:sleep()

        不管元素是否定位成功,都必须等待指定时长,只有等待时间结束,才可以继续执行后面的代码。示例time.sleep(3)

二、隐式等待

        当第一个元素定位失败,在指定时间内等待成功了就继续执行后面的代码,如果等待时间结束还未成功,就抛出找不到元素的异常NosuchElementException

        方法:driver.implicitly_wait(sec)  单位是秒,一般等待30s

        注意:显式等待对于当前脚本中所有元素全部有效

三、显示等待

        如果等待成功就继续执行,如果时间结束仍未等待成功则抛出异常TimeoutException 超时异常。在WebDriver中把显式等待的相关方法封装在WebDriverWait类中。判断元素是否等待成功的相关方法封装在在expected_conditions类中。

        (1)实例化等待类:WebDriverWait(driver, timeout, poll_frequency=0.5)

                driver:浏览器对象

                timeout:超时的时长,单位:秒

                poll_frequency:检测间隔时间,默认为0.5秒

        (2)判断元素是否定位成功的方法

                until(method)   直到……时候

                method:expected_conditions.presence_of_element_located(element)

                element:By类定位的元素

                        注意:By类定位语句构成的元组整体作为参数

        显式等待只针对当前一个元素有效

         示例:

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.baidu.com")
# 实例化等待类
wait = WebDriverWait(driver, timeout=10, poll_frequency=0.5)
# 显示等待判断搜索框是否存在,如果存在输入搜索内容
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#kw"))).send_keys("lilgaage")
driver.find_element_by_id('su').click()

wait = WebDriverWait(driver, 10.0)


sleep(3)
driver.quit()

四、元素等待小结        

  1. 只有第一次元素定位失败,才会触发显式等待或隐式等待
  2. 方法不同:强制等待就是time.sleep();显式等待封装在WebdriverWait类中,需要导包及对应方法判断元素是否定位成功;隐式等待implicitly_wait()直接通过浏览器对象调用即可。
  3. 作用域不同:强制等待只针对所处的位置起作用,显式等待针对单个元素有效,饮食等待对当前脚本设计的元素全部有效。
  4. 抛出异常不同:强制等待必须等待结束才可以执行,无异常;显式等待失败抛出timeoutExeption;隐式等待失败抛出NoSuchElementException。

猜你喜欢

转载自blog.csdn.net/chengdiyiyo/article/details/121100391