App下載

Python Selenium框架搭建與使用

我正好喜歡 2023-06-25 09:59:35 瀏覽數(shù) (1662)
反饋

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)課程

0 人點(diǎn)贊