1. 程式人生 > 實用技巧 >37-2 web自動化實戰四 basepage的實現和封裝

37-2 web自動化實戰四 basepage的實現和封裝

前情提要:

通用方法和特定方法

比如:查詢某個元素的方法 def find(locator),只要傳入locator,就可以呼叫該函式,可以通用的---一般放在common中,例如:selenium_handler.py

對於登入操作,需要先定位元素,每個專案中定位元素的方式可能是不一樣的,所以對於登入操作,應該是專案的特定方法.

80\46min

1.basepage的實現

1).專案架構:

------selenium_handler.py放在common中,在selenium_handler實現封裝

-------middleware中新建pages 包(表示:頁面操作) ----比如:登入操作,就屬於頁面的行為;登入頁面有:免費註冊、忘記密碼、聯絡我們等操作行為

在pages中可以有login.py操作

2).實現login.py登入操作的封裝

將前面的測試用例test_login中登入部分的程式碼直接拿過來進行封裝;

-----使用者名稱、密碼進行引數化。

-----driver物件在很多頁面都需要用到,所以定義為類屬性,方便呼叫

class LoginPage:
    """登入"""

    #初始化driver
    def __init__(self,driver):
        self.driver = driver

    def login(self,username,password):
        #
訪問登入頁面 url = "http://120.78.128.25:8765/Index/login.html" self.driver.get(url) # 元素定位+元素操作,輸入使用者名稱和密碼,點選登入進行提交 self.driver.find_element_by_name("phone").send_keys(username) self.driver.find_element_by_name("password").send_keys(password) self.driver.find_element_by_class_name(
"btn-special").click()

架構:

login.py封裝完成,在測試用例中test_login.py中如何去呼叫呢------在test_login.py中直接呼叫即可。

import pytest
from middware.handler import HandlerMiddle
from middware.pages.login import LoginPage

#獲取excel中login資料
data = HandlerMiddle.excel.read_data("login")

class TestLogin():
    """登入功能的測試類"""
    @pytest.mark.smoke
    @pytest.mark.error
    @pytest.mark.parametrize("test_info",data)
    def test_login_error(self,test_info,driver):
        """登入失敗測試步驟
        1.開啟瀏覽器
        2.訪問登入頁面
        3.元素定位+元素操作,輸入使用者名稱和密碼,點選登入
        4.通過獲取頁面內容得到實際結果,進行斷言
        :return:
        """

        #訪問登入頁面
        LoginPage(driver).login(username=eval(test_info["data"])["username"],
                                password=eval(test_info["data"])["password"])


        #通過獲取頁面內容得到實際結果,進行斷言
        #實際結果是在頁面上的提示,再次進行定位
        actual_result = driver.find_element_by_class_name("form-error-info").text
        expected_result = test_info["expected_result"]
        #斷言
        assert actual_result in expected_result

執行run.py, test_login.py中的方法test_login_error()中的driver去conftest檔案中找fixture中的函式名(driver),訪問登入頁面呼叫LoginPage(driver),到此邏輯基本理順了。

總結:

登入操作封裝成類,初始化LoginPage()物件---->測試程式碼和頁面操作分開。

-----這麼做的好處:前端工程師修改頁面,就不需要修改test_login.py測試用例。

測試邏輯改了,那麼LoginPage是不需要修改的。

WEB

頁面物件思想---PageObject

下篇部落格詳解