天天看點

最佳實踐,高效編寫Web自動化測試強制互動方法封裝技巧

作者:自由丶昙花一現
最佳實踐,高效編寫Web自動化測試強制互動方法封裝技巧

前言:

Web自動化測試是現代軟體開發中必不可少的部分。Web自動化測試可以幫助測試人員快速地驗證頁面功能并發現潛在的問題。然而,在實際測試過程中,有時候我們需要經過一些強制互動才能進入到目标頁面。例如,我們需要在登入頁面輸入使用者名和密碼,才能進入系統中進行測試。在這種情況下,如何優雅地封裝強制互動方法,是Web自動化測試中的一項重要任務。

本文将介紹如何使用Python語言封裝Web自動化架構中的強制互動方法。

一、Web自動化測試的基本原理

Web自動化測試的基本原理是通過模拟使用者在浏覽器中的操作,來對Web應用程式進行自動化的測試。Web自動化測試常用的方式是通過Selenium的WebDriver驅動來模拟使用者在浏覽器中的操作。Selenium的WebDriver提供了一套API,可以用來進行解析HTML元素、模拟使用者鍵盤滑鼠輸入、頁面跳轉操作等。

二、封裝強制互動方法

在Web自動化測試中,我們經常需要在目标頁面中完成一些強制互動,例如輸入驗證碼、填寫登入資訊、處理彈窗等等。這些強制互動可能會打斷我們的自動化測試流程,是以需要我們對其進行封裝。本文将介紹如何封裝一個通用的輸入框強制互動方法,以供Web自動化測試中使用。

1、輸入框強制互動

在Web頁面中,輸入框強制互動是非常常見的一種互動方式。我們需要輸入驗證碼、使用者名、密碼等等資訊,才能繼續進行下一步操作。在自動化測試中,我們需要模拟這些輸入框的輸入過程。下面是一個示例代碼:

def input_box_interaction(driver, element_selector, input_text):
"""
輸入框強制互動方法
:param driver: WebDriver對象
:param element_selector: 元素選擇器
:param input_text: 輸入框中需要輸入的文本
"""
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, element_selector))
)
element.clear()
element.send_keys("{}".format(input_text))           

上面的代碼中,我們定義了一個`input_box_interaction`方法來實作輸入框強制互動。這個方法接受三個參數:`driver`表示WebDriver對象,`element_selector`表示目标元素的選擇器,`input_text`表示輸入框中需要輸入的文本。在方法内部,我們使用`WebDriverWait`方法來等待目标元素加載完成。等待完成後,我們首先使用`element.clear()`方法來清空輸入框中的内容,然後使用`element.send_keys()`方法來模拟輸入操作。

使用這個方法,我們可以在Web自動化測試中快速完成輸入框的強制互動操作,提高測試效率。

2、其他強制互動

除了輸入框強制互動,Web自動化測試中還有許多其他的強制互動,例如處理彈窗、滑動驗證碼、等待頁面加載等等。針對不同的強制互動,我們需要編寫不同的方法來進行封裝。下面是一個處理彈窗的示例代碼:

def alert_interaction(driver, confirm=True):
"""
處理彈窗方法
:param driver: WebDriver對象
:param confirm: True表示點選确認按鈕,False表示點選取消按鈕
"""
alert = WebDriverWait(driver, 10).until(EC.alert_is_present())
if confirm:
alert.accept()
else:
alert.dismiss()           

上面的代碼中,我們定義了一個`alert_interaction`方法來實作處理彈窗。這個方法接受兩個參數:`driver`表示WebDriver對象,`confirm`表示是否點選确認按鈕。在方法内部,我們使用`WebDriverWait`方法來等待彈窗出現,然後使用`alert.accept()`或`alert.dismiss()`方法來點選确認或取消按鈕。

通過這樣的封裝,我們可以在Web自動化測試中快速完成彈窗處理操作,提高測試效率。

三、封裝基礎類方法

在Web自動化測試中,我們需要編寫很多類似的方法,例如擷取元素、驗證元素是否存在、等待頁面加載等等。這些方法可以封裝到基礎類中,在測試腳本中繼承基礎類,以友善地重用這些方法。下面是一個基礎類的示例代碼:

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

def get_element(self, element_selector):
"""
擷取單個元素
:param element_selector: 元素選擇器
:return: 傳回WebElement對象
"""
element = WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, element_selector))
)
return element

def get_elements(self, element_selector):
"""
擷取多個元素
:param element_selector: 元素選擇器
:return: 傳回WebElement對象清單
"""
elements = WebDriverWait(self.driver, 10).until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, element_selector))
)
return elements

def is_element_exist(self, element_selector):
"""
判斷元素是否存在
:param element_selector: 元素選擇器
:return: True或False
"""
try:
self.get_element(element_selector)
return True
except TimeoutException:
return False

def wait_for_page_load(self):
"""
等待頁面加載完成
"""
WebDriverWait(self.driver, 10).until(
lambda driver: driver.execute_script('return document.readyState') == 'complete'
)           

在上面的代碼中,我們定義了一個基礎類`BasePage`,它包含了擷取單個元素、擷取多個元素、判斷元素是否存在、等待頁面加載等基礎類方法。例如`get_element`方法用來擷取單個元素,`get_elements`用于擷取多個元素,`is_element_exist`用于判斷元素是否存在,`wait_for_page_load`用于等待頁面加載完成。在測試腳本中,我們可以繼承`BasePage`類來重用這些方法。

四、總結

本文介紹了如何使用Python語言封裝Web自動化架構中的強制互動方法。我們首先介紹了Web自動化測試的基本原理和Selenium的WebDriver驅動,然後針對輸入框強制互動、處理彈窗等常見的強制互動,編寫了相應的封裝方法。最後,我們還介紹了如何封裝基礎類方法,以友善測試腳本的編寫。通過這樣的封裝,我們可以快速地完成Web自動化測試,并提高測試效率。

繼續閱讀