Python+Selenium自動化測試框架

Python+Senium自動化測試框架,採用POM測試框架,將測試拆解成測試報告,測試組件,測試用例,測試方法,頁面元素及其動作。其中頁面元素及其動作將封裝到page類中,頁面元素的操作步驟放到testcase中,組成一條測試用例。

創建一個main方法,將test case放入test suit中,執行並生成測試報告。工程結構圖如下:

Base page的代碼如下:

from selenium.webdriver.support.wait import WebDriverWait
'''
這個類主要是完成所有頁面的一些公共方法的封裝
'''
class Page(object):
    #初始化
    def __init__(self,se_driver):
        self.driver = se_driver

    #定義open方法
    def open(self,url):
        self.driver.get(url)
        self.driver.maximize_window()
        
    #定義script方法,用於執行js腳本
    def script(self,src):
        self.driver.execute_script(src)
    
    #重寫元素定位的方法
    def find_element(self,*loc):
        return self.driver.find_element(*loc)
                      
    def input_text(self, loc, text):
        self.find_element(*loc).send_keys(text)

    def click(self, loc):
        self.find_element(*loc).click()

    def get_title(self):
        return self.driver.title

login page代碼如下:

from selenium.webdriver.common.by import By
import time
from pages.base_page import Page

class LoginPage(Page):
    user_loc = (By.CSS_SELECTOR,".user > input")
    password_loc = (By.CSS_SELECTOR,".pass > input")
    submit_loc = (By.LINK_TEXT,"登 錄")


    def click_link(self):
        self.find_element(*self.link_loc).click()
        time.sleep(3)           

    def run_case(self,value1,value2):
        self.input_text(self.user_loc, value1)
        self.input_text(self.password_loc, value2)
        time.sleep(20)      
        self.click(self.submit_loc)
        time.sleep(5) 

test login代碼如下:

import unittest
from selenium import webdriver
from pages.login_page import LoginPage
import time
class TestLogin(unittest.TestCase):
    ''' 登錄測試 '''
    def setUp(self):
        self.url = "*************"
        self.driver = webdriver.Chrome()

    def tearDown(self):
        time.sleep(5)
        self.driver.quit()
        # self.assertEqual([],self.verificationErrors)

    def test_login(self):
        ''' 登錄系統 '''
        sp = LoginPage(self.driver)
        sp.open(self.url)
        sp.run_case("3333","11212")

main代碼如下:

import unittest
import HTMLTestRunner
import time
#relate path
testcase_path = ".\\testcase"
def creat_suite():
    uit = unittest.TestSuite()
    discover = unittest.defaultTestLoader.discover(testcase_path,pattern="test_*.py")
    for test_suite in discover:
        # print(test_suite)
        for test_case in test_suite:
            uit.addTest(test_case)
    return uit

suite = creat_suite()
now=time.strftime("%Y-%m-%d-%H%M%S")
filename='.\\report\\TestReprot'+now+'.html'

fp = open(filename,"wb")
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title="測試結果",description="執行結果")
runner.run(suite)
fp.close()

框架缺點:

未能將測試數據及站點配置信息進行分離,如果站點數據有改動,或者頁面元素有改動,依賴頁面元素的測試用例都需要改動,維護不方便,歡迎大家提出改進意見

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章