测试步骤
- 指明测试网址:http://localhost:8080/jpress/user/login
- 通过Selemium的get函数发起HTTP请求,进入此网址
- 通过maximize_window扩充整个屏幕
- 通过id、name、xpath、class_name来定位目标位置,用于实现包括输入信息,点击信息等操作
- 如果注册出错会出现弹窗,弹窗我们可以使用WebDriverWait…until来显示等待来捕捉弹框的出现,使用的是expected_conditions.alert_is_present来等待查看,捕捉弹窗通过switch_to.alert来获取弹窗警告
- 获取之后可以通过assert断言来检测弹窗是否符合预期,后可通过accept来使得弹窗消失。
- 如果用户名和密码成功则需要进一步判断下一个界面的标题是否为正确
具体代码实现
from time import sleep
from selenium import webdriver # 驱动
from selenium.webdriver.support import expected_conditions as EC # 期望等待条件的出现
from selenium.webdriver.support.wait import WebDriverWait # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在(显示等待)
from util import utils
class TestUserRegister(object):
def __init__(self):
self.driver = webdriver.Edge("drivers/msedgedriver.exe")
self.driver.get("http://localhost:8080/jpress/user/login")
self.driver.maximize_window()
# 测试用户登录,用户名错误
def test_login_code_error(self):
# 用户名为空
user = ""
pwd = "123456"
expected = "账号不能为空"
self.driver.find_element_by_name("user").send_keys(user)
self.driver.find_element_by_name("pwd").send_keys(pwd)
self.driver.find_element_by_class_name("btn").click()
# 等待提示框 WebDriverWait等待5秒直到弹框出现,不然会报错
WebDriverWait(self.driver, 5).until(EC.alert_is_present())
alert = self.driver.switch_to.alert # 获取弹窗警告
sleep(3)
assert alert.text == expected
alert.accept() # 弹窗消失
print("测试用户登录,用户名错误, user{}-pwd{} 测试,返回结果为{}".format(user,pwd,expected))
# 测试登录成功
def test_login_code_ok(self):
# 用户名为空
user = "admin"
pwd = "123456"
expected = "用户中心"
self.driver.find_element_by_name("user").clear()
self.driver.find_element_by_name("user").send_keys(user)
self.driver.find_element_by_name("pwd").clear()
self.driver.find_element_by_name("pwd").send_keys(pwd)
self.driver.find_element_by_class_name("btn").click()
# 等待提示框 WebDriverWait等待5秒直到弹框出现,不然会报错
WebDriverWait(self.driver, 5).until(EC.title_is(expected))
sleep(3)
# 因为弹框已经消失所以我们要断言到标题中心
assert self.driver.title == expected
self.driver.quit() # 退出
print("测试登录成功, user{}-pwd{} 测试,返回结果为{}".format(user,pwd,expected))
结果显示
难点
- 这里需要注意一个地方,由于登录成功之后没有弹窗的,所以不需要使用EC.alert_is_present,这里需要使用EC.title_is来判定标题的中心是什么。