目錄css
Selenium的配置python
Selenium的調用git
Selenium的使用github
定位web
定位元素的使用chrome
定位下拉標籤元素 api
在iframe框架之間切換 瀏覽器
上傳文件框架
Selenium(瀏覽器自動化測試框架) 是一個用於Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操做同樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Firefox,Safari,Google Chrome,Opera等。這個工具的主要功能包括:測試瀏覽器的兼容性——測試你的應用程序看是否可以很好得工做在不一樣瀏覽器和操做系統之上。測試系統功能——建立迴歸測試檢驗軟件功能和用戶需求。支持自動錄製動做和自動生成 .Net、Java、Perl等不一樣語言的測試腳本。
一、安裝 Selenium模塊: pip install Selenium
二、下載瀏覽器驅動,Selenium3.x調用瀏覽器必須有一個webdriver驅動文件
下載以後,解壓到任意目錄(路徑不要有中文)。
from selenium import webdriver ## 若是是chrome瀏覽器的驅動 driver=webdriver.Chrome("G:\Anaconda3-5.3.0\chromedriver.exe") ##若是是firefox瀏覽器的驅動 driver=webdriver.Firefox(executable_path="G:\Anaconda3-5.3.0\geckodriver.exe") ######若是瀏覽器驅動的目錄加入了環境變量的話 ## 若是是chrome瀏覽器的驅動 driver=webdriver.Chrome() ##若是是firefox瀏覽器的驅動 driver=webdriver.Firefox()
Selenium提供了8種定位方式
定位一個元素 | 定位多個元素 | 含義 |
---|---|---|
find_element_by_id | find_elements_by_id | 經過元素id定位 |
find_element_by_name | find_elements_by_name | 經過元素name定位 |
find_element_by_class_name | find_elements_by_class_name | 經過classname進行定位 |
find_element_by_tag_name | find_elements_by_tag_name | 經過標籤訂位 |
find_element_by_link_text | find_elements_by_link_tex | 經過完整超連接定位 |
find_element_by_partial_link_text | find_elements_by_partial_link_text | 經過部分連接定位 |
find_elements_by_css_selector | find_elements_by_css_selector | 經過css選擇器進行定位 |
find_element_by_xpath | find_elements_by_xpath | 經過xpath表達式定位 |
例如:
<html> <body> <form id="loginForm"> <input name="username" type="text" classname="xie" id="key"/> <input name="password" type="password" 型號 /> <input name="continue" type="submit" value="Login" /> <input name="continue" type="button" value="Clear" /> </form> <a href="http://www.baidu.com">百度一下</a> </body> </html>
經過id進行定位第一個input框: find_element_by_id("key")
經過name進行定位第一個input框:find_element_by_name("username")
經過classname進行定位第一個input框:find_element_by_class_name("xie")
經過標籤tag進行定位input框:find_element_by_tag_name("input") //這裏input太多了,用input標籤訂位會出錯
經過完整超連接定位a標籤: find_element_by_link_text("百度一下")
用xpath進行定位:
用絕對路徑進行定位,input[1]表明form下面的第一個input標籤,從1開始, input=input[1] driver.find_elemant_by_xpath("//html/body/form/input[1]") 用相對路徑進行定位,form標籤下的第一個input標籤,[1]省略了 driver.find_element_by_xpath("//form/input") 用相對路徑和屬性進行定位,form標籤下的input標籤的name值等於username的標籤 driver.find_element_by_xpath("//form/input[@name='username']") 其餘的屬性值若是太長,也能夠採起模糊方法定位 例如頁面中有這麼一個標籤 <a href="http://www.baidu.com?name=admin&passwd=pass&action=login">百度一下</a> 則能夠這麼使用 driver.find_element_by_xpath("//a[contains(@href,'login')]")
以上是普通的狀況,存在能夠定位的屬性,當某個元素的各個屬性及其組合都不足以定位時,咱們能夠利用其兄弟節點或者父節點等各類能夠定位的元素進行定位,先看看xpath中支持的方法:
一、child 選取當前節點的全部子元素
二、parent 選取當前節點的父節點
三、descendant選取當前節點的全部後代元素(子、孫等)
四、ancestor 選取當前節點的全部先輩(父、祖父等)
五、descendant-or-self選取當前節點的全部後代元素(子、孫等)以及當前節點自己
六、ancestor-or-self 選取當前節點的全部先輩(父、祖父等)以及當前節點自己
七、preceding-sibling選取當前節點以前的全部同級節點
八、following-sibling選取當前節點以後的全部同級節點
九、preceding 選取文檔中當前節點的開始標籤以前的全部節點
十、following 選取文檔中當前節點的結束標籤以後的全部節點
十一、self 選取當前節點
十二、attribute 選取當前節點的全部屬性
1三、namespace選取當前節點的全部命名空間節點
上圖實例,須要點擊訂單號爲17051915200001的發貨按鈕,這時候不能直接定位到發貨按鈕,而是要先定位到訂單號元素,再定位他的兄弟節點。參照上圖,咱們首先定位到td標籤中包含訂單號的td元素,而後選擇其以後的同級節點,following-sibling,咱們要找的元素在後面的第8個td標籤下,所以定位能夠寫名爲下面的格式
driver.find_element_by_xpath("//td[contains(text(),’17051915200001’)]/following-sibling::td[8]/a[@class='link']")
可是若是頁面中有兩個相同的定位元素的話,咱們這樣使用就有可能會報錯
好比有下面兩個輸入框,一個輸入用戶名的,一個輸入密碼的,可是 class 都是等於 inputclass 。這時,若是咱們使用class_name 來定位元素的話,就會出現意想不到的錯誤
<input type="text" class="inputclass" name="username"> <input type="password" class="inputclass" name="password"><br/> #python代碼 driver.find_element_by_class_name("inputclass").send_keys("admin") driver.find_element_by_class_name("inputclass").send_keys("password")
咱們的本意是在username框內輸入admin,password框內輸入 password 。可是因爲兩個框的 class 相同,而咱們又是使用class_name進行元素的定位,因此咱們全部的操做都會對第一個元素進行。
還有若是咱們定位的元素頁面沒有的話,也會報錯
好比咱們使用這條語句用class_name來進行定位元素,可是當頁面沒有 class_name="aa" 的元素的話,就會報錯,表示找不到經過 class name 方法找的元素 aa
driver.find_element_by_class_name("aa").send_keys("bb") NoSuchElementException: no such element: Unable to locate element: {"method":"class name","selector":"aa"}
import Select Select(driver.find_element_by_xpath("//select[@id='9560af43bfc949c4826d329c352e4eb6_class']")).select_by_index(4) #定位公共互聯網環境
#切換到指定的iframe框架 driver.switch_to.frame("mainFrame") #切換iframe框架 driver.switch_to.default_content() #切換到主框架
上傳文件使用的是AutoIt,安裝好後,打開AutoIt Window Info,鼠標選中Finder Tool,而後鼠標左鍵按住拖到文件名框內,獲得如圖數據
而後鼠標選中Finder Tool,鼠標左鍵按住拖到打開按鈕,獲得如圖數據
打開SciTE Script Editor,輸入以下內容
WinWait("CLASS:#32770","",5) #設置5秒用於等待上傳窗口的顯示 ControlFocus("打開","","Edit1") #把輸入焦點定位到上傳文本框中 ControlSetText("打開","","Edit1","C:\Users\17250\Desktop\1.txt") #輸入文件路徑 Sleep(5000) #等待上傳時間,單位毫秒 ControlClick("打開","","Button1"); #點擊打開按鈕,開始上傳
保存爲1.au3,點擊Tools->Go運行。
而後打開Compile Script to .exe ,而後選中1.au3,它會自動將其轉換爲1.exe。
在python中使用
os.system("C:\\Users\\17250\\Desktop\\1.exe")
方法 | 說明 |
set_window_size() | 設置瀏覽器的大小 |
back() | 控制瀏覽器後退 |
forward() | 控制瀏覽器前進 |
refresh() | 刷新當前頁面 |
clear() | 清除文本 |
send_keys (value) | 模擬按鍵輸入 |
click() | 單擊元素 |
submit() | 用於提交表單 |
get_attribute(name) | 獲取元素屬性值 |
is_displayed() | 設置該元素是否用戶可見 |
size | 返回元素的尺寸 |
text | 獲取元素的文本 |
在 WebDriver 中, 將這些關於鼠標操做的方法封裝在 ActionChains 類提供。
方法 | 說明 |
---|---|
ActionChains(driver) | 構造ActionChains對象 |
context_click() | 執行鼠標懸停操做 |
move_to_element(above) | 右擊 |
double_click() | 雙擊 |
drag_and_drop() | 拖動 |
move_to_element(above) | 執行鼠標懸停操做 |
context_click() | 用於模擬鼠標右鍵操做, 在調用時須要指定元素定位 |
perform() | 執行全部 ActionChains 中存儲的行爲,能夠理解成是對整個操做的提交動做 |
Selenium中的Key模塊爲咱們提供了模擬鍵盤按鍵的方法,那就是send_keys()方法。它不只能夠模擬鍵盤輸入,也能夠模擬鍵盤的操做。
經常使用的鍵盤操做以下:
模擬鍵盤按鍵 | 說明 |
---|---|
send_keys(Keys.BACK_SPACE) | 刪除鍵(BackSpace) |
send_keys(Keys.SPACE) | 空格鍵(Space) |
send_keys(Keys.TAB) | 製表鍵(Tab) |
send_keys(Keys.ESCAPE) | 回退鍵(Esc) |
send_keys(Keys.ENTER) | 回車鍵(Enter) |
組合鍵的使用
模擬鍵盤按鍵 | 說明 |
---|---|
send_keys(Keys.CONTROL,‘a’) | 全選(Ctrl+A) |
send_keys(Keys.CONTROL,‘c’) | 複製(Ctrl+C) |
send_keys(Keys.CONTROL,‘x’) | 剪切(Ctrl+X) |
send_keys(Keys.CONTROL,‘v’) | 粘貼(Ctrl+V) |
send_keys(Keys.F1…Fn) | 鍵盤 F1…Fn |
不論是在作功能測試仍是自動化測試,最後一步須要拿實際結果與預期進行比較。這個比較的稱之爲斷言。經過咱們獲取title 、URL和text等信息進行斷言。
屬性 | 說明 |
---|---|
title | 用於得到當前頁面的標題 |
current_url | 用戶得到當前頁面的URL |
text | 獲取搜索條目的文本信息 |