有时候我们需要验证浏览器中是否存在某个 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 页面上元素的操作变得游刃有余。