Python自動化測試學習(二)— Page Object實例


一、認識PO模式:

         PO設計模式簡單講就是講頁面對象和業務邏輯分層,使得代碼清晰,可維護性高

二、 PO設計模式優點:

  1.  減少代碼的可重復性
  2.  讓測試具有可讀性
  3.  提高了代碼的可維護性(當被測程序較多時,可以方便添加)

三、PO模式常用目錄結構

  • pages:一般用來存放頁面元素對象
  • report:存放測試報告
  • testcase:測試用例
  • ......

四、通過 Page Object 設計模式來實現,以163郵箱登錄為例:

BasePage類,所有頁面元素定位相關的基類

1、可變參數*loc作為參數傳遞,使用可變參數時會使得公共方法會更少。例如之前寫的java自動化代碼,將id、css、xpath等定位方法都封裝了一遍,導致相同的代碼較多。

2、定位frame框架。

  1. 通過元素定位先定位到frame框架。
  1. 再通過driver.switch_to.frame(“”)切換到frame

 

from selenium import webdriver
from time import sleep
'''
頁面元素定位的基類
'''


class BasePage(object):

    def __init__(self, driver):
        print("進入Basepage")
        self.driver = driver
    '''
    元素定位
    '''
    def find_element(self, *loc):
        return self.driver.find_element(*loc)
    '''
    frame切換
    '''
    def switch_frame(self, *loc):
        xpath_frame = self.driver.find_element(*loc)
        self.driver.switch_to.frame(xpath_frame)

    '''
    打開瀏覽器
    '''
    def open_browser(self, url):
        print("調用打開瀏覽器方法....")
        self.driver.get(url)
        sleep(3)
        # 設置瀏覽器打開樣式
        self.driver.maximize_window()
        sleep(3)
        self.driver.implicitly_wait(10)
BasePage

LoginPage類,登錄頁面相關元素定位

from src.pages.BasePage import BasePage
from selenium.webdriver.common.by import By
from time import sleep
# 相對導入 .代表當前模塊,..代表上層模塊,...代表上上層模塊,依次類推
# 絕對導入 import A.B 或 from A import B
'''
登錄頁面元素操作
'''


class LoginPage(BasePage):
    username_loc = (By.NAME, "email")
    password_loc = (By.NAME, "password")
    loginbut_loc = (By.ID, "dologin")
    frame_loc = (By.XPATH, "//div[@id='loginDiv']/iframe")

    # 輸入用戶名

    def login_username(self, username):
        self.find_element(*self.username_loc).send_keys(username)

    # 輸入密碼

    def login_password(self, password):
        self.find_element(*self.password_loc).send_keys(password)

    # 登錄
    def login_button(self):
        self.find_element(*self.loginbut_loc).click()

    # 切換frame
    def switch_to_frame(self):
        self.switch_frame(*self.frame_loc)

    # 登錄操作
    def login_operation(self, username, password):
        print("進入登錄操作方法")
        self.switch_to_frame()
        self.login_username(username)
        self.login_password(password)
        self.login_button()
        sleep(3)
LoginPage

LoginCase類,測試用例

1、首先繼承於unittest下的TestCase類

2、斷言判斷assertEqual

from src.pages.LoginPage import LoginPage
from selenium import webdriver
from time import sleep
import unittest

'''
用戶登錄測試用例
'''


class LoginCase(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome()
        self.url = "http://mail.163.com/"
        # 打開瀏覽器
        LoginPage(self.driver).open_browser(self.url)
        sleep(3)
    '''
    用戶名或密碼錯誤
    '''
    def test_login_1(self):
        LoginPage(self.driver).login_operation(username="1152", password="1213131")
        self.assertEqual("15210996111", "1152", "用戶名或密碼錯誤")
        print("測試用例成功")

    def tearDown(self):
        self.driver.quit()
LoginCase

 


免責聲明!

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



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