WebDriverWait 、ActionChains、警告框、下拉菜单、JS隐藏元素(笔记)

本文深入探讨Selenium WebDriver的高级使用技巧,包括等待策略、鼠标悬停、警告框处理、下拉菜单选择、JS操作滚动条及隐藏元素。掌握这些技巧,可显著提升自动化测试脚本的稳定性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)

 

这里需要特别注意的是until或until_not中的可执行方法method参数,很多人传入了WebElement对象,如下:

?

1

WebDriverWait(driver, 10).until(driver.find_element_by_id('kw')) # 错误

这是错误的用法,这里的参数一定要是可以调用的,即这个对象一定有 __call__() 方法,否则会抛出异常:

?

1

TypeError: 'xxx' object is not callable

在这里,你可以用selenium提供的 expected_conditions 模块中的各种条件,也可以用WebElement的 is_displayed() 、is_enabled()、is_selected() 方法,或者用自己封装的方法都可以,那么接下来我们看一下selenium提供的条件有哪些:

expected_conditions

expected_conditions是selenium的一个模块,其中包含一系列可用于判断的条件:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

selenium.webdriver.support.expected_conditions(模块)

这两个条件类验证title,验证传入的参数title是否等于或包含于driver.title

title_is

title_contains

这两个人条件验证元素是否出现,传入的参数都是元组类型的locator,如(By.ID, 'kw')

顾名思义,一个只要一个符合条件的元素加载出来就通过;另一个必须所有符合条件的元素都加载出来才行

presence_of_element_located

presence_of_all_elements_located

这三个条件验证元素是否可见,前两个传入参数是元组类型的locator,第三个传入WebElement

第一个和第三个其实质是一样的

visibility_of_element_located

invisibility_of_element_located

visibility_of

这两个人条件判断某段文本是否出现在某元素中,一个判断元素的text,一个判断元素的value

text_to_be_present_in_element

text_to_be_present_in_element_value

这个条件判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement

frame_to_be_available_and_switch_to_it

这个条件判断是否有alert出现

alert_is_present

这个条件判断元素是否可点击,传入locator

element_to_be_clickable

这四个条件判断元素是否被选中,第一个条件传入WebElement对象,第二个传入locator元组

第三个传入WebElement对象以及状态,相等返回True,否则返回False

第四个传入locator以及状态,相等返回True,否则返回False

element_to_be_selected

element_located_to_be_selected

element_selection_state_to_be

element_located_selection_state_to_be

最后一个条件判断一个元素是否仍在DOM中,传入WebElement对象,可以判断页面是否刷新了

staleness_of

上面是所有17个condition,与until、until_not组合能够实现很多判断,如果能自己灵活封装,将会大大提高脚本的稳定性。

 

2、selenium鼠标悬停类-- ActionChains()

导包:from selenium.webdriver.common.action_chainsimport ActionChains

elem1= dr.find_element(By.LINK_TEXT,"设置")

ActionChains(dr).move_to_element(elem1).perform()

 

3、selenium警告框的处理

很多web应用经常会遇到JavaScript编写的alert 、confirm 以及prompt 弹窗,需要用到switch_to.alert来切换弹窗,并对弹窗进行输入信息,关闭等处理。

switch_to.alert.text  --获取弹窗文本信息

switch_to.alert.accept()  --点击弹窗中确定按钮

switch_to.alert.dismiss()  --点击弹出中取消按钮

switch_to.alert.sendKeys("字符串")  --在弹窗中输入信息


4、下拉菜单选择的三种方式

导包:from selenium.webdriver.support.uiimport Select

#选择下拉框的o2

elem1 = dr.find_element(By.ID,"s3Id")

(1):根据value值定位

Select(elem1).select_by_value("o2val")

(2).根据index定位

Select(elem1).select_by_index(1)

(3).根据下拉框文本信息定位

Select(elem1).select_by_visible_text("o2")

 

5、selenium之JS操作浏览器滚动条位置

driver.maximize_window()

execute_script("window.scrollTo(0,n);")     #n即坐标位置

 

6、selenium之JS操作隐藏元素

隐藏元素的标识:style="display:none;"

一般我们通过将隐藏元素的属性修改成显示再定位

 

#修改隐藏元素属性为显示

elem = 'document.getElementById("id").style.display="block";'

driver.execute_script(elem)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值