有时候我们需要验证浏览器中是否存在某个 cookie,因为基于真实的 cookie 的测试是无法通过白盒和
集成测试完成的。WebDriver 提供了操作 Cookie 的相关方法可以读取、添加和删除 cookie 信息。
webdriver 操作 cookie 的方法有:
get_cookies() 获得所有 cookie 信息
get_cookie(name) 返回有特定 name 值有 cookie 信息
add_cookie(cookie_dict) 添加 cookie,必须有 name 和 value 值
delete_cookie(name) 删除特定(部分)的 cookie 信息
delete_all_cookies() 删除所有 cookie 信息
下面通过 get_cookies()来获取当前浏览器的 cookie 信息。
cookie.py
#coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Chrome()
# 获得 cookie 信息
cookie= driver.get_cookies()
#将获得 cookie 的信息打印
print cookie
driver.quit()
执行结果:
>>> ================================ RESTART ================================
>>>
[{u'domain': u'.youdao.com',
u'secure': False,
u'value': u'aGFzbG9nZ2VkPXRydWU=',
u'expiry': 1408430390.991375,
u'path': u'/',
u'name': u'_PREF_ANONYUSER__MYTH'},
{u'domain': u'.youdao.com',
u'secure': False,
u'value': u'1777851312@218.17.158.115',
u'expiry': 2322974390.991376,
u'path': u'/', u'name':
u'OUTFOX_SEARCH_USER_ID'},
{u'path': u'/',
u'domain': u'www.youdao.com',
u'name': u'JSESSIONID',
u'value': u'abcUX9zdw0minadIhtvcu',
u'secure': False}]
通过打印结果可以看出,cookie 是以字典的形式进行存放的,知道了 cookie 的存放形式,那么我们就
可以按照这种形式向浏览器中写入 cookie 信息。
cookie.py
#coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Firefox()
#向 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()
执行结果:
>>> ================================ RESTART ================================
>>>
YOUDAO_MOBILE_ACCESS_TYPE -> 1
_PREF_ANONYUSER__MYTH -> aGFzbG9nZ2VkPXRydWU=
OUTFOX_SEARCH_USER_ID -> -1046383847@218.17.158.115
JSESSIONID -> abc7qSE_SBGsVgnVLBvcu
key-aaaaaaa -> value-bbbbbb
从打印结果可以看到最后一条 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()信息。
调用 JavaScript
WebDiver 不能操作本地 Windows 控件,但对于浏览器上的控件也不是都可以操作的。比哪浏览器上
的滚动条,虽然 WebDriver 提供操作浏览器的前进和后退按钮,但对于滚动条并没有提供相应用的方法。
那么在这种情况下就可以借助 JavaScript 方法来控制浏览器滚动条。WebDriver 提供了 execute_script()方法
来执行 JavaScript 代码。
一般用到操作滚动条的会两个场景:
注册时的法律条文的阅读,判断用户是否阅读完成的标准是:滚动条是否拉到最下方。
要操作的页面元素不在视觉范围,无法进行操作,需要拖动滚动条。
用于标识滚动条位置的代码
……
<body onload= "document.body.scrollTop=0 ">
<body onload= "document.body.scrollTop=100000 ">
……
document.body.scrollTop
网页被卷去的高。scrollTop 设置或获取滚动条与最顶端之间的距离。如果想让滚动条处于顶部,那么
可以设置 scrollTop 的值为 0,如果想让滚动条处于最底端,可以将这个值设置的足够大,大个窗口的高度
即可。scrollTop 的值以像素为单位。
html
#coding=utf-8
from selenium import webdriver
import time
#访问百度
driver=webdriver.Firefox()
#搜索
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(3)
#将页面滚动条拖到底部
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
time.sleep(3)
#将滚动条移动到页面的顶部
js_="var q=document.documentElement.scrollTop=0"
driver.execute_script(js_)
time.sleep(3)
driver.quit()
通过浏览器打开百度进行搜索,搜索的一屏无法完全显示将会出现滚动条。这个时候就可以通过
JavaScript 代码控制滚动条在任意位置,需要改变的就是 scrollTop 的值。通过 execute_script()方法来执行
这段 JavaScript 代码。
当然,JavaScript 的作用不仅于此,它同样可操作页面上的元素或让,或让这个元素隐藏。学习和使
用 JavaScript 不仅可以让你对前端技术有更深的认识,还可以让你对 web 页面上元素的操作变得游刃有余。