Python+selenium 【第五章】UI自动化元素等待

  

元素等待操作

为了保证脚本的稳定性,有时候需要引入等待时间,等待页面加载元素后再进行操作,selenium提供三种等待时间设置方式。

sleep

sleep():固定休眠时间设置,python的time包里提供了休眠方法sleep,导入包后就能使用;

sleep()方法以秒为单位,如果超时设置小于1秒,可以使用小数importtimetime.sleep(0.5)

implicitlyWait

implicitlyWait()方法比sleep()方法智能,sleep()方法只能在一个固定的时间等待,而implicitlyWait()可以在一个时间范围内等待,称为隐式等待

driver.implicitly_wait(100)

element=driver.find_element_by_css_selector(“div.red_box”)

备注:设置等待时间100s,页面上的元素5s后出现,只等待5s。不会等待100秒

WebDriverWait

显示等待,语法格式如下:

WebDriverWait(driver,timeout,poll_frequency=0.5,ignore_exceptions=None)

driver:WebDriver的驱动程序(IE,火狐,谷歌或远程)

timeout:最长超时时间,默认以秒为单位

poll_frequency:休眠时间的间隔(步长)时间,默认为0.5秒(即每500毫秒扫描一次页面)

ignore_exceptions:超时后的异常信息,默认情况下抛 NoSuchElementException异常

扩展知识:高亮元素

def highLightElement(driver, element):
  # 封装好的高亮显示页面元素的方法
  # 使用JavaScript代码将传入的页面元素对象的背景颜色和边框颜色分别
  # 设置为绿色和红色
  driver.execute_script("arguments[0].setAttribute('style',arguments[1]);",
  element, "background:green ;border:2px solid red;")

示例代码

# -*- coding: utf-8 -*-
# @Time : 2021/12/22 17:41
# @Author : Limusen
# @File : demo_ui_wait

import os
import time
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

STYLE = "background: blue; border: 2px solid red;" # 高亮的样式


def highLightElement(driver, element):
# 封装好的高亮显示页面元素的方法
# 使用JavaScript代码将传入的页面元素对象的背景颜色和边框颜色分别
# 设置为绿色和红色
driver.execute_script("arguments[0].setAttribute('style',arguments[1]);",
element, "background:green ;border:2px solid red;")


# 1.扩展知识:元素高亮
driver = webdriver.Chrome()
driver.get(os.path.join(os.path.dirname(os.path.abspath(__file__)),'..','file','Wait.html'))# 在代码文件中

# https://gitee.com/todayisgoodday/PythonSelenium

# 2.不加任何等待,直接报错

# driver.find_element(By.ID,'b').click()
# el = driver.find_element(By.CSS_SELECTOR, 'div.red_box')
# highLightElement(driver, el)

# 3.sleep():固定休眠时间设置 固定等待7s

# driver.find_element(By.ID,'b').click()
# time.sleep(7)
# el = driver.find_element(By.CSS_SELECTOR, 'div.red_box')
# highLightElement(driver, el)

# 4.implicitlyWait():隐式等待, 加隐式等待10秒

# driver.implicitly_wait(10) # 只需要设置一次,整个代码都生效
# driver.find_element(By.ID, 'b').click()
# el = driver.find_element(By.CSS_SELECTOR, 'div.red_box')
# highLightElement(driver, el)

# 5.WebDriverWait():显示等待,加显示10s
driver.find_element(By.ID, 'b').click()
element = WebDriverWait(driver, 5).until(lambda x: x.find_element_by_css_selector('div.red_box'))

highLightElement(driver, element)

time.sleep(2)

driver.quit()

总结

本章节主要讲述了等待的具体用法,下一章节我们将学习层级定位/父子级元素定位/切换iframe框架等操作

代码地址

https://gitee.com/todayisgoodday/PythonSelenium

CSDN地址

https://blog.csdn.net/weixin_42382016/category_11566096.html

原文地址:https://www.cnblogs.com/yushengaqingzhijiao/p/15720548.html