框架詳解 Selenium3框架詳解

2021-10-25 12:46:47 字數 3003 閱讀 8301

自從17年開始就不再怎麼關注ui自動化測試了,也就很少關注selenium的知識體系,在當時的背景和環境下有很多的思考和選擇點,基於ui的自動化測試並不是所有的場合下都使用它合適,任何乙個技術,要把它應用在合適的場景下才能夠顯示出它的最大的價值。今天這裡就簡單的對page objects做乙個介紹。

基於ui的自動化測試的痛點在於如何可以高效的維護並且滿足業務迭代的需求,或者說這是自動化測試的基本訴求,高效,維護方便,能夠提公升測試效率,從而帶來研發效率的提公升,最大達到工程效率的提公升。在ui自動化測試中,產品的快速迭代,導致頁面元素的屬性經常變來變去,另外一點是資料如何分離,和大批量的自動化測試用例如何可以在很短的時間範圍內執行完成並且給出比較權威的測試報告,能夠反饋出覆蓋到的所測試產品的產品質量,從而給管理者帶來有價值的資訊。坦白說,這個過程是複雜的,做不代表就存在價值,但是存在就是合理,合理不代表就是正確,所以就有了持續不斷的優化和持續改進的過程。

基於頁面物件設計模式存在這麼幾個優點,主要是:

1、建立可以跨多個測試用例共享的**

2、減少重複**執行的數量

3、如果使用者介面發生變化後,只需要在乙個地方維護就可以了

from selenium.webdriver.common.by import byclass mobileby(by):    ios_predicate = '-ios predicate string'    ios_uiautomation = '-ios uiautomation'    ios_class_chain = '-ios class chain'    android_uiautomator = '-android uiautomator'    android_viewtag = '-android viewtag'    android_data_matcher = '-android datamatcher'    accessibility_id = 'accessibility id'    image = '-image'    custom = '-custom'
def find_element(self, by=by.id, value=none):    """    find an element given a by strategy and locator. prefer the find_element_by_* methods when    possible.    :usage:        element = element.find_element(by.id, 'foo')    :rtype: webelement    """    if self._w3c:        if by == by.id:            by = by.css_selector

value = '[id="%s"]' % value elif by == by.tag_name: by = by.css_selectorelif by == by.class_name: by = by.css_selector

value = ".%s" % value elif by == by.name: by = by.css_selector

value = '[name="%s"]' % value return self._execute(command.find_child_element,

)['value']

下來在測試層編寫具體的測試**,但是測試韌體要分離,在之前的文章中也介紹過這部分,我今晚再解釋下,在每乙個測試模組的測試類中,都需要繼承unittest模組中的testcase,在測試韌體中需要初始化webdriver,和指定要測試的瀏覽器,測試位址,開啟瀏覽器和關閉瀏覽器的操作,問題是乙個系統的測試會編寫很多的測試模組以及測試類,如果需要在測試的瀏覽器由chrome替換為firefox,或者測試位址由a變為b,那麼需要在測試測試韌體中來修改測試位址,和指定要測試的瀏覽器,利用繼承的思想,把測試韌體分離後,只需要修改乙個地方即可,在物件層增加模組init.py,編寫類分離測試韌體,見這部分的原始碼:

#!/usr/bin/env python#coding:utf-8 #author:無涯import  unittestfrom selenium import  webdriverclass  init(unittest.testcase):   def setup(self):      self.driver = webdriver.chrome()self.driver.maximize_window()self.driver.implicitly_wait(30)self.driver.get('')def teardown(self):      self.driver.quit()
下來就是測試具體的測試用例,在tests包下建立測試模組,編寫測試類,繼承測試韌體的類和物件層的類,同時編寫的測試用例一定要加斷言,沒有斷言的自動化測試用例是無效的,測試用例這部分**簡單,搜尋關鍵字,獲取搜尋的關鍵字,然後斷言驗證它,它的原始碼為:

#!/usr/bin/env python#coding:utf-8 #author:無涯import  unittestfrom page.baidu import baidufrom page.init import  initclass baidutest(init,baidu):   def test_baidu_so(self):      '''測試:獲取搜尋的關鍵字並且驗證它'''      self.typeso('無涯')self.assertequal(self.getkeyword(),'無涯')if __name__ == '__main__':    unittest.main(verbosity=2)
如上**執行後的結果為:

下來是ui自動化測試中測試資料的分離,這部分後面再詳解。關於ui的自動化測試,目前應用的場景可能在快速迭代的產品中應用不是很合適,但是在一些比較穩定的產品,發展週期比較長使用它還是存在很大的價值。

selenium3之 執行原理

webdriver是貫穿於整個web自動化測試過程,那麼webdriver是什麼東西呢?webdriver是一套規範,是由w3c組織制定的一套瀏覽器自動化規範,所有的瀏覽器廠商都必須遵守實現的規範,正式因為瀏覽器都支援這種規範,我們可以寫一套自動化指令碼,在多個瀏覽器中進行執行。在進行seleniu...

selenium測試框架

什麼是框架?框架 framework 是乙個框子 指其約束性,也是乙個架子 指其支撐性。是乙個基本概念上的結構,用於去解決或者處理複雜的問題。框架是整個或部分系統的可重用設計,表現為一組抽象構件及構件例項間互動的方法 另一種定義認為,框架是可被應用開發者定製的應用骨架。前者是從應用方面而後者是從目的...

Selenium 3操作瀏覽器視窗

最大化方法一 指明chromedriver路徑 system.setproperty src url string.chrome driver,src url string.driver address 載入使用者配置檔案 chromeoptions options newchromeoptions...