Python中Selenium模塊的使用

目錄css

Selenium的介紹、配置和調用html

Selenium的配置python

Selenium的調用git

Selenium的使用github

定位web

定位元素的使用chrome

定位下拉標籤元素 api

在iframe框架之間切換 瀏覽器

上傳文件框架

Webdriver模塊的使用

控制瀏覽器操做的一些方法 

鼠標事件

鍵盤事件

獲取斷言信息


Selenium的介紹、配置和調用

Selenium(瀏覽器自動化測試框架) 是一個用於Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操做同樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Firefox,Safari,Google Chrome,Opera等。這個工具的主要功能包括:測試瀏覽器的兼容性——測試你的應用程序看是否可以很好得工做在不一樣瀏覽器和操做系統之上。測試系統功能——建立迴歸測試檢驗軟件功能和用戶需求。支持自動錄製動做和自動生成 .Net、Java、Perl等不一樣語言的測試腳本。

  • 框架底層使用JavaScript模擬真實用戶對瀏覽器進行操做。測試腳本執行時,瀏覽器自動按照腳本代碼作出點擊,輸入,打開,驗證等操做,就像真實用戶所作的同樣,從終端用戶的角度測試應用程序。
  • 使瀏覽器兼容性測試自動化成爲可能,儘管在不一樣的瀏覽器上依然有細微的差異。
  • 使用簡單,可以使用Java,Python等多種語言編寫用例腳本。

Selenium的配置

一、安裝 Selenium模塊:  pip  install  Selenium

二、下載瀏覽器驅動,Selenium3.x調用瀏覽器必須有一個webdriver驅動文件

下載以後,解壓到任意目錄(路徑不要有中文)。

Selenium的調用

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的使用

定位

Selenium提供了8種定位方式

  1. id
  2. name
  3. class  name
  4. tag name
  5. link text
  6. partial link text
  7. xpath
  8. css selector

定位元素的使用

定位一個元素 定位多個元素 含義
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框架之間切換 

#切換到指定的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")

Webdriver模塊的使用

控制瀏覽器操做的一些方法 

方法 說明
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 獲取搜索條目的文本信息

參考文章:http://www.javashuo.com/article/p-hdkbwssx-hr.html

相關文章
相關標籤/搜索