python的selenium模块_Python中Selenium模块的使用
目錄
Selenium的介紹、配置和調用
Selenium(瀏覽器自動化測試框架)?是一個用于Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Firefox,Safari,Google Chrome,Opera等。這個工具的主要功能包括:測試瀏覽器的兼容性——測試你的應用程序看是否能夠很好得工作在不同瀏覽器和操作系統之上。測試系統功能——創建回歸測試檢驗軟件功能和用戶需求。支持自動錄制動作和自動生成 .Net、Java、Perl等不同語言的測試腳本。
框架底層使用JavaScript模擬真實用戶對瀏覽器進行操作。測試腳本執行時,瀏覽器自動按照腳本代碼做出點擊,輸入,打開,驗證等操作,就像真實用戶所做的一樣,從終端用戶的角度測試應用程序。
使瀏覽器兼容性測試自動化成為可能,盡管在不同的瀏覽器上依然有細微的差別。
使用簡單,可使用Java,Python等多種語言編寫用例腳本。
Selenium的配置
1、安裝 Selenium模塊:? pip? install? Selenium
2、下載瀏覽器驅動,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種定位方式
id
name
class? name
tag name
link text
partial link text
xpath
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表達式定位
例如:
百度一下
通過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']")
其他的屬性值如果太長,也可以采取模糊方法定位
例如頁面中有這么一個標簽
百度一下
則可以這么使用
driver.find_element_by_xpath("//a[contains(@href,'login')]")
以上是普通的情況,存在可以定位的屬性,當某個元素的各個屬性及其組合都不足以定位時,我們可以利用其兄弟節點或者父節點等各種可以定位的元素進行定位,先看看xpath中支持的方法:
1、child ?選取當前節點的所有子元素
2、parent ?選取當前節點的父節點
3、descendant選取當前節點的所有后代元素(子、孫等)
4、ancestor ?選取當前節點的所有先輩(父、祖父等)
5、descendant-or-self選取當前節點的所有后代元素(子、孫等)以及當前節點本身
6、ancestor-or-self ?選取當前節點的所有先輩(父、祖父等)以及當前節點本身
7、preceding-sibling選取當前節點之前的所有同級節點
8、following-sibling選取當前節點之后的所有同級節點
9、preceding ??選取文檔中當前節點的開始標簽之前的所有節點
10、following ??選取文檔中當前節點的結束標簽之后的所有節點
11、self ?選取當前節點
12、attribute ?選取當前節點的所有屬性
13、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 來定位元素的話,就會出現意想不到的錯誤
#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
獲取搜索條目的文本信息
總結
以上是生活随笔為你收集整理的python的selenium模块_Python中Selenium模块的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: python实战演练_《Python高效
 - 下一篇: 炫界 (978) -(建工发现应用克隆漏