欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)Selenium自動(dòng)化Page模式

 更新時(shí)間:2019年07月14日 10:38:39   作者:Alvin_Xu  
這篇文章主要介紹了Python實(shí)現(xiàn)Selenium自動(dòng)化Page模式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Selenium是當(dāng)前主流的web自動(dòng)化工具,提供了多種瀏覽器的支持(Chrome,Firefox, IE等等),當(dāng)然大家也可以用自己喜歡的語(yǔ)言(Java,C#,Python等)來(lái)寫用例,很容易上手。當(dāng)大家寫完第一個(gè)自動(dòng)化用例的時(shí)候肯定感覺”哇...好牛x“,但是大家用余光掃了一下代碼后,內(nèi)心也許是崩潰的,因?yàn)樘珌y了!像這樣:

__author__ = 'xua'

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import unittest

class TCRepeatLogin(unittest.TestCase):
  def setUp(self):

    #webdriver
    self.driver = webdriver.Chrome(r'C:\Users\xua\Downloads\chromedriver_win32\chromedriver.exe')
    self.driver.implicitly_wait(30)
    self.base_url = "http://10.222.30.145:9000/"

  def test_(self):
    driver = self.driver
    driver.get(self.base_url)

    #enter username and password
    driver.find_element_by_id("username").clear()
    driver.find_element_by_id("username").send_keys("sbxadmin")
    driver.find_element_by_id("password").clear()
    driver.find_element_by_id("password").send_keys("IGTtest1"+Keys.RETURN)

    #find dialog and check
    dialogTitle = driver.find_element(By.XPATH,'//html/body/div[7]/div/div/div[1]/h3')
    self.assertEqual("Sign in",dialogTitle.text)

    #find cancel button and click
    cancelBtn = driver.find_element(By.XPATH,'//html/body/div[7]/div/div/div[3]/button[2]')
    cancelBtn.click()

  def tearDown(self):
    self.driver.close()

if __name__ == "__main__":
  unittest.main()

從幾點(diǎn)來(lái)分析下上邊的代碼:

1. 易讀性:非常難理解。這么多find element?這難道也是test case?

2. 可擴(kuò)展性:都是一個(gè)個(gè)孤立的test case,無(wú)擴(kuò)展性可言

3. 可復(fù)用性:無(wú)公共方法,很難提到復(fù)用

4. 可維護(hù)性:一旦頁(yè)面元素修改,則需要相應(yīng)修改所有相關(guān)用例,effort大

基于以上的問題,Python為我們提供了Page模式來(lái)管理測(cè)試,它大概是這樣子的:(TestCase中的虛線箭頭應(yīng)該是指向各個(gè)page,家里電腦沒裝修改軟件,就不改了:))

關(guān)于Page模式:

1. 抽象出來(lái)一個(gè)BasePage基類,它包含一個(gè)指向Selenium.webdriver的屬性

2. 每一個(gè)webpage都繼承自BasePage基類,通過(guò)driver來(lái)獲取本頁(yè)面的元素,每個(gè)頁(yè)面的操作都抽象為一個(gè)個(gè)方法

3. TestCase繼承自u(píng)nittest.Testcase類,并依賴相應(yīng)的Page類來(lái)實(shí)現(xiàn)相應(yīng)的test case步驟

利用Page模式實(shí)現(xiàn)上邊的用例,代碼如下:

BasePage.py:

__author__ = 'xua'

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys


#super class
class BasePage(object):
  def __init__(self, driver):
    self.driver = driver


class LoginPage(BasePage):
  
  #page element identifier
  usename = (By.ID,'username')
  password = (By.ID, 'password')
  dialogTitle = (By.XPATH,'//html/body/div[7]/div/div/div[1]/h3')
  cancelButton = (By.XPATH,'//html/body/div[7]/div/div/div[3]/button[2]')

  #Get username textbox and input username
  def set_username(self,username):
    name = self.driver.find_element(*LoginPage.usename)
    name.send_keys(username)
  
  #Get password textbox and input password, then hit return
  def set_password(self, password):
    pwd = self.driver.find_element(*LoginPage.password)
    pwd.send_keys(password + Keys.RETURN)

  #Get pop up dialog title
  def get_DiaglogTitle(self):
    digTitle = self.driver.find_element(*LoginPage.dialogTitle)
    return digTitle.text

  #Get "cancel" button and then click
  def click_cancel(self):
    cancelbtn = self.driver.find_element(*LoginPage.cancelButton)
    cancelbtn.click()

Test_Login.py:

__author__ = 'xua'

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.alert import Alert
import unittest
import time
import BasePage

class Test_Login(unittest.TestCase):

  #Setup
  def setUp(self):
    self.driver = webdriver.Chrome(r'C:\Users\xua\Downloads\chromedriver_win32\chromedriver.exe')
    self.driver.implicitly_wait(30)
    self.base_url = "http://10.222.30.145:9000/"
  #tearDown
  def tearDown(self):
    self.driver.close()

  def test_Login(self):
    #Step1: open base site
    self.driver.get(self.base_url)
    #Step2: Open Login page
    login_page = BasePage.LoginPage(self.driver)
    #Step3: Enter username
    login_page.set_username("sbXadmin")
    #Step4: Enter password
    login_page.set_password("IGTtest1")
    #Checkpoint1: Check popup dialog title
    self.assertEqual(login_page.get_DiaglogTitle(),"Sign in")
    #Step5: Cancel dialog
    login_page.click_cancel()


if __name__ == "__main__":
  unittest.main()

Ok, 那么我們回頭來(lái)看,Page模式是否解決了上邊的四個(gè)方面的問題:

1. 易讀性: 現(xiàn)在單看test_login方法,確實(shí)有點(diǎn)test case的樣子了,每一步都很明了

2. 可擴(kuò)展性:由于把每個(gè)page的元素操作都集成到一個(gè)page類中,所以增刪改查都和方便

3. 可復(fù)用性: page的基本操作都變成了一個(gè)個(gè)的方法,在不同的test case中可以重復(fù)使用

4. 可維護(hù)性:如果頁(yè)面修改,只需修改相應(yīng)page類中的方法即可,無(wú)需修改每個(gè)test case

總結(jié):

Page模式給我們提供了一個(gè)很好的頁(yè)面和用例實(shí)現(xiàn)的分離機(jī)制,降低了耦合,提高了內(nèi)聚,可以使我們?cè)趙eb自動(dòng)化中做到游刃有余。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python RPA自動(dòng)化機(jī)器人模擬鼠標(biāo)鍵盤

    Python RPA自動(dòng)化機(jī)器人模擬鼠標(biāo)鍵盤

    這篇文章主要介紹了Python RPA自動(dòng)化機(jī)器人模擬鼠標(biāo)鍵盤,RPA,全稱為Robotic Process Automation,即機(jī)器人流程自動(dòng)化。我們可以利用RPA技術(shù)將工作中可重復(fù)的部分流程化,讓機(jī)器替我們完成這一工作
    2023-02-02
  • Python魔術(shù)方法專題

    Python魔術(shù)方法專題

    這篇文章主要介紹了Python魔術(shù)方法的的相關(guān)資料,文章講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Python利用pynput實(shí)現(xiàn)劃詞復(fù)制功能

    Python利用pynput實(shí)現(xiàn)劃詞復(fù)制功能

    這篇文章主要為大家想詳細(xì)介紹了Python如何利用pynput實(shí)現(xiàn)劃詞復(fù)制功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-05-05
  • Python開發(fā)的十個(gè)小貼士和技巧及長(zhǎng)常犯錯(cuò)誤

    Python開發(fā)的十個(gè)小貼士和技巧及長(zhǎng)常犯錯(cuò)誤

    這篇文章主要介紹了Python開發(fā)的十個(gè)小貼士和技巧,其中一些是初學(xué)這門語(yǔ)言常常會(huì)犯的錯(cuò)誤,小編給大家一一列舉出來(lái)了,需要的朋友可以參考下
    2018-09-09
  • python requests.post帶head和body的實(shí)例

    python requests.post帶head和body的實(shí)例

    今天小編就為大家分享一篇python requests.post帶head和body的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 詳解python的運(yùn)算符與表達(dá)式

    詳解python的運(yùn)算符與表達(dá)式

    這篇文章主要為大家介紹了python的運(yùn)算符與表達(dá)式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • Python?Pandas中的分組聚合操作詳解

    Python?Pandas中的分組聚合操作詳解

    Pandas是Python中用于數(shù)據(jù)分析的重要工具,提供了豐富的數(shù)據(jù)操作方法,本文將介紹?Pandas?中的數(shù)據(jù)分組方法以及不同的聚合操作,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-11-11
  • Python實(shí)現(xiàn)端口檢測(cè)的方法

    Python實(shí)現(xiàn)端口檢測(cè)的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)端口檢測(cè)的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • Pytest初學(xué)者快速上手高效Python測(cè)試指南

    Pytest初學(xué)者快速上手高效Python測(cè)試指南

    這篇文章主要為大家介紹了Pytest初學(xué)者快速上手的高效Python測(cè)試指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python實(shí)現(xiàn)的爬取百度貼吧圖片功能完整示例

    Python實(shí)現(xiàn)的爬取百度貼吧圖片功能完整示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的爬取百度貼吧圖片功能,結(jié)合完整實(shí)例形式分析了Python實(shí)現(xiàn)的百度貼吧圖片爬蟲相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05

最新評(píng)論