前言
python对于版本十分敏感,建议统一使用最新版本,减少报错可能。
一、搭建自动化环境
1.下载python
地址:Python Releases for Windows | Python.org
选择需要的版本下载

下载后长这样

一般默认既可,如果对下载路径或者要下载其他的东西,可以选择自定义

2.下载PyCharm
地址:下载 PyCharm:JetBrains 出品的用于数据科学和 Web 开发的 Python IDE

下载步骤
1

2

3

4

3.安装Selenium
(1)pip包管理工具
命令提示符命令:
pip install selenium==3.141.0
注:需要明确版本的就写全部,不然就写前三个英文既可以
(2)PyCharm安装
1

2

3

4下载成功

4.安装浏览器驱动
查看谷歌版本
1

2

下载谷歌驱动
网址:谷歌浏览器114之前、147、148版本驱动下载,实时更新_chromedriver122-CSDN博客

将压缩包解压到与python.exe同级
二、Selenium工具的基本应用
1.Selenium元素定位方法
案例
使用谷歌打开

使用功能快速定位到组件位置

或者Ctrl+F,打开查找,输入进行定位

定位格式
输入框: css autocomplete='off'
搜索按钮: xpath //*text()='搜索'
购物车按钮: class c-n fl
代码
python
# 1.导包
from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
import time # 加个等待,防止页面没加载完报错
# 2.创建浏览器驱动(修复这里!自动匹配驱动)
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
# 3.打开web端项目页面
driver.get("https://hmshop-test.itheima.net/index.php")
time.sleep(2) # 等待页面加载
print("登录成功")
# 4.页面元素定位
# ①商品搜索输入框
search_input = driver.find_element(By.CSS_SELECTOR, "[autocomplete='off']")
search_input.send_keys("手机") # 测试输入内容
# ②搜索按钮
search_btn = driver.find_element(By.XPATH, "//*[text()='搜索']")
search_btn.click() # 点击搜索
time.sleep(2)
# ③加入购物车按钮
add_cart = driver.find_element(By.CSS_SELECTOR, ".c-n.fl")
add_cart.click() # 点击加入购物车
time.sleep(3)
driver.quit() # 关闭浏览器
print("搜索成功")
2.selenium常用的操作方法
案例
账号:13800000002
密码:929itheima.CN032@.当前日期
代码:
python
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 1. 驱动初始化
service = Service("./chromedriver.exe")
driver = webdriver.Chrome(service=service)
# 2. 基础配置
driver.maximize_window()
driver.implicitly_wait(10)
driver.set_page_load_timeout(15)
# 3. 打开登录页
driver.get("https://ihrm-java.itheima.net/#/login")
# 4. 输入账号
user_input = driver.find_element(By.CSS_SELECTOR, "[name='username']")
user_input.clear()
user_input.send_keys("13800000002")
# 5. 输入密码
pwd_input = driver.find_element(By.CSS_SELECTOR, "[name='password']")
pwd_input.clear()
pwd_input.send_keys("929itheima.CN032@.20260610")
# ========== 这里用你按钮的专属类名定位 ==========
login_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "button.loginBtn"))
)
login_btn.click()
# 6. 登录后操作
time.sleep(3)
driver.get_screenshot_as_file("登录成功.png")
print("登录成功~~~~")
# 7. 关闭浏览器
driver.quit()
目录:

结果:

三、自动化测试框架
案例
创建test_sum.py和test_add.py文件。
在test_sum.py文件中,使用unittest框架测试定义的函数my_sum()是否为求和函数。
在test_add.py文件中,使用pytest框架测试定义的函数add()是否为求和函数。
1.unittest框架
代码
python
# 使用unittest框架,管理测试用例
import unittest
def my_sum(a, b):
return a + b
class TestSum(unittest.TestCase):
def test01_sum(self):
res = my_sum(4,5)
self.assertEqual(res, 9)
结果

2.pytest框架
代码
python
# 使用pytest框架,管理测试用例
import pytest
def add(a,b):
return a + b
class TestAdd:
def test_add(self):
# assert test_add(1,2) == 3
res = add(4,5)
assert res == 9
下载pytest(没有的话)

命令
python
pip install pytest
切换运行方式

结果

四、学成在线教育平台测试
1.测试环境准备

2.定位学成在线教育平台首页元素
(1)搞定Katalon Recorder
法1:谷歌浏览器应用商店
进入应用商店

搜索Katalon Recorder

添加后

法2:外部下载(适用应用商店进不去的情况)
下载
Katalon Recorder 7.0.1 Crx (Old Version) - Crx4Chrome
翻到下面

长这样

打开扩展程序

将我们下载的东西直接拖进来后,选择添加扩展程序

结果

(2)Katalon Recorder使用
创建

开启录制,获取定位

点击网页的功能,获取定位

导出

定位

3.测试登录和退出功能
1.UI界面手动操作
①了解要涉及哪些页面
②记录定位元素的元素定位信息(元素定位方式,元素定位数据)
③梳理针对元素进行何种操作
登录成功--测试用例
登录按钮://*text()='登录'
账号输入框:placeholder='请输入登录手机号'
密码输入框:placeholder='请输入登录密码'
登录按钮://button/spantext()='登录'
登录成功之后://*contains(text(),'个人中心')
退出登录--测试用例
账号名称://div@class='dropbtn'/span
退出登录按钮://*text()='退出登录'
2.代码的编写(使用Selenium模拟浏览器操作,unittes框架管理测试用例脚本)
-
下载浏览器驱动
-
下载Selenium
-
链接:学成在线2.0
-
账号:12022222227
-
密码:037itheima.CN032@.20260613
导包
import time
import unittest
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECclass TestSum(unittest.TestCase):
# 定义类对象
service = None
driver = None@classmethod def setUpClass(cls) -> None: # 创建浏览器驱动对象 cls.service = Service("chromedriver.exe") cls.driver = webdriver.Chrome(service=cls.service) # 窗口最大化 cls.driver.maximize_window() # 设置隐式等待时间--10s cls.driver.implicitly_wait(10) # 增加页面加载超时,防止卡死 cls.driver.set_page_load_timeout(20) @classmethod def tearDownClass(cls) -> None: # 关闭浏览器 cls.driver.quit() # 测试用例:登录成功和退出登录 def test01_login_success_loginout(self): # 1.进入首页 self.driver.get('https://xczx2-portal.itheima.net/') # 2.进入登录页面(点击登录按钮,跳转到登录页面) dl = self.driver.find_element(By.XPATH, "//*[text()='登录']") dl.click() # 3.完成登录操作 # ①请输入手机号 number = self.driver.find_element(By.CSS_SELECTOR, "[placeholder='请输入登录手机号']") number.clear() number.send_keys('12022222227') # ②请输入密码 password = self.driver.find_element(By.CSS_SELECTOR, "[placeholder='请输入登录密码']") password.clear() password.send_keys('037itheima.CN032@.20260613') # ③点击登录按钮 self.driver.find_element(By.XPATH, "//button/span[text()='登录']").click() print("登录成功") # 4.断言--登录成功 is_sus = None try: is_sus = self.driver.find_element(By.CSS_SELECTOR, "a.personal") print("获取个人中心元素信息成功") except: print("获取个人中心元素信息失败,登录失败") self.assertIsNotNone(is_sus) # 判断元素是否为空 # 5.退出登录 # ① 鼠标悬停在账号信息上:1.创建鼠标对象;2.调用鼠标方法;3.执行鼠标操作 action = ActionChains(self.driver) action.move_to_element(self.driver.find_element(By.XPATH,"//div[@class='dropbtn']/span")) action.perform() # ② 点击"退出登录按钮" self.driver.find_element(By.XPATH, "//a[text()='退出登录']").click() time.sleep(2)
结果

视频演示
4.测试页面跳转功能
单击菜单栏中的"课程"文本链接可以从学成在线首页跳转到课程页面;单击"注册"文本链接可以跳转到注册页面,注册页面的效果如下图所示。
定位
课程 文件链接://*text()='课程'
断言-跳转课程页面成功://*contains(text(),'一级分类')
注册 文本链接://*text()='注册'
断言-跳转注册页面成功://*contains(text(),'注册协议')
代码编写
# 导包
import unittest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
class TestJumpPage(unittest.TestCase):
driver = None
Service = None
@classmethod
def setUpClass(cls) -> None:
# 创建浏览器驱动对象
cls.service = Service("chromedriver.exe")
cls.driver = webdriver.Chrome(service=cls.service)
# 窗口最大化
cls.driver.maximize_window()
# 设置隐式等待时间--10s
cls.driver.implicitly_wait(10)
# 增加页面加载超时,防止卡死
cls.driver.set_page_load_timeout(20)
@classmethod
def tearDownClass(cls) -> None:
# 关闭浏览器
cls.driver.quit()
# 测试用例:跳转页面(跳转课程,跳转注册页面)
def test01_jump_page(self):
# 1.进入首页
self.driver.get('https://xczx2-portal.itheima.net/')
# 2.跳转课程页面
self.driver.find_element(By.XPATH, "//*[text()='课程']").click()
# 3.断言--跳转课程页面成功
is_course_suc = None
try:
is_course_suc = self.driver.find_element(By.XPATH, "//*[contains(text(),'一级分类')]")
print("跳转课程页面成功")
except:
print("跳转课程页面失败")
self.assertIsNotNone(is_course_suc)
# 4.跳转注册页面
self.driver.find_element(By.XPATH, "//*[text()='注册']").click()
# 5.断言--跳转
is_register_suc = None
try:
is_register_suc = self.driver.find_element(By.XPATH, "//*[contains(text(),'注册协议')]")
print("跳转注册页面成功")
except:
print("跳转注册页面失败")
self.assertIsNotNone(is_register_suc)