Python Selenium框架搭建与使用
Selenium是一个用于测试Web应用程序的框架,它可以直接在浏览器中运行,模拟真实用户的操作。Selenium支持多种浏览器和语言,其中Python是最常用的一种。本文将介绍如何使用Python和Selenium搭建一个自动化测试框架,并实现一些基本的功能。
安装Selenium
要使用Selenium,首先需要安装Selenium库和浏览器驱动。Selenium库可以通过pip命令安装:
pip install selenium
浏览器驱动需要根据不同的浏览器下载对应的版本,例如Firefox浏览器需要下载geckodriver,Chrome浏览器需要下载chromedriver。下载后,需要将驱动文件放在系统的PATH目录下,或者在代码中指定驱动文件的路径。
使用Selenium
要使用Selenium,首先需要导入selenium模块,并创建一个webdriver对象,这个对象可以控制浏览器的行为。例如,下面的代码创建了一个Firefox浏览器对象,并访问了实验楼网站:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.shiyanlou.com")
Selenium提供了多种方法来定位网页上的元素,例如通过id、name、class、tag、xpath等。定位到元素后,可以对元素进行操作,例如点击、输入、获取属性等。例如,下面的代码定位到百度首页的搜索框,并输入“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还提供了一些常用的浏览器操作,例如设置窗口大小、刷新页面、后退、前进、关闭等。例如,下面的代码设置了窗口大小为800x400,并刷新了页面:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.set_window_size(800, 400)
driver.refresh()
搭建测试框架
为了提高测试用例的可维护性和可读性,我们可以使用Page Object模式来搭建测试框架。Page Object模式是将页面的元素定位和业务操作分开,每个页面对应一个对象类,测试用例只调用对象类的方法,而不直接操作元素。这样可以避免页面变化导致测试用例频繁修改的问题。
例如,我们可以为51Testing软件测试论坛的首页和登录页分别创建一个对象类,如下所示:
# 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
然后,我们可以编写一个测试用例,使用unittest模块来组织和执行测试。例如,下面的代码测试了登录功能是否正常:
# 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")
运行上面的代码,可以看到浏览器自动打开51Testing网站,输入用户名和密码,点击登录按钮,然后断言欢迎文本是否与用户名一致。
总结
本文介绍了如何使用Python和Selenium搭建一个自动化测试框架,并实现一些基本的功能。Selenium是一个强大而灵活的工具,可以用来测试各种Web应用程序。通过使用Page Object模式,可以提高测试用例的可维护性和可读性。当然,Selenium还有很多其他的特性和用法,有兴趣的读者可以进一步学习和探索。
python相关课程推荐:python相关课程