ui自动化中,隐式等待和显示等待什么时候使用

隐式等待

在页面刷新加载时,页面元素还没有出来,这个时候如果去找元素就会找不到报错

或者点了一个菜单,页面加载时

用笨办法,就是用sleep等待固定的时间,这种浪费的时间比较多,就可以用隐式等待,只等待页面加载完,就不等待了,效率会提高一些

python 复制代码
from selenium import webdriver
import time


# 创建浏览器驱动对象
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()            # 参数写浏览器驱动文件的路径,若配置到环境变量就不用写了
# 访问网址
driver.get("http://42.192.62.186:8088/index.html#/")
driver.maximize_window()
# 账号密码
driver.find_element(By.CSS_SELECTOR, '#username').send_keys('sq3')
driver.find_element(By.CSS_SELECTOR, '#password').send_keys('123')
driver.find_element(By.CSS_SELECTOR, '#code').send_keys('999999')

driver.find_element(By.CSS_SELECTOR,"#submitButton").click()
time.sleep(1)
driver.refresh()

"""隐式等待, 就不需要下面两个强制等待了"""
driver.implicitly_wait(30)
# time.sleep(1)       # 刷新頁面有延迟
driver.find_element(By.XPATH,'//*[contains(text(),"文件上传")]').click()
time.sleep(1)
driver.find_element(By.XPATH,'//*[contains(text(),"单文件上传")]').click()
# time.sleep(1)       # 渲染页面有延时
ele= driver.find_element(By.CSS_SELECTOR, '#cover')

显示等待

复制代码
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

可以用这个等待类,来进行针对性的等待

表示,我只针对要等的元素,进行等待, 而不是像隐式等待那样,等待页面全部

如下:是对二级菜单元素的等待

python 复制代码
from selenium import webdriver
import time


# 创建浏览器驱动对象
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()            # 参数写浏览器驱动文件的路径,若配置到环境变量就不用写了
# 访问网址
driver.get("http://42.192.62.186:8088/index.html#/")
driver.maximize_window()
# 账号密码
driver.find_element(By.CSS_SELECTOR, '#username').send_keys('sq3')
driver.find_element(By.CSS_SELECTOR, '#password').send_keys('123')
driver.find_element(By.CSS_SELECTOR, '#code').send_keys('999999')

driver.find_element(By.CSS_SELECTOR,"#submitButton").click()
time.sleep(1)
driver.refresh()


# driver.implicitly_wait(30)
time.sleep(1)       # 刷新頁面有延迟
driver.find_element(By.XPATH,'//*[contains(text(),"文件上传")]').click()


from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# time.sleep(1)


"""
我们等待最多10秒,直到页面上出现XPATH为"xxxx"的元素
如果在10秒内找到了该元素,就会继续操作

"""
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH,'//*[contains(text(),"单文件上传")]'))
)


element.click()
  • presence_of_element_located 判断某元素是否被加到DOM树,不一定可见 (上面代码用到的)
  • visibility_of_element_located 判断某元素是否可见

使用场景,当某个一个元素加载特别缓慢,可以对它进行显示等待

相关推荐
Dovis(誓平步青云)3 分钟前
《Linux CPU频率为何忽高忽低:cpufreq、idle状态与性能抖动教程》
linux·运维·服务器·spring boot·后端·生成对抗网络
小此方22 分钟前
Re:Linux系统篇(四十三)信号篇·一:谁在敲进程的门?一篇带你了解信号概念与产生机制
linux·运维·驱动开发
Championship.23.247 小时前
Linux 3.0 锁机制与故障排查详解
linux·运维·服务器
风123456789~9 小时前
【Linux专栏】ls 排除某个文件
linux·运维·服务器
其实防守也摸鱼10 小时前
运维--学习阶段问题解答(1)(自测)
linux·运维·服务器·数据库·学习·自动化·命令模式
GJGCY11 小时前
财务智能体落地实践:RPA、大模型与规则引擎如何构建业财自动化闭环?
经验分享·ai·自动化·财务·智能体
Darkwanderor12 小时前
对Linux的进程控制的研究
linux·运维·c++
爱网络爱Linux15 小时前
Linux proc 目录安全加固
linux·运维·rhce·rhca·红帽认证·proc 目录安全加固
MindUp15 小时前
企业网盘权限模型解析:多层级访问控制与审计能力选型指南
java·linux·运维
持力行15 小时前
D-BUS会话总线
运维·网络