天天看点

selenium操作cookie

在实际的web应用中,可能会涉及到cookie测试,验证浏览器中的cookie是否正确.。Cookies 验证:如果系统使用了cookie,测试人员需要对它们进行检测。如果在 cookies 中保存了注册信息,请确认该 cookie能够正常工作而且已对这些信息已经加密。如果使用 cookie 来统计次数,需要验证次数累计正确。关于cookie的使用可以参考浏览器的帮助信息。(cookie 数据是以以字典的形式进行存放的)有时候我们需要验证浏览器中是否存在某个cookie,因为基于真实的cookie 的测试是无法通过白盒和集成测试完成的。如果使用B/S结构cookies,WebDriver 提供了操作Cookie 的相关方法可以读取、添加和删除cookie 信息。

webdriver 操作cookie 的方法有:

(1)getCookies() 获得所有cookie 信息。

(2)getCookieNamed(String name) 返回字典的key 为“name”的cookie 信息。

(3) addCookie(cookie dict) 添加cookie。“cookie_dict”指字典对象,必须有name 和value 值。

(4)deleteCookieNamed(String name) 删除cookie 信息。“name”是要删除的cookie 的名称;

(5)“optionsString”是该cookie 的选项,目前支持的选项包括“路径”,“域”。

(6) deleteAllCookies() 删除所有cookie 信息。

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.youdao.com")
# 获得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'[email protected]',

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 信息。

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()
           

执行结果:

>>> ================================ RESTART ================================

>>>

YOUDAO_MOBILE_ACCESS_TYPE -> 1

_PREF_ANONYUSER__MYTH -> aGFzbG9nZ2VkPXRydWU=

OUTFOX_SEARCH_USER_ID -> [email protected]

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()信息。

增加/删除cookie 

public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "D:/chromedriver_win32/chromedriver.exe");
        ChromeOptions Options = new ChromeOptions();
        Options.addArguments("user-data-dir=C:\\Users\\happy\\AppData\\Local\\Google\\Chrome\\User Data");
        WebDriver driver = new ChromeDriver(Options);
        driver.manage().window().maximize();
        // 窗口最大化
        driver.get("https://www.baidu.com/");
        //添加cookie
        Cookie c1 = new Cookie("name", "key-aaaaaaa");
        Cookie c2 = new Cookie("value", "value-bbbbbb");
        driver.manage().addCookie(c1);
        driver.manage().addCookie(c2);
        // 获得cookie
        Set<Cookie> coo = driver.manage().getCookies();
        System.out.println(coo);
        //删除所有的cookie
        // driver.manage().deleteAllCookies();
        driver.close();
        driver.quit();
    }
           

那么在什么情况下会用到cookie 的操作呢?例如开发人员开发一个功能,当用户登录后,会将用户的用户名写入浏览器cookie,指定的key 为“username”,那么我们就可以通过getCookies() 找到useranme,打印vlaue。

如果找不到username 或对应的value 为空,那么说明cookie 没有成功的保存到浏览器中。deleteCookie() 和deleteAllCookies() 的使用也很简单,前者通过name 删除一个特定的cookie 信息,后者直接删除浏览器中的所有cookies()信息。 

继续阅读