webUI自动化学习day1

本文讲述了在开发web应用时遇到的因元素延迟加载引发的问题,介绍了Selenium的显式等待和隐式等待机制,以及如何使用WebDriverWait和expected_conditions进行有效元素定位,以提高代码执行效率。
摘要由CSDN通过智能技术生成

2024.02.25

设置元素等待

大多数web应用都是ajax和JavaScript开发的,当我们加载页面的时候,一些元素是需要时间,就有可能发生代码执行到了,而元素没有被加载出来,此时就会出现找不到元素的情况

此问题的解决方案就是在元素定位之前进行等待,等到元素出现

强制等待time.sleep(),容易浪费时间,代码执行效率太低,因此webdriver为我们提供了两种等待类型,一种是隐式等待,一种是显式等待

1、显式等待

使webdriver等待某个条件的成立,当条件成立时,继续执行;若条件不成立,则每隔一段时间(默认是0.5s)检查一次,直到达到最大超时时间,还不成立,就抛出超时异常(TimeoutException);若等到元素,就不会再等了;

显式等待,是对具体的元素操作声明,若想使用显式等待,则必须对元素定位进行修改

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

ele = WebDriverWait(driver,5,0.5).util(
    #检查元素是否在界面上被加载出来
    EC.visibility_of_element_located(
        (By.CSS_SELECTOR,"css定位表达式")
    )
)
ele.click()

将显示等待封装成函数:

def waitEle(driver,timeout,poll_frequency,findType,findpath):
    """
    :param driver: 
    :param timeout:等待时间 
    :param poll_frequency:轮询时间,默认是0.5s 
    :param findType: 元素定位方式
    :param findpath: 元素定位表达式
    :return: 
    """
    ele = WebDriverWait(driver,timeout,poll_frequency).util(
        #检查元素是否在界面上被加载出来
        EC.visibility_of_element_located(
            (findType,findpath)
        )
    )
    return ele

2、隐式等待

声明隐式等待,只对声明之后的代码有效

隐式等待默认参数是秒,如下代码,最大超时时间为5秒;当脚本执行到某个元素定位的时候,能定位就继续执行;如果不能定位,以轮询的方式()不断地判断元素是否能被定位(假设在第x秒定位到元素了门就不等了,继续往下执行),若直到最大时长还没定位成功,就抛出异常

#声明隐式等待
driver.implicitly_wait(5)

隐式等待简单,为什么还会有显示等待?

像点击微博热搜后,打印第一行,需要等一下,成功后其他行就没必要再等了,如果用隐式等待,每一行都需要等,比较浪费时间

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值