有時候咱們想要驗證瀏覽器中cookie是否正確,由於基於真實cookie的測試是沒法經過白盒和集成測試的。WebDriver提供了操做Cookie的相關方法,能夠讀取、添加和刪除cookie信息。html
WebDriver操做cookie的方法:web
get_cookies():得到全部cookie信息canvas
ge_cookie(name):返回字典的key爲「name」的cookie信息數組
add_cookie(cookie_dict):添加cookie。「cookie_dict」指字典對象,必須有name和value值瀏覽器
delete_cookie(name,optionsString):刪除cookie信息。「name」 是要刪除的cookie的名稱,「optionsString」是該cookie的選項,目前支持的選項包括「路徑」cookie
delete_all_cookies():刪除全部信息網絡
下面經過get_cookies()來換取當前瀏覽器的cookie信息。ide
from selenium import webdriver wd = webdriver.Chrome() wd.get('http://youdao.com') #得到cookie信息 cookies = wd.get_cookies() #將得到cookie的信息打印 print(cookies)
輸出結果:函數
從執行結果能夠看出,cookie數據是以字典的形式進行採訪的。知道了cookie的存放形式,接下來咱們就能夠按照這種形式向瀏覽器中寫入cookie信息。學習
from selenium import webdriver wd = webdriver.Chrome() wd.get('http://youdao.com') #向cookie的name和value中添加會話信息 wd.add_cookie({'name':'xhh','value':'xiaohuihui'}) #遍歷cookies中的name和value信息並打印 for cookie in wd.get_cookies(): print("%s -> %s" % (cookie['name'],cookie['value']))
輸出結果:
從執行結果能夠看到,第四條cookie信息是在腳本執行過程當中經過add_cookie()方法添加的。經過遍歷獲得全部的cookie信息,從而找到key爲「name」和「value」的特定cookie的value。
name在上面狀況下會用到cookie的操做呢?例如開發人員開發一個姑娘,當用戶登陸後,會將用戶的用戶名寫入瀏覽器cookie,指定的key爲「username」,name咱們就能夠經過get_cookies()找到username,打印value。若是找不到username或對應的value爲空,那麼說明cookie沒有成功的保存到瀏覽器中。
delete_cookie()和 delete_all_cookies()的使用也很簡單,前者經過name刪除一個特定的cookie信息,後者直接刪除瀏覽器中全部的cookies()信息。
雖然WebDriver提供了操做瀏覽器的前進和後退方法,但對於瀏覽器滾動條並無提供相應的操做方法。在這種狀況下,就能夠藉助JavaScript來控制瀏覽器的滾動條。WebDriver提供了execute_script()方法來執行JavaScript代碼。
通常咱們想到的必須使用滾動條的場景是:註冊時的法律條文的閱讀。判斷用戶是否閱讀完的標誌是:滾動條是否拉倒頁面底部。固然,有時候爲了使操做更接近用戶行爲也會使用滾動條,例如用戶要操做的元素在頁面的第二屏,通常用戶不會對看不到的元素進行操做,那麼就須要先將滾動條拖動到頁面的第二屏再進行操做。
用於調整瀏覽器滾動條位置的JavaScript代碼以下:
<!-- window.scrollTo(左邊距,上邊距); -->
window.scrollTo(0,500);
window.scrollTo()方法用於設置瀏覽器窗口滾動條的水平和垂直位置。方法的第一個參數表示水平的左間距,第二個參數表示垂直的上邊距。
代碼以下:
from selenium import webdriver from time import sleep wd = webdriver.Chrome() wd.get('http://www.baidu.com') #設置瀏覽器窗口大小 wd.set_window_size(600,600) #搜索 wd.find_element_by_id("kw").send_keys("selenium") wd.find_element_by_id("su").click() sleep(2) #經過JavaScript設置瀏覽器窗口的滾動條位置 js = "window.scrollTo(100,450)" wd.execute_script(js)
經過瀏覽器打開百度進行搜索,而且提早經過set_window_size()方法將瀏覽器窗口設置爲固定寬高顯示,目的是讓窗口出現水平和垂直滾動條。而後經過execute_script()方法執行JavaScript代碼來移動滾動條的位置。
除此以外,咱們還能夠作到讓滑動條動態移動,代碼以下:
from selenium import webdriver from time import sleep wd = webdriver.Chrome() wd.get('https://www.taobao.com/') sd = 0 for i in range(1,50): sd += 100 js = "var q=document.documentElement.scrollTop=%s"%(sd) wd.execute_script(js) sleep(0.5)
作的比較簡單,你們能夠修改下,作的更加完美,只要控制參數就能上下移動。
左右移動就須要調用方法:
scrollLeft:滾動條向右移動
固然JavaScript的做用不單單體如今瀏覽器滾動條的操做上 ,還能夠用它向頁面中的textarea文本框輸入內容。
html代碼:
<textarea id="id" style="width: 98%;" cols="50" rows="5" class="txtarea"> </textarea>
雖然咱們能夠經過id的方式將其定位。但經過send_keys()向文本框中輸入文本信息會出現一些不合理的狀況,例如文本直接居中添加。這種狀況下,就須要藉助JavaScript代碼完成輸入。
from selenium import webdriver from time import sleep wd = webdriver.Chrome() wd.get('http://127.0.0.1:8020/day01/index.html') text = "input text" js = "var sum=document.getElementById('id');sum.value='"+text+"';" wd.execute_script(js)
首先定義了要輸入的內容text,而後將text與JavaScript代碼經過「+」進行拼接。這樣作的目的是爲了使輸入內容變得可自定義。最後,經過execute_script()執行JavaScript代碼。
目前HTML5技術已經成爲主流,目前主流的瀏覽器都已支持HTML5。愈來愈多的應用使用了HTML5元素,如canvas、video等,另外網頁存儲功能更增長了用戶的網絡體驗,使得愈來愈多的開發者在使用這樣的標準,因此咱們也須要學習如何使用自動化技術來測試它們。
WebDriver支持在指定的瀏覽器上測試HTML5,另外,咱們還可使用JavaScript來測試這些功能,這樣就能夠在如何瀏覽器上測試HTML5了。
大多數瀏覽器使用控件(如Flash)來播放視頻,可是不一樣的瀏覽器須要使用不一樣的插件。HTML5定義了一個新的元素<video>,指定了一個標準的方式來嵌入電影片斷,IE9+、Firefox、Opera、Chrome都支持該元素。
案例:
from selenium import webdriver import time from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By wd = webdriver.Chrome() wd.get('https://www.bilibili.com/video/av76611945') video=WebDriverWait(wd,30,0.5).until(EC.presence_of_element_located((By.XPATH,"//div[@id='bilibiliPlayer']/div[1]/div[1]/div[9]/video"))) # 找到視頻 #返回播放文件地址 url = wd.execute_script("return arguments[0].currentSrc;",video) print(url) #播放視頻 print("start") wd.execute_script("return arguments[0].play()",video) time.sleep(15) #暫停視頻 print("stop") wd.execute_script("arguments[0].pause()",video)
JavaScript函數有個內置的對象叫作arguments。argument對象包含了函數調用的參數數組,[0]表示取對象的第一個值。
currentSrc返回當前音頻或視頻的URL。若是未設置音頻或視頻,則返回空字符串。
load()、play()、pause()等控制着視頻的加載、播放和暫停。
這樣咱們就實現了最基本的播放和暫停視頻了,至於視頻加速減速什麼的,就要本身摸索了(由於我也不會,小聲bb)。