这段代码是一个使用 Selenium 自动化测试框架编写的脚本,用于测试 ZTChat 网站的登录功能。我将以通俗易懂的方式为你解释其工作原理和测试逻辑。
整体功能概述
这个脚本的作用是模拟用户在浏览器中登录 ZTChat 网站的过程,并验证登录是否成功。它会自动完成以下操作:
1. 打开 Chrome 浏览器
2. 访问登录页面
3. 输入用户名和密码
4. 点击登录按钮
5. 检查是否成功跳转到主页
代码逐行解释
1. 导入必要的工具
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
import time
- Selenium:自动化浏览器的工具,就像一个虚拟用户,可以在浏览器中点击、输入文字等。
- WebDriver:控制浏览器的“司机”,这里使用 Chrome 浏览器。
- WebDriverWait 和 EC:等待页面元素加载完成的工具,避免因元素未加载而导致的错误。
- time:用于添加等待时间,让你能看到脚本的执行过程。
2. 配置测试参数
LOGIN_URL = "http://tiancj.xyz/ZTChat_login"
HOME_PAGE_URL = "http://tiancj.xyz/ZTChat_index"
CHROME_DRIVER_PATH = "C:\\chromedriver\\chromedriver.exe"
- LOGIN_URL:登录页面的网址。
- HOME_PAGE_URL:登录成功后应该跳转的主页网址。
- CHROME_DRIVER_PATH:Chrome 浏览器驱动的路径(需要提前下载)。
3. 测试函数 test_ztchat_login()
这是脚本的核心部分,包含了登录测试的完整流程。
初始化浏览器
service = Service(executable_path=CHROME_DRIVER_PATH)
driver = webdriver.Chrome(service=service)
driver.maximize_window()
打开登录页面
driver.get(LOGIN_URL)
print("已打开登录页面")
填写用户名和密码
wait = WebDriverWait(driver, 10)
username_input = wait.until(
EC.visibility_of_element_located((By.NAME, "username"))
)
username_input.send_keys("1")
time.sleep(3)
password_input = wait.until(
EC.visibility_of_element_located((By.NAME, "password"))
)
password_input.send_keys("1")
time.sleep(3)
- 等待元素加载:
WebDriverWait
会最多等待 10 秒,直到找到用户名和密码输入框。
- 输入内容:在输入框中填入用户名和密码(这里是
1
和 1
)。
- time.sleep(3):暂停 3 秒,方便你观察浏览器操作。
点击登录按钮
login_button = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "button[type='submit']"))
)
login_button.click()
- 等待登录按钮变得可点击(避免按钮还在加载中就点击),然后点击它。
验证登录结果
try:
wait.until(EC.url_to_be(HOME_PAGE_URL))
print("登录成功!已跳转到主页")
except:
error_msg = driver.find_element(By.ID, "loginMsg").text
raise AssertionError(f"登录失败: {error_msg}")
- 判断登录是否成功:检查当前 URL 是否变为主页 URL。
- 错误处理:如果登录失败,从页面上获取错误信息(例如“用户名或密码错误”)并显示。
清理工作
finally:
time.sleep(3)
driver.quit()
print("测试结束,浏览器已关闭")
为什么需要这些方法?
- 为什么使用
WebDriverWait
?
-
网页加载需要时间,如果元素还没加载完成就操作,会导致错误。WebDriverWait
会等待元素出现或可点击,确保操作的稳定性。
-
为什么用 try-except-finally
?
try
:尝试执行代码(登录测试)。
except
:如果出错,捕获错误并显示原因。
-
finally
:无论是否出错,都要关闭浏览器(避免浏览器一直开着)。
-
为什么使用断言(AssertionError
)?
- 断言用于验证预期结果。如果登录后 URL 不是主页 URL,说明登录失败,脚本会抛出错误并终止。
如何运行这个脚本?
- 准备工作:
- 安装 Python(推荐 3.9 或更高版本)。
- 安装 Selenium:
pip install selenium
。
-
下载 ChromeDriver(版本要和你的 Chrome 浏览器匹配),并设置 CHROME_DRIVER_PATH
为其路径。
-
运行脚本:
- 保存代码为
test_login.py
。
-
在命令行中执行:python test_login.py
。
-
观察结果:
- 浏览器会自动打开并执行登录操作。
- 脚本会输出每一步的执行情况,最后显示“登录成功”或“登录失败”的信息。
总结
这个脚本通过自动化方式模拟用户登录,验证网站的登录功能是否正常。它使用 Selenium 作为工具,通过等待元素加载、输入内容、点击按钮、验证 URL 等步骤,完成了一个完整的登录测试流程。