Selenium 等待

news/2024/7/8 1:54:55 标签: selenium, 测试工具
'''
环境:
Python 3.8
selenium==3.141.0
urllib3==1.26.19
Chromium 109.0.5405.0 (32 位) 
'''
# 1 固定等待(time)
# 固定待是利用python语言自带的time库中的sleep()方法,固定等待几秒。
# 这种方式会导致这个脚本运行时间过长,不到万不得已尽可能少用。
# (注:脚本调试过程时,还是可以使用的,方便快捷)
# -*- coding: UTF-8 -*-

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
# 设置固定等待
time.sleep(2)
driver.quit()
# 2 隐式等待(implicitly_wait())
# webdriver类提供了implicitly_wait()方法来配置超时时间。
# 隐式等待表示在自动化实施过程中,为查找页面元素或者执行命令设置一个最长等待时间。
# 如果在规定时间内页面元素被找到或者命令被执行完成,则执行下一步,否则继续等待直到设置的最长等待时间截止
# 注:隐式等待的好处是不用像固定等待方法一样死等时间N秒,可以在一定程度上提升测试用例的执行效率。
# 不过这种方法也存在一定的弊端,那就是程序会一直等待整个页面加载完成,
# 也就是说浏览器窗口标签栏中不再出现转动的小圆圈,才会继续执行下一步。
# -*- coding: UTF-8 -*-

from selenium import webdriver

driver = webdriver.Chrome()
# 设置隐式等待
driver.implicitly_wait(30)
driver.get('https://www.baidu.com/')
driver.quit()
# 3 显示等待:WebDriverWait()类
# 显示等待:设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,
# 如果成立那么程序就继续执行,否则就提示一个超时异常(TimeoutException)。
# 通常情况下 WebDriverWait 类会结合 ExpectedCondition 类一起使用。
# 代码 1
# -*- coding: UTF-8 -*-

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
# 最长超时时间设置为10秒,默认步长为0.5秒,默认抛出 NoSuchElementException 异常
element = WebDriverWait(driver, 10, 0.5).until(lambda driver: driver.find_element_by_id("kw"))
element.send_keys("selenium")
driver.quit()
# 代码 2
# -*- coding: UTF-8 -*-

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
# 最长超时时间设置为 10 秒,默认步长为0.5秒,默认抛出 NoSuchElementException 异常
element = WebDriverWait(driver, 10, 0.5).until(lambda driver: driver.find_element(By.ID, 'kw'))
element.send_keys("selenium")
driver.quit()
# -*- coding: UTF-8 -*-

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')

element = WebDriverWait(driver, 10, 0.5).until(expected_conditions.presence_of_element_located((By.ID, "kw")))

'''
id = 'id'
param = (By.ID, id)
element = WebDriverWait(driver, 10, 0.5).until(expected_conditions.presence_of_element_located(param))
'''
element.send_keys('selenium')
driver.quit()
'''
参考:
Python+Selenium自动化-设置等待三种等待方法
https://www.cnblogs.com/xiao-xue-di/p/11531917.html

Selenium使用之——添加等待时间的三种方式
https://blog.csdn.net/qq_28284093/article/details/80117206

Selenium 三种等待方式详解 (强制等待、隐式等待、显示等待)
https://www.cnblogs.com/hls-code/p/16051659.html

selenium WebDriverWait类等待机制的实现
https://cloud.tencent.com/developer/article/1736313

selenium.webdriver.support.ui 和selenium.webdriver.support.wait的区别
https://blog.csdn.net/Charley_Leo/article/details/108546433
'''

http://www.niftyadmin.cn/n/5537181.html

相关文章

nginx配置stream代理

项目中遇到某些服务在内网,需要外网访问的情况,需要配置代理访问。可用nginx搭建代理服务。 TCP代理 通过nginx的stream模块可以直接代理TCP服务,步骤如下: 在/etc/nginx/下新建proxy文件夹,用于存放代理配置。此处…

代码技巧专题 -- 使用策略模式编写HandleService

一.前言 最近项目有实习的同事加入,很多实习同事反映,看不懂项目中的一些使用了设计模式的代码,比如HandleService,Chains,Listener等。本篇就介绍一下策略模式在项目中的使用,也就是我们常在项目中看到的X…

【python】使用conda管理python项目:conda管理不同项目环境,pip下载最新的包

文章目录 一. python包管理概述1. miniforge、Miniconda与Anaconda2. conda与pip的区别是什么?3. pip与conda配合使用 二. 使用conda管理不同py环境1. 创建一个环境2. 解决冲突 三. 命令合集1. conda1.1. 常用1.2. 环境管理1.3. conda分享环境与pip生成requirements…

基于单片机技术的按键扫描电路分析

摘 要: 单片机应用技术被广泛应用于各种智能控制系统中,是电子信息类专业学生必修的一门专业课。在单片机端口信息输入模块中,按键是主要元器件之一,笔者主要介绍矩阵键盘的电路设计及控制程序编写,分析了单片机端口连…

Static关键字的用法详解

Static关键字的用法详解 1、Static修饰内部类2、Static修饰方法3、Static修饰变量4、Static修饰代码块5、总结 💖The Begin💖点点关注,收藏不迷路💖 在Java编程语言中,static是一个关键字,它可以用于多种上…

智慧生活新篇章,Vatee万腾平台领航前行

在21世纪的科技浪潮中,智慧生活已不再是一个遥远的梦想,而是正逐步成为我们日常生活的现实。从智能家居的温馨便捷,到智慧城市的高效运转,科技的每一次进步都在为我们的生活增添新的色彩。而在这场智慧生活的变革中,Va…

转型AI产品经理前需要搞懂的9个问题

笔者近10年来一直工作于AI领域技术和产品一线,今天分享9个大家普遍关注却少有人系统回答的问题。 1.下一个10年,AI产业在国内的发展和职业发展的机遇如何? 从四方面看: (1)技术角度:逐步成熟…

Spring源码十:BeanPostProcess

上一篇Spring源码九:BeanFactoryPostProcessor,我们看到ApplicationContext容器通过refresh方法中的postProcessBeanFactory方法和BeanFactoryPostProcessor类提供预留扩展点,他可以在Spring容器的层面对BeanFactroy或其他属性进行修改&#…