web自動化測試啟示篇


 

 

1.首先,對於想學自動化測試的朋友,那么你得懂一種語言,常用的比如Java或者Python。因為沒有語言基礎,你是寫不出自動化腳本的。

我個人選擇java

2.有了開發語言的鋪墊,那么開始入手Selenium。了解它的發展,了解它的組成,了解它的實現原理。

發展:selenium1 selenium2,Selenium 經歷了兩個版本,Selenium 1.0 和 Selenium 2.0,本文僅介紹Selenium2的原理,在Selenium 2.0 主推的是WebDriver,Selenium2又名Selenium Webdriver。Selenium是一個用於Web應用程序測試的工具,支持多平台、多瀏覽器、多語言去實現自動化測試,Selenium2將瀏覽器原生的API封裝成WebDriver API,可以直接操作瀏覽器頁面里的元素,甚至操作瀏覽器本身(截屏,窗口大小,啟動,關閉,安裝插件,配置證書之類的),所以就像真正的用戶在操作一樣。

組成:webdriver是按照server–client的經典設計模式設計的,C/S結構的組成,C是我們的測試腳本,S是remote server

實現原理

webdriver將目標瀏覽器綁定到特定的端口,啟動的瀏覽器則為特定的service,接收測試腳本的命令

測試腳本通過ComandExecutor發送http請求給Server

 

Webdriver的一個簡單的架構圖,如下圖所示:

Selenium2原理

webdriver是按照server–client的經典設計模式設計的: 

server端就是remote server,可以是任意的瀏覽器:我們的腳本啟動瀏覽器后,該瀏覽器就是remote server,它的職責就是等待client發送請求並做出相應; 

client端簡單說來就是我們的測試代碼:們測試代碼中的一些行為,比如打開瀏覽器,轉跳到特定的url等操作是以http請求的方式發送給被server端(也就是被測瀏覽器)server接受請求,並執行相應操作,並在response中返回執行狀態、返回值等信息;

簡單介紹一下webdriver的工作原理:

  • 啟動瀏覽器后,selenium-webdriver會將目標瀏覽器綁定到特定的端口,啟動后的瀏覽器則作為webdriver的remote server。
  • 客戶端(也就是測試腳本),借助ComandExecutor發送HTTP請求給sever端(通信協議:The WebDriver Wire Protocol,在HTTP request的body中,會以WebDriver Wire協議規定的JSON格式的字符串來告訴Selenium我們希望瀏覽器接下來做什么事情)。
  • Sever端需要依賴原生的瀏覽器組件,轉化Web Service的命令為瀏覽器native的調用來完成操作。

注:

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()
復制代碼

常見異常

  NoSuchElementException:沒有找到元素
 
  NoSuchFrameException:沒有找到iframe
 
  NoSuchWindowException:沒找到窗口句柄handle
 
  NoSuchAttributeException:屬性錯誤
 
  NoAlertPresentException:沒找到alert彈出框
 
  ElmentNotVisibleException:元素不可見
 
  ElementNotSelectableException:元素沒有被選中
 
  TimeoutException:查找元素超時


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM