Selenium 具体操作

本文介绍了如何使用WebDriver操作浏览器的Cookie,包括读取、添加和删除Cookie等基本操作,并展示了如何利用这些功能进行测试。此外,还讲解了WebDriver中的其他高级功能,如休眠、多表单切换、警告框及下拉选项窗处理。

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

有时候我们需要验证浏览器中是否存在某个 cookie,因为基于真实的 cookie 的测试是无法通过白盒和 集成测试完成的。WebDriver 提供了操作 Cookie 的相关方法可以读取、添加和删除 cookie 信息。

webdriver 操作 cookie 的方法有:
1.get_cookies() 获得所有 cookie 信息
2.get_cookie(name) 返回有特定 name 值有 cookie 信息
3.add_cookie(cookie_dict) 添加 cookie,必须有 name 和 value 值
4.delete_cookie(name) 删除特定(部分)的 cookie 信息
5.delete_all_cookies() 删除所有 cookie 信息

通过 get_cookies()来获取当前浏览器的 cookie 信息。

#coding=utf-8
from selenium import webdriver import time

driver = webdriver.Firefox() 
driver.get("http://www.youdao.com")

# 获得cookie信息 
cookie= driver.get_cookies()

#将获得cookie的信息打印 
print cookie
driver.quit()

通过 add_cookies()来向浏览器中写入 cookie 信息。

#coding=utf-8 
from selenium import webdriver import time
driver = webdriver.Firefox() 
driver.get("http://www.youdao.com")

#向cookie的name 和value添加会话信息。 
driver.add_cookie({'name':'key-aaaaaaa', 'value':'value-bbbbbb'})

#遍历cookies中的name 和value信息打印,当然还有上面添加的信息 
for cookie in driver.get_cookies(): 
    print "%s -> %s" % (cookie['name'], cookie['value'])
driver.quit()

从打印结果可以看到最后一条 cookie 信息是在脚本执行过程中通过 add_cookie()方法添加的。通过遍 历得到的所 cookie 信息从而找到 key 为“name”和“value”的特定 cookie 的 value。
那么在什么情况下会用到 cookie 的操作呢?例如开发人员开发一个功能,当用户登录后,会将用户的 用户名写入浏览器 cookie,指定的 key 为“username”,那么我们就可以通过 get_cookies() 找到 useranme, 打印 vlaue,如果找不到 username 或对应的 value 为空,那么说明保存浏览器的 cookie 是有问题的。
delete_cookie() 和 delete_all_cookies() 的使用也很简单,前者通过 name 值到一个特定的 cookie 将其 删除,后者直接删除浏览器中的所有 cookies()信息。


休眠

有时间我们希望脚本执行到某一位置时做固定时间的休眠,尤其是在脚本调试的过程中。那么可以使用 sleep()方法,需要说明的是 sleep()由 Python 的 time 模块提供。

#coding=utf-8 
from selenium import webdriver from time import sleep

driver = webdriver.Firefox() 
driver.get("http://www.baidu.com")

sleep(2) 
driver.find_element_by_id("kw").send_keys("webdriver") driver.find_element_by_id("su").click() 
sleep(3)

driver.quit()

当执行到 sleep()方法时会固定的休眠所设置的时长,然后再继续执行。sleep()方法默认参数以秒为单 位,如果设置时长小于 1 秒,可以用小数点表示,如:sleep(0.5)


多表单切换

在 web 应用中经常会遇到 frame 嵌套页面的应用,页 WebDriver 每次只能在一个页面上识别元素,对 于 frame 嵌套内的页面上的元素,直接定位是定位是定位不到的。这个时候就需要通过 switch_to_frame() 方法将当前定位的主体切换了 frame 里

<body> 
<div class="row-fluid"> 
    <div class="span10 well"> 
        <h3>frame</h3> 
        <iframe id="if" name="nf" src="http://www.baidu.com" width="800" height="300">
        </iframe>
        </div>
    </div>
</body> 

这个时候直接定位id=if一定会报找不到元素的错误。那么可以使用 switch_to_frame()先找frame.html 中的< iframe >标签,然后再定位id=if

#coding=utf-8 
from selenium import webdriver 
import time import os
driver = webdriver.Firefox() 
file_path = 'file:///' + os.path.abspath('frame.html') driver.get(file_path)

#切换到iframe(id = "if") 
driver.switch_to_frame("if")
#下面就可以正常的操作元素了 driver.find_element_by_id("kw").send_keys("selenium") driver.find_element_by_id("su").click() 
time.sleep(3)
driver.quit()

那么如果 iframe 没有可用的 id 和 name 可以通过下面的方式进行定位:

#先通过xpth定位到iframe 
xf = driver.find_element_by_xpath('//*[@class="if"]')
#再将定位对象传给switch_to_frame()方法 
driver.switch_to_frame(xf) 
…… 
driver.switch_to_default_content()

如果完成了在当前表单上的操作可以通过 switch_to_default_content()方法返回到上一层表单。该方法不用指定某个表单的返回,默认对应与它最近的 switch_to_frame()方法。


警告框处理

在 WebDriver 中处理 JavaScript 所生成的 alert、confirm 以及 prompt 是很简单的。具体做法是使用 switch_to_alert()方法定位到 alert/confirm/prompt。然后使用 text/accept/dismiss/send_keys 按需进行操做。
text     返回 alert/confirm/prompt 中的文字信息。
accept   点击确认按钮。
dismiss   点击取消按钮,如果有的话。
send_keys  输入值,这个 alert\confirm 没有对话框就不能用了,不然会报错。
这里写图片描述

#coding=utf-8 
from selenium import webdriver 
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Firefox() driver.implicitly_wait(10) driver.get('http://www.baidu.com')
#鼠标悬停相“设置”链接 
link = driver.find_element_by_link_text(u'设置') ActionChains(driver).move_to_element(link).perform()

#打开搜索设置
driver.find_element_by_class_name('setpref').cick()
#保存设置 driver.find_element_by_css_selector('#gxszButton > a.prefpanelgo').click()

#接收弹窗 
driver.switch_to_alert().accept()
driver.quit()

下拉选项窗处理

这里写图片描述

#定位选项窗口
m = browser.find_element_by_xpath('//*[@id="questType"]')
#定位到选项,点击
m.find_element_by_xpath('//[@id="questType"]/option[3]').click()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值