Selenium是一個(gè)用于測(cè)試Web應(yīng)用程序的框架,它可以直接在瀏覽器中運(yùn)行,模擬真實(shí)用戶(hù)的操作。Selenium支持多種瀏覽器和語(yǔ)言,其中Python是最常用的一種。本文將介紹如何使用Python和Selenium搭建一個(gè)自動(dòng)化測(cè)試框架,并實(shí)現(xiàn)一些基本的功能。
安裝Selenium
要使用Selenium,首先需要安裝Selenium庫(kù)和瀏覽器驅(qū)動(dòng)。Selenium庫(kù)可以通過(guò)pip命令安裝:
pip install selenium
瀏覽器驅(qū)動(dòng)需要根據(jù)不同的瀏覽器下載對(duì)應(yīng)的版本,例如Firefox瀏覽器需要下載geckodriver,Chrome瀏覽器需要下載chromedriver。下載后,需要將驅(qū)動(dòng)文件放在系統(tǒng)的PATH目錄下,或者在代碼中指定驅(qū)動(dòng)文件的路徑。
使用Selenium
要使用Selenium,首先需要導(dǎo)入selenium模塊,并創(chuàng)建一個(gè)webdriver對(duì)象,這個(gè)對(duì)象可以控制瀏覽器的行為。例如,下面的代碼創(chuàng)建了一個(gè)Firefox瀏覽器對(duì)象,并訪(fǎng)問(wèn)了實(shí)驗(yàn)樓網(wǎng)站:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.shiyanlou.com")
Selenium提供了多種方法來(lái)定位網(wǎng)頁(yè)上的元素,例如通過(guò)id、name、class、tag、xpath等。定位到元素后,可以對(duì)元素進(jìn)行操作,例如點(diǎn)擊、輸入、獲取屬性等。例如,下面的代碼定位到百度首頁(yè)的搜索框,并輸入“selenium”:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
search_box = driver.find_element_by_id("kw")
search_box.send_keys("selenium")
Selenium還提供了一些常用的瀏覽器操作,例如設(shè)置窗口大小、刷新頁(yè)面、后退、前進(jìn)、關(guān)閉等。例如,下面的代碼設(shè)置了窗口大小為800x400,并刷新了頁(yè)面:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.set_window_size(800, 400)
driver.refresh()
搭建測(cè)試框架
為了提高測(cè)試用例的可維護(hù)性和可讀性,我們可以使用Page Object模式來(lái)搭建測(cè)試框架。Page Object模式是將頁(yè)面的元素定位和業(yè)務(wù)操作分開(kāi),每個(gè)頁(yè)面對(duì)應(yīng)一個(gè)對(duì)象類(lèi),測(cè)試用例只調(diào)用對(duì)象類(lèi)的方法,而不直接操作元素。這樣可以避免頁(yè)面變化導(dǎo)致測(cè)試用例頻繁修改的問(wèn)題。
例如,我們可以為51Testing軟件測(cè)試論壇的首頁(yè)和登錄頁(yè)分別創(chuàng)建一個(gè)對(duì)象類(lèi),如下所示:
# home_page.py
from selenium import webdriver
from selenium.webdriver.common.by import By
class HomePage:
def __init__(self, driver):
self.driver = driver
self.url = "http://bbs.51testing.com/forum.php"
self.username_input = (By.ID, "ls_username")
self.password_input = (By.ID, "ls_password")
self.login_button = (By.XPATH, '//*[@id="lsform"]/div/div[1]/table/tbody/tr[2]/td[3]/button')
def open(self):
self.driver.get(self.url)
def input_username(self, username):
self.driver.find_element(*self.username_input).send_keys(username)
def input_password(self, password):
self.driver.find_element(*self.password_input).send_keys(password)
def click_login_button(self):
self.driver.find_element(*self.login_button).click()
def login(self, username, password):
self.input_username(username)
self.input_password(password)
self.click_login_button()
# login_page.py
from selenium import webdriver
from selenium.webdriver.common.by import By
class LoginPage:
def __init__(self, driver):
self.driver = driver
self.welcome_text = (By.CSS_SELECTOR, ".vwmy a")
def get_welcome_text(self):
return self.driver.find_element(*self.welcome_text).text
然后,我們可以編寫(xiě)一個(gè)測(cè)試用例,使用unittest模塊來(lái)組織和執(zhí)行測(cè)試。例如,下面的代碼測(cè)試了登錄功能是否正常:
# test_login.py
import unittest
from selenium import webdriver
from home_page import HomePage
from login_page import LoginPage
class TestLogin(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.home_page = HomePage(self.driver)
self.login_page = LoginPage(self.driver)
def tearDown(self):
self.driver.quit()
def test_login_success(self):
self.home_page.open()
self.home_page.login("your_username", "your_password")
welcome_text = self.login_page.get_welcome_text()
self.assertEqual(welcome_text, "your_username")
運(yùn)行上面的代碼,可以看到瀏覽器自動(dòng)打開(kāi)51Testing網(wǎng)站,輸入用戶(hù)名和密碼,點(diǎn)擊登錄按鈕,然后斷言歡迎文本是否與用戶(hù)名一致。
總結(jié)
本文介紹了如何使用Python和Selenium搭建一個(gè)自動(dòng)化測(cè)試框架,并實(shí)現(xiàn)一些基本的功能。Selenium是一個(gè)強(qiáng)大而靈活的工具,可以用來(lái)測(cè)試各種Web應(yīng)用程序。通過(guò)使用Page Object模式,可以提高測(cè)試用例的可維護(hù)性和可讀性。當(dāng)然,Selenium還有很多其他的特性和用法,有興趣的讀者可以進(jìn)一步學(xué)習(xí)和探索。
python相關(guān)課程推薦:python相關(guān)課程