1.首先,對於想學自動化測試的朋友,那麼你得懂一種語言,經常使用的好比Java或者Python。由於沒有語言基礎,你是寫不出自動化腳本的。css
我我的選擇javahtml
2.有了開發語言的鋪墊,那麼開始入手Selenium。瞭解它的發展,瞭解它的組成,瞭解它的實現原理。java
發展:selenium1 selenium2,Selenium 經歷了兩個版本,Selenium 1.0 和 Selenium 2.0,本文僅介紹Selenium2的原理,在Selenium 2.0 主推的是WebDriver,Selenium2又名Selenium Webdriver。Selenium是一個用於Web應用程序測試的工具,支持多平臺、多瀏覽器、多語言去實現自動化測試,Selenium2將瀏覽器原生的API封裝成WebDriver API,能夠直接操做瀏覽器頁面裏的元素,甚至操做瀏覽器自己(截屏,窗口大小,啓動,關閉,安裝插件,配置證書之類的),因此就像真正的用戶在操做同樣。web
組成:webdriver是按照server–client的經典設計模式設計的,C/S結構的組成,C是咱們的測試腳本,S是remote serverchrome
實現原理:設計模式
webdriver將目標瀏覽器綁定到特定的端口,啓動的瀏覽器則爲特定的service,接收測試腳本的命令瀏覽器
測試腳本經過ComandExecutor發送http請求給Servercookie
Webdriver的一個簡單的架構圖,以下圖所示:架構
webdriver是按照server–client的經典設計模式設計的: 框架
server端就是remote server,能夠是任意的瀏覽器:咱們的腳本啓動瀏覽器後,該瀏覽器就是remote server,它的職責就是等待client發送請求並作出相應;
client端簡單說來就是咱們的測試代碼:們測試代碼中的一些行爲,好比打開瀏覽器,轉跳到特定的url等操做是以http請求的方式發送給被server端(也就是被測瀏覽器)server接受請求,並執行相應操做,並在response中返回執行狀態、返回值等信息;
簡單介紹一下webdriver的工做原理:
注:
the WebDriver Wire Protocol是Selenium本身設計定義的協議,這套協議很是之強大,幾乎能夠操做瀏覽器作任何事情,包括打開、關閉、最大化、最小化、元素定位、元素點擊、上傳文件等。
WebDriver Wire協議是通用的,也就是說無論FirefoxDriver仍是ChromeDriver,啓動以後都會在某一個端口啓動基於這套協議的Web Service。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3.當你對Selenium有了總體的瞭解後,能夠開始學習了。
發展,組成,實現原理,接下來開始瞭解html,與定位頁面元素的方法,控制元素的方法。
4.(step1)首先你得知道:什麼是元素?怎麼去定位一個頁面元素?怎麼去控制元素?怎麼控制瀏覽器?
八種定位方法,經常使用關鍵字封裝,
5.(step2)熟練的編寫頁面自動化腳本:碰到複雜的頁面,好比嵌套不少,知道怎麼去跳轉。複雜元素,怎麼去定位,各類頁面元素的處理,好比表格、下拉框、彈出框等等。
vip高級課程
6.(step3)熟練掌握上面技巧以後,開始學習怎麼將頁面元素與代碼分離,學習數據驅動(TestNG),以及怎麼樣結合Excel去作自動化測試。
vip高級課程
7.(step4)學習持續集成的方法,怎麼樣將自動化測試更加「自動化」。同時,開始學習自動化測試框架,可以根據產品的實際狀況來編寫合適的測試框架。
vip高級課程
瀏覽器操做
# 刷新 driver.refresh() # 前進 driver.forward() # 後退 driver.back()
獲取標籤元素
# 經過ID定位目標元素 driver.find_element_by_id('i1') # 經過className定位目標元素 driver.find_element_by_class_name('c1') # 經過name屬性定位目標元素 driver.find_element_by_name('n1') # 經過Xpath定位目標元素 driver.find_element_by_xpath('//*[@id="i1"]') # 經過css Selector定位目標元素 driver.find_element_by_css_selector('#i1') # 經過標籤名稱定位(注:在一個頁面中,標籤必定會重複,因此不用這個來進行定位) driver.find_element_by_tag_name('input') # 經過標籤中的文本查找元素 driver.find_element_by_link_text('登陸') # 經過標籤中文本的模糊匹配查找 driver.find_elements_by_partial_link_text('錄')
獲取標籤元素經常使用的一共有8種定位方式,而Selenium實際提供了18種定位方式,還有8種是上面的複數形式,這裏就不一一介紹了,實際運用中並不經常使用,還有2種其實是這上面所說16種的底層封裝。參數化的一種調用方式而已。
Cookie操做
# 根據cookieKey,獲取cookie信息 cookie = driver.get_cookie('cookieKey') # 獲取全部cookie信息 cookies = driver.get_cookies() # 添加cookie,嚴格按照格式添加,cookie的key爲name,value爲value driver.add_cookie({'name':'tmp','value':'123123123'}) # 刪除全部cookie信息 driver.delete_all_cookies() # 根據cookieKey刪除對應cookie driver.delete_cookie('UiCode')
窗口操做
# 獲取當前瀏覽器的大小 driver.get_window_size() # 經過像素設置瀏覽器的大小 driver.set_window_size('width','height') # 獲取當前窗口針對於Windows的位置的座標x,y driver.get_window_position() # 設置當前窗口針對Windows的位置,x,y driver.set_window_position(20,20) # 最大化當前窗口,不須要傳參 driver.maximize_window() # 返回當前操做的瀏覽器句柄 driver.current_window_handle # 返回全部打開server的瀏覽器句柄 driver.window_handles
截取當前頁面
# 獲取當前頁面的二進制圖片數據,須要本身去寫入文件 driver.get_screenshot_as_png() # as_png的上層封裝,只須要傳入圖片名稱自動寫成圖片 driver.get_screenshot_as_file('fileName.png')
執行JavaScript語句
# 執行JavaScript語句 driver.execute_script('JavaScript Commond') # 例: # 經過js來操做滾動條 # 參數1:x 參數2: y window.scrollTo(100,400);
關閉與退出
# 當開啓多個時,關閉當前頁面 driver.close() # 退出並關閉全部頁面驅動 driver.quit()
其餘
# 返回頁面源碼 driver.page_source # 返回tag標題 driver.title # 返回當前Url driver.current_url # 獲取瀏覽器名稱 如:chrome driver.name
ElementApi接口
# 根據標籤屬性名稱,獲取屬性value element.get_attribute('style') # 向輸入框輸入字符串 若是input的type爲file類型 能夠輸入文件絕對路徑上傳文件 element.send_keys() # 清除文本內容 element.clear() # 鼠標左鍵點擊操做 element.click() # 經過屬性名稱獲取屬性 element.get_property('id') # 返回元素是否可見 True or False element.is_displayed() # 返回元素是否被選中 True or False element.is_selected() # 返回標籤元素的名字 element.tag_name # 獲取當前標籤的寬和高 element.size # 獲取元素的文本內容 element.text # 模仿回車按鈕 提交數據 element.submit() # 獲取當前元素的座標 element.location # 截取圖片 element.screenshot()
常見異常