web自動化測試啟示篇

來源:互聯網
上載者:User

標籤:嵌套   selected   rip   支援   drive   寫入   response   架構   info   

 

 

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)熟練的編寫頁面自動化指令碼:碰到複雜的頁面,比如嵌套很多,知道怎麼去跳轉。複雜元素,怎麼去定位,各種頁面元素的處理,比如表格、下拉框、彈出框等等。

6.(step3)熟練掌握上面技巧之後,開始學習怎麼將頁面元素與代碼分離,學習資料驅動(TestNG),以及怎麼樣結合Excel去做自動化測試。

7.(step4)學習持續整合的方法,怎麼樣將自動化測試更加“自動化”。同時,開始學習自動化測試架構,能夠根據產品的實際情況來編寫合適的測試架構。

 

 

瀏覽器操作

# 重新整理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為valuedriver.add_cookie({‘name‘:‘tmp‘,‘value‘:‘123123123‘}) # 刪除所有cookie資訊driver.delete_all_cookies() # 根據cookieKey刪除對應cookiedriver.delete_cookie(‘UiCode‘)

視窗操作

# 擷取當前瀏覽器的大小driver.get_window_size() # 通過像素設定瀏覽器的大小driver.set_window_size(‘width‘,‘height‘) # 擷取當前視窗針對於Windows的位置的座標x,ydriver.get_window_position() # 設定當前視窗針對Windows的位置,x,ydriver.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: ywindow.scrollTo(100,400);

關閉與退出

# 當開啟多個時,關閉當前頁面driver.close() # 退出並關閉所有頁面驅動driver.quit()

其他

# 返回頁面源碼driver.page_source # 返回tag標題driver.title # 返回當前Urldriver.current_url # 擷取瀏覽器名稱 如:chromedriver.name

ElementApi介面

# 根據標籤屬性名稱,擷取屬性valueelement.get_attribute(‘style‘) # 向輸入框輸入字串 如果input的type為file類型 可以輸入檔案絕對路徑上傳檔案element.send_keys() # 清除常值內容element.clear() # 滑鼠左鍵點擊操作element.click() # 通過屬性名稱擷取屬性element.get_property(‘id‘) # 返回元素是否可見 True or Falseelement.is_displayed() # 返回元素是否被選中 True or Falseelement.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:尋找元素逾時

web自動化測試啟示篇

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.