国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Selenium Web自動化測試——基于unittest框架的PO設(shè)計(jì)模式

這篇具有很好參考價(jià)值的文章主要介紹了Selenium Web自動化測試——基于unittest框架的PO設(shè)計(jì)模式。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

??? 交流討論:歡迎加入我們一起學(xué)習(xí)!

?? 資源分享耗時(shí)200+小時(shí)精選的「軟件測試」資料包

???教程推薦:火遍全網(wǎng)的《軟件測試》教程??

??歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯(cuò)誤敬請指正!

引言

  前面一直在講接口自動化測試框架與案例分享,很少講Selenium這個(gè)Web自動化測試神器。它主要用來做UI自動化測試,大家都知道UI自動化測試成本相當(dāng)高,一般的Web自動化測試我是一直不建議做的。

  雖然不推薦,但是這里有一個(gè)設(shè)計(jì)思想是不錯(cuò)的——PO設(shè)計(jì)模式。

  PO設(shè)計(jì)模式

  PO設(shè)計(jì)模式,英文名稱:Page Object Model。PO設(shè)計(jì)模式是Selenium自動化測試中最佳的設(shè)計(jì)方式之一。相比傳統(tǒng)設(shè)計(jì)中:頁面定位元素→輸入數(shù)據(jù)→操作元素→斷言結(jié)果,會有以下問題:

  1、易用性差:雜亂無章的定位元素方法,例如:find_element;

  2、擴(kuò)展性不好:用例孤立,無法擴(kuò)展;

  3、復(fù)用性差:無公共方法,很難服用;

  4、可維護(hù)性差:一旦元素變化或測試步驟變化,需要維護(hù)大量代碼和用例;

  針對上面一些弊端,做了一些優(yōu)化:

  POM設(shè)計(jì)模式,將頁面定位和業(yè)務(wù)操作分開,將元素定位和測試方法分離,從而提高代碼的維護(hù)性。而傳統(tǒng)的POM是元素定位和測試方法放在一起,如下圖:

  

Selenium Web自動化測試——基于unittest框架的PO設(shè)計(jì)模式,selenium,設(shè)計(jì)模式,壓力測試

  這樣做的優(yōu)勢:

  1、頁面元素定位和業(yè)務(wù)操作方法分離,使得代碼更加清晰,減少冗余代碼;

  2、測試方法單獨(dú)抽離,這樣提高用例的可讀性;

  3、針對ui變化頻繁的項(xiàng)目和測試步驟的變化,提高了測試用例的維護(hù)性;

  一條測試用例可能需要多個(gè)步驟操作元素,將每一個(gè)步驟單獨(dú)封裝成一個(gè)方法,在執(zhí)行測試用例時(shí)調(diào)用封裝好的方法進(jìn)行操作。PO模式可以把一個(gè)頁面分為三個(gè)層級,對象庫層、操作層、業(yè)務(wù)層。

  對象庫層:封裝定位元素的方法。

  操作層:封裝對元素的操作。

  業(yè)務(wù)層:將一個(gè)或多個(gè)操作組合起來完成一個(gè)業(yè)務(wù)功能。

  PO設(shè)計(jì)模式核心組件

  畫一個(gè)操作如下:

  

Selenium Web自動化測試——基于unittest框架的PO設(shè)計(jì)模式,selenium,設(shè)計(jì)模式,壓力測試

?  PO的核心要素:

  1. 在 PO 模式中抽離封裝集成一個(gè) BasePage 類,該基類應(yīng)該擁有一個(gè)只實(shí)現(xiàn) webdriver 實(shí)例的屬性

  2. 每一個(gè)page 都繼承BasePage,通過 driver 來管理 page 中元素,將 page 中的操作封裝成一個(gè)個(gè)方法

  3. TestCase 繼承 unittest.TestCase類,并依賴page類,從而實(shí)現(xiàn)相應(yīng)的測試步驟

?  首先抽象封裝一個(gè)BasePage類,這個(gè)基類擁有Webdriver實(shí)例的屬性,將頁面分成一個(gè)個(gè)Page,每一個(gè)Page繼承基類BasePage,可以通過driver來管理每一個(gè)Page中的元素,

  在Page中將定位元素的操作封裝成一個(gè)一個(gè)方法。TestCase繼承unittest里面的TestCase類,并且依賴Page類,進(jìn)行測試步驟的執(zhí)行工作。

  這樣以來,頁面元素一旦變化,只需要維護(hù)每一個(gè)Page中的方法,測試流程發(fā)生變化,只需要維護(hù)TestCase即可。

  核心組件:

  BasePage.py模塊:

1

2

3

4

5

class?BasePage(object):

????def __init__(self,driver):

????????self.driver = driver

????pass

  Page頁面模塊:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

from?SeleniumProject.PO.BasePage import BasePage

class?LoginBase(BasePage):

????# 定位元素,括號中是通過find_element來獲取元素的屬性

????uname = ()

????pwd = ()

????def set_uname(self,uname):

????????name =self.driver.find_element(*LoginBase.uname)

????????name.send_keys("用戶名")

????def set_pwd(self,pwd):

????????password = self.driver.find_element(*LoginBase.pwd)

????????password.send_keys("密碼")

????pass

  TestCase用例模塊:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

from?unittest import TestCase

import unittest

from?selenium import webdriver

class?Test_Login(TestCase):

????def setUp(self):

????????self.driver = webdriver.Chrome()

????????self.driver.get("https://cn.bing.com/")

????# 測試步驟

????def test_Login(self):

????????self.driver.get(self.base_url)

????????pass

????def tearDown(self):

????????self.driver.quit()

if?__name__ ==?"__main__":

????unittest.main()

  

  PO模式簡單實(shí)例

  現(xiàn)在根據(jù)PO設(shè)計(jì)模式思想,簡單實(shí)現(xiàn)一個(gè)需求:

  打開瀏覽器,輸入url:https://www.baidu.com,在百度搜索文本框內(nèi)輸入關(guān)鍵字:selenium,然后單擊:百度一下,進(jìn)行搜索。

  根據(jù)需求,設(shè)計(jì)步驟如下:

  BasePage:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

#!/usr/bin/env python

# -*- coding: utf-8 -*-

'''

# @Time ? ?: 2020/11/22 0022 16:07

# @Author ?: liudinglong

# @File ? ?: basepage.py

# @Description:

# @Question:

'''

from?selenium import webdriver

from?selenium.webdriver.support.wait import WebDriverWait

from?selenium.webdriver.support import expected_conditions?as?EC

class?BasePage(object):

????def __init__(self,driver,url):

????????"""

????????@param driver:

????????@param base_url:

????????"""

????????self.dr = driver

????????self.base_url =? url

????# 定義私有方法,類對象和子類可以訪問

????def _open(self,url):

????????self.dr.get(url)

????????self.dr.maximize_window()

????# 定義open方法,調(diào)用_open方法

????def open(self):

????????self._open(self.base_url)

????def find_emelemt(self,*loc):

????????try:

????????????WebDriverWait(self.dr,10).until(EC.visibility_of_all_elements_located(loc))

????????????return?self.dr.find_element(*loc)

????????except:

????????????print("頁面中沒有%s元素"%(self.loc))

????# 定義script()方法,用于執(zhí)行JS腳本,比方上上傳文件啥的

????def script(self, src):

????????self.dr.excute_script(src)

????????# 定義頁面跳轉(zhuǎn)方法,比方說有的頁面有frame嵌套

????def switch_frame(self, loc):

????????return?self.dr.switch_to_frame(loc)

????????# 重新定義send_keys()方法,為了保證搜索按鈕是否存在,還有有的輸入框中默認(rèn)有值,要清空

????def send_keys(self, loc, value, clear_first=True, click_first=True):

????????try:

????????????# getattr方法相當(dāng)于實(shí)現(xiàn)了self.loc

????????????loc = getattr(self,?"_%s"?% loc)

????????????# 是否存在搜索按鈕

????????????if?click_first:

????????????????self.find_emelemt(*loc).click()

????????????# 清空搜索框中的值,并輸入需要搜索的值

????????????if?clear_first:

????????????????self.find_emelemt(*loc).clear()

????????????????self.find_emelemt(*loc).send_keys(value)

????????except:

????????????print("頁面上未找到%s元素"?% (self.loc))

  SearchPage:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

#!/usr/bin/env python

# -*- coding: utf-8 -*-

'''

# @Time ? ?: 2020/11/22 0022 18:38

# @Author ?: liudinglong

# @File ? ?: SearchPage.py

# @Description:

# @Question:

'''

from?selenium.webdriver.common.by?import By

from?Common.basepage import? BasePage

class?SearchPage(BasePage):

????# 定位元素

????search_loc = (By.ID,"kw") #搜索框

????btn_loc = (By.ID,"su")??? #搜索按鈕

????# 重寫父類的open()方法

????def open(self):

????????self._open(self.base_url)

????def search_content(self,content):

????????# 調(diào)用父類的find_emelemt,然后將本類的參數(shù)傳入

????????content1 =? self.find_emelemt(*self.search_loc)

????????content1.send_keys(content)

????def btn_click(self):

????????btn1 = self.find_emelemt(*self.btn_loc)

????????btn1.click()

  TestCase:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

#!/usr/bin/env python

# -*- coding: utf-8 -*-

'''

# @Time ? ?: 2020/11/22 0022 18:40

# @Author ?: liudinglong

# @File ? ?: test_001.py

# @Description:

# @Question:

'''

from?unittest import TestCase

import unittest

from?selenium import webdriver

from?time import sleep

from?Page.searchpage import SearchPage

class?CaseRun(TestCase):

????def setUp(self):

????????self.driver = webdriver.Chrome()

????????self.url =?"https://www.baidu.com"

????????sleep(3)

????????self.content =?"selenium"

????# 測試步驟

????def test_search(self):

????????bing_page = SearchPage(self.driver,self.url)

????????bing_page.open()

????????bing_page.search_content(self.content)

????????try:

????????????bing_page.btn_click()

????????????sleep(3)

????????????print("查詢成功")

????????except Exception?as?Error:

????????????print(Error)

????def tearDown(self):

????????self.driver.quit()

if?__name__ ==?"__main__":

????unittest.main()

  三個(gè)核心組件完成,項(xiàng)目結(jié)構(gòu)如下:

  

Selenium Web自動化測試——基于unittest框架的PO設(shè)計(jì)模式,selenium,設(shè)計(jì)模式,壓力測試

?  運(yùn)行測試,生成報(bào)告如下:

1

2

3

4

5

6

C:\Users\Administrator\Desktop\Demo_PO

C:\Users\Administrator\Desktop\Demo_PO\Report

.

Time Elapsed: 0:00:13.370322

Process finished with exit code 0

Selenium Web自動化測試——基于unittest框架的PO設(shè)計(jì)模式,selenium,設(shè)計(jì)模式,壓力測試

總結(jié)

這個(gè)Demo很簡單,主要意圖是幫助理解PO設(shè)計(jì)模式的思想,如果需要代碼,可以加入QQ群:785128166 ,我們這里主要是進(jìn)行自動化測試和測試開發(fā)學(xué)習(xí)與溝通交流,如果其他意圖請繞行~

作為一個(gè)軟件測試的過來人,我想盡自己最大的努力,幫助每一個(gè)伙伴都能順利找到工作。所以我整理了下面這份資源,現(xiàn)在免費(fèi)分享給大家,有需要的小伙伴可以關(guān)注【公眾號:程序員二黑】自提!

Selenium Web自動化測試——基于unittest框架的PO設(shè)計(jì)模式,selenium,設(shè)計(jì)模式,壓力測試

Selenium Web自動化測試——基于unittest框架的PO設(shè)計(jì)模式,selenium,設(shè)計(jì)模式,壓力測試文章來源地址http://www.zghlxwxcb.cn/news/detail-842193.html

到了這里,關(guān)于Selenium Web自動化測試——基于unittest框架的PO設(shè)計(jì)模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【自動化測試】基于Selenium + Python的web自動化框架

    【自動化測試】基于Selenium + Python的web自動化框架

    Selenium是一個(gè)基于瀏覽器的自動化工具,她提供了一種跨平臺、跨瀏覽器的端到端的web自動化解決方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid: ? 1、Selenium IDE:Firefox的一個(gè)擴(kuò)展,它可以進(jìn)行錄制回放,并可以把錄制的操作以多種語言(例如java,p

    2024年02月07日
    瀏覽(19)
  • 【Selenium2+python】自動化unittest生成測試報(bào)告

    【Selenium2+python】自動化unittest生成測試報(bào)告

    前言 批量執(zhí)行完用例后,生成的測試報(bào)告是文本形式的,不夠直觀,為了更好的展示測試報(bào)告,最好是生成HTML格式的。 unittest里面是不能生成html格式報(bào)告的,需要導(dǎo)入一個(gè)第三方的模塊:HTMLTestRunner 一、導(dǎo)入HTMLTestRunner 1.這個(gè)模塊下載不能通過pip安裝了,只能下載后手動導(dǎo)

    2024年02月09日
    瀏覽(24)
  • Selenium+Unittest自動化測試框架實(shí)戰(zhàn)(框架源碼都給你)

    Selenium+Unittest自動化測試框架實(shí)戰(zhàn)(框架源碼都給你)

    目錄 前言 項(xiàng)目框架 首先管理時(shí)間 !/usr/bin/env python3 -- coding:utf-8 -- 配置文件 conf.py config.ini# 讀取配置文件 記錄操作日志 簡單理解POM模型 管理頁面元素 封裝Selenium基類 創(chuàng)建頁面對象 熟悉unittest測試框架 編寫測試用例 執(zhí)行用例 生成測試報(bào)告 執(zhí)行并生成報(bào)告 發(fā)送結(jié)果郵件 se

    2024年02月15日
    瀏覽(25)
  • 基于python實(shí)現(xiàn)Web自動化測試(selenium)、API自動化測試(requests)&附學(xué)習(xí)視頻

    基于python實(shí)現(xiàn)Web自動化測試(selenium)、API自動化測試(requests)&附學(xué)習(xí)視頻

    另一篇文章 :自動化測試框架(pytest)附學(xué)習(xí)視頻 學(xué)習(xí)視頻,學(xué)習(xí)文檔-白月黑羽 說明: 1緊跟著寫的不加/,不加空格-表示同一級別信息,加空格表示后代 2.css定位tag,id,class時(shí)分別有不同的標(biāo)識,其他屬性都要加[]進(jìn)行搜索, Xpath所有屬性都要都加【】,tag不用 3. css在使用ta

    2024年02月03日
    瀏覽(24)
  • 基于Selenium+Python的web自動化測試框架

    基于Selenium+Python的web自動化測試框架

    一、什么是Selenium? Selenium是一個(gè)基于瀏覽器的自動化測試工具,它提供了一種跨平臺、跨瀏覽器的端到端的web自動化解決方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE:Firefox的一個(gè)擴(kuò)展,它可以進(jìn)行錄制回放,并把錄制的操作以多種語言

    2024年02月02日
    瀏覽(105)
  • Selenium基于Python web自動化測試框架 -- PO

    Selenium基于Python web自動化測試框架 -- PO

    ??? 交流討論: 歡迎加入我們一起學(xué)習(xí)! ?? 資源分享 : 耗時(shí)200+小時(shí)精選的「軟件測試」資料包 ??? 教程推薦: 火遍全網(wǎng)的《軟件測試》教程?? ?? 歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯(cuò)誤敬請指正! 關(guān)于selenium測試框架首先想到的就是PO模型,簡單說下PO模型 PO模型的

    2024年02月22日
    瀏覽(27)
  • 基于Selenium+Python的web自動化測試框架詳解

    目錄 一、什么是Selenium? 二、自動化測試框架 三、自動化框架的設(shè)計(jì)和實(shí)現(xiàn) 四、需要改進(jìn)的模塊 五、總結(jié) Selenium是一個(gè)基于瀏覽器的自動化測試工具,它提供了一種跨平臺、跨瀏覽器的端到端的web自動化解決方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selen

    2024年02月09日
    瀏覽(29)
  • 基于Selenium的Web UI自動化測試框架開發(fā)實(shí)戰(zhàn)

    基于Selenium的Web UI自動化測試框架開發(fā)實(shí)戰(zhàn)

    1、自研自動化測試框架 首先進(jìn)行需求分析。概要設(shè)計(jì)包括以下三大模塊: 公共函數(shù)庫模塊(包括可復(fù)用函數(shù)庫、日志管理、報(bào)表管理及發(fā)送郵件管理); 測試用例倉庫模塊(具體用例的相關(guān)管理); 可視化頁面管理模塊(單獨(dú)針對Web頁面進(jìn)行抽象,封裝頁面元素和操作方

    2024年01月20日
    瀏覽(114)
  • Selenium——基于Web的UI自動化測試工具(一)

    ????????Selenium是一個(gè)自動化測試工具,用于模擬用戶在Web上的行為。它支持多種瀏覽器,如Chrome、Firefox、IE等。Selenium可以實(shí)現(xiàn)多種操作,包括打開瀏覽器、導(dǎo)航到指定URL、填寫表單、點(diǎn)擊按鈕、獲取頁面元素等。 ????????Selenium有多種語言實(shí)現(xiàn),包括Java、Python、C#等

    2024年04月13日
    瀏覽(27)
  • 基于web應(yīng)用的UI自動化、跨瀏覽器測試、測試結(jié)果分析:Selenium 開源的自動化測試工具基礎(chǔ)教程

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) Selenium是一個(gè)開源的自動化測試工具,它提供了基于web應(yīng)用的UI自動化、跨瀏覽器測試、測試結(jié)果分析等功能。它提供的功能包括:自動化控制瀏覽器、操縱表單、點(diǎn)擊鏈接及按鈕、驗(yàn)證頁面元素、執(zhí)行JavaScript代碼、生成PDF文件、模擬移動設(shè)備

    2024年02月09日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包