在實際的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()資訊。