显示等待

显示等待优点:显示等待、若等待到了元素,就不会在进行等待,继续往下执行。若最大超时时间找不到元素,就进行报错。

       若想使用显示等待,则必须对元素定位进行修改,也就是说,显示等待必须对具体的某个元素定位,去主动声明。 

from selenium import webdriver
from selenium.webdriver.common.by import By  # 设置元素定位使用哪种方法的
from selenium.webdriver.support.ui import WebDriverWait  # 元素等待类
from selenium.webdriver.support import expected_conditions as EC  # 提供条件判断函数

# 显示等待,若等到元素,就不会再等了
# 若想使用显示等待,则必须对元素定位进行修改
# 也就是说,显示等待必须对具体的某个元素定位,去主动声明
# 每隔 0.5s 检查一次元素是否存在,最多等待 5 s
# 若在最大超时时间内,找到元素,就不等了,继续往下执行
# 若最大超时时间还找不到元素,就报错
ele = WebDriverWait(driver, 5, 0.5).until(
    EC.visibility_of_element_located(
        (By.CSS_SELECTOR,
         "#app > div:nth-child(1) > div:nth-child(1) > div.card.m-panel.card16.m-col-2 > div > div > div:nth-child(8) > div > div > h4")
    )
)
返回一个元素。

#1.WebDriverWait(driver, 5, 0.5) 返回一个等待类的对象。请求参数:driver,最大超时时间,每多长时间去找一次元素。单位都是:秒
#2.调用until方法,请求参数为:expected_conditions里面的visibility_of_element_located类对象。对象里面的初始化参数:      (By.CSS_SELECTOR,
         "#app > div:nth-child(1) > div:nth-child(1) > div.card.m-panel.card16.m-col-2 > div > div > div:nth-child(8) > div > div > h4")
    )
定位元素的方法,定位的元素。

2.封装一个方法

# 将显示等待封装成了函数
def waitEle(driver, timeout, poll_frequency, findType, findStr):
    '''

    :param driver: 浏览器driver
    :param timeout: 超时时间
    :param poll_frequency: 多长时间轮询定位一次
    :param findType: 定位的方式
    :param findStr:  定位的元素
    :return:
    '''
    ele = WebDriverWait(driver, timeout, poll_frequency).until(
        EC.visibility_of_element_located(
            (findType, findStr)
        )
    )

    return ele

 3.进一步优化:传入locator

 

posted @ 2020-12-17 10:31  西西cc  阅读(691)  评论(0编辑  收藏  举报