Web 自动化测试通常使用 Selenium、Playwright 等工具来控制浏览器和进行测试。以下是使用 Python 和 Selenium 框架编写的详细 Web 自动化测试脚本教程。
一、前期准备
安装 Python:确保已经安装了 Python (版本3.7及以上)。
安装 Selenium:
在终端中运行以下命令安装 Selenium:
pip install selenium
- 安装 WebDriver:根据你要测试的浏览器下载对应的 WebDriver,比如 Chrome 使用 ChromeDriver。
• 将 WebDriver 放到环境变量路径或指定路径中,供 Selenium 调用。
二、编写测试脚本
1. 基本自动化测试脚本
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
# 初始化 Chrome 浏览器
driver = webdriver.Chrome()
# 打开目标网站
driver.get("https://www.google.com")
# 在 Google 搜索框中输入查询
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Selenium Python 教程")
search_box.send_keys(Keys.RETURN)
# 等待页面加载
time.sleep(2)
# 查找并打印页面标题
print(driver.title)
# 关闭浏览器
driver.quit()
2. 详细解释
• webdriver.Chrome(): 初始化 Chrome 浏览器。如果使用其他浏览器,比如 Firefox,可以使用 webdriver.Firefox()。
• driver.get(url): 打开指定的 URL 页面。
• driver.find_element(By.<METHOD>, "<value>"): 根据不同定位方法查找页面元素。例如可以通过 By.ID、By.CLASS_NAME、By.CSS_SELECTOR 等。
• send_keys(): 模拟用户输入,如在输入框中输入文本。
• Keys.RETURN: 模拟按下回车键。
• driver.quit(): 关闭浏览器。
3. 自动化测试脚本示例:登录网站
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
# 初始化浏览器
driver = webdriver.Chrome()
# 打开登录页面
driver.get("https://example.com/login")
# 输入用户名
username = driver.find_element(By.ID, "username")
username.send_keys("test_user")
# 输入密码
password = driver.find_element(By.ID, "password")
password.send_keys("password123")
# 点击登录按钮
login_button = driver.find_element(By.ID, "loginButton")
login_button.click()
# 等待页面跳转
time.sleep(3)
# 检查登录是否成功
if "Dashboard" in driver.title:
print("登录成功!")
else:
print("登录失败!")
# 关闭浏览器
driver.quit()
三、Selenium 常用元素操作
- 查找元素:
• find_element(By.ID, "element_id"): 通过 ID 查找元素。
• find_element(By.CLASS_NAME, "class_name"): 通过类名查找元素。
• find_element(By.NAME, "element_name"): 通过名称查找元素。
• find_element(By.CSS_SELECTOR, "css_selector"): 通过 CSS 选择器查找元素。
- 常见的元素操作:
• click(): 模拟点击。
• send_keys(): 模拟文本输入。
• clear(): 清空输入框。
• get_attribute(): 获取元素属性值。
• text: 获取元素文本。
- 等待机制:
• 显式等待:等待某个条件成立。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "element_id"))
)
• 隐式等待:等待指定时间,默认检查页面加载状态。
driver.implicitly_wait(10) # 最多等待 10 秒
四、组织测试用例
可以使用 unittest 框架来组织和管理测试用例。
示例:使用 unittest
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
class GoogleSearchTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(10)
def test_search_in_google(self):
driver = self.driver
driver.get("https://www.google.com")
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Selenium Python 教程")
search_box.send_keys(Keys.RETURN)
time.sleep(2)
self.assertIn("Selenium Python 教程", driver.title)
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()
解释:
• setUp(): 每个测试用例执行前都会调用这个方法,用于设置初始条件。
• test_search_in_google(): 实际的测试用例。
• tearDown(): 每个测试用例执行后都会调用,用于清理工作,比如关闭浏览器。
五、常用的高级操作
- 处理弹窗:
• 接受弹窗:
alert = driver.switch_to.alert
alert.accept()
• 取消弹窗:
alert.dismiss()
- 处理多窗口:
• 获取当前窗口句柄:
current_window = driver.current_window_handle
• 切换到新窗口:
driver.switch_to.window(new_window_handle)
- 执行 JavaScript 代码:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
六、扩展与集成
集成到 CI/CD:可以将 Selenium 测试脚本集成到 Jenkins、GitLab CI 等工具中,作为自动化测试的一部分。
报告生成:使用 Allure 等报告工具生成测试报告,或直接使用 unittest 的 TextTestRunner 生成控制台报告。
总结
Selenium 是一个强大的 Web 自动化测试框架,通过 Python 语言可以轻松地编写自动化测试脚本。结合 unittest 等测试框架,能够快速构建高效的自动化测试流程。
版权归原作者 不会技术的张同学 所有, 如有侵权,请联系我们删除。