project > page > user_page.py
project > testcases > user_center > test_user.py
# project > testcases > user_center > test_user.py
import time
import allure
import pytest
from page.user_page import UserPage
from testcases.user_center.conftest import delete_user, delete_code
from utils.assert_util import assert_compare
from utils.mysql_util import db
from utils.read import read_yaml
@allure.epic("美客生鲜的项目")
@allure.feature("用户中心")
@pytest.mark.run(order=1)
class TestUser:
@allure.story("未登录时跳转")
def test_go_login(self,driver_project):
page = UserPage(driver_project)
with allure.step("点击请登录"):
page.click(page.ple_login)
actual_url = page.get_current_url()
expected_url = "http://meikefresh.5istudy.online/#/app/login"
assert_compare(expected_url, "==", actual_url)
time.sleep(10)
page.back() # 在点击登录后,必须退回前一个页面,才可以找到会员中心
page.move_to_element(page.vip_center) # 必须移到”会员中心“,才可以点击后面的选项
with allure.step("点击我的订单"):
page.click(page.my_order)
actual_url = page.get_current_url()
assert_compare(expected_url, "==", actual_url)
page.back()
page.move_to_element(page.vip_center)
with allure.step("点击我的收藏"):
page.click(page.my_fav)
actual_url = page.get_current_url()
assert_compare(expected_url, "==", actual_url)
page.back()
page.move_to_element(page.vip_center)
with allure.step("点击我的收货地址"):
page.click(page.my_address)
actual_url = page.get_current_url()
assert_compare(expected_url, "==", actual_url)
page.back()
with allure.step("点击我的购物车"):
page.click(page.shopping_cart)
page.switch_to_window() # 点击购物车后,会切到新的登录窗口,此处切到新窗口,默认是当前窗口
actual_url = page.get_current_url()
assert_compare(expected_url, "==", actual_url)
page.close_driver()
page.switch_to_window(to_parent_window=True)
@allure.title("用户注册成功")
def test_register(self, driver_project):
data = read_yaml()['register_ok']
page = UserPage(driver_project)
with allure.step("点击免费注册"):
page.click(page.register)
with allure.step("输入手机号"):
page.send_keys(page.register_mobile, data['mobile'])
with allure.step("点击获取验证码"):
page.click(page.send_code)
time.sleep(2)
with allure.step("获取短信验证码"):
sql = f"select code from users_verifycode where mobile = {data['mobile']} order by id desc limit 1;"
code = db.select_db_one(sql)['code']
with allure.step("输入验证码"):
page.send_keys(page.input_code, code)
with allure.step("输入密码"):
page.send_keys(page.input_password, data['password'])
with allure.step("点击注册并登录"):
page.click(page.register_submit)
text = page.get_text(page.user_name)
assert_compare(str(data['mobile']), "==", text)
with allure.step("退出"):
page.click(page.logout)
delete_user(data['mobile'])
delete_code(data['mobile'])
@allure.title("用户注册失败-验证码错误")
def test_register_failed(self, driver_project):
"""注册失败"""
data = read_yaml()['register_failed']
page = UserPage(driver_project)
page.register_failed(data)
@allure.title("用户注册失败-用户已存在")
def test_register_exist(self, driver_project):
"""
已存在的用户
:param driver_project:
:return:
"""
mobile = read_yaml()['register_exist']['mobile']
page = UserPage(driver_project)
page.refresh()
# page.click(page.register)
page.send_keys(page.register_mobile, mobile)
page.click(page.send_code)
text = page.get_text(page.user_exist)
assert_compare("用户已经存在", '==', text)
# project > page > user_page.py
import allure
from selenium.webdriver.common.by import By
from base.base_page import BasePage
from testcases.user_center.conftest import delete_user, delete_code
from utils.assert_util import assert_compare
class UserPage(BasePage):
# 请登录
ple_login = (By.CSS_SELECTOR, 'a[href="#/app/login"]')
# 会员中心
vip_center = (By.XPATH, '//a[contains(text(),"会员中心")]')
# 我的订单
my_order = (By.CSS_SELECTOR, 'a[href="#/app/home/member/order"]')
# 我的收藏
my_fav = (By.CSS_SELECTOR, 'a[href="#/app/home/member/collection"]')
# 我的收货地址
my_address = (By.CSS_SELECTOR, 'a[href="#/app/home/member/receive"]')
# 购物车
shopping_cart = (By.CSS_SELECTOR, 'a[href="#/app/shoppingcart/cart"]')
"""注册功能"""
# 免费注册
register = (By.CSS_SELECTOR, 'a[href="#/app/register"]')
# 手机号
register_mobile = (By.ID, 'jsRegMobile')
# 免费获取验证码
send_code = (By.ID, 'jsSendCode')
# 输入手机验证码
input_code = (By.ID, 'jsPhoneRegCaptcha')
# 输入密码
input_password = (By.ID, 'jsPhoneRegPwd')
# 注册并登录
register_submit = (By.ID, 'jsMobileRegBtn')
# 退出
logout = (By.XPATH, '//*[@id="ECS_MEMBERZONE"]/a[2]')
# 用户名
user_name = (By.CSS_SELECTOR, 'a[href="#/app/home/member/userinfo"]')
# 验证码错误
error_code = (By.XPATH, '//*[@id="mobile_register_form"]/p[2]')
# 用户已存在
user_exist = (By.XPATH, '//*[@id="mobile_register_form"]/p[1]' )
"""登录相关"""
# 用 户 名
login_account = (By.ID, 'account_l')
# 密 码
login_password = (By.ID, 'password_l')
# 登录按钮
login_btn = (By.ID, 'jsLoginBtn')
# 登录用户名错误信息
login_account_error = (By.XPATH, '//*[@id="jsLoginForm"]/p[1]')
# 登录密码为空错误信息
login_password_error = (By.XPATH, '//*[@id="jsLoginForm"]/p[2]')
# 登录密码错误信息
login_error = (By.XPATH, '//*[@id="jsLoginForm"]/p[3]')
"""我的地址"""
# 配送区域
express_area = (By.XPATH, '//td[contains(text(),"配送区域")]')
# 省
province = (By.XPATH, '//td[contains(text(),"配送区域")]/following-sibling::td/div/div/select[1]')
# 市
city = (By.XPATH, '//td[contains(text(),"配送区域")]/following-sibling::td/div/div/select[2]')
# 区
district = (By.XPATH, '//td[contains(text(),"配送区域")]/following-sibling::td/div/div/select[3]')
# 收货人姓名
username = (By.ID, 'consignee_0')
# 详细地址
address = (By.ID, 'address_0')
# 手机
mobile = (By.ID, 'mobile_0')
# 新增收货地址按钮
add_address_button = (By.XPATH, '//button[contains(text(),"新增收货地址")]')
# 确定修改
confirm = (By.XPATH, '//button[contains(text(),"确定修改")]')
# 删除
delete_address = (By.XPATH, '//button[contains(text(),"删除")]')
def register_failed(self, data):
"""
注册失败
:return:
"""
self.get_url("http://meikefresh.5istudy.online/")
with allure.step("点击免费注册"):
self.click(self.register)
with allure.step("输入手机号"):
self.send_keys(self.register_mobile, data['mobile'])
with allure.step("点击获取验证码"):
self.click(self.send_code)
with allure.step("输入验证码"):
self.send_keys(self.input_code, "f123") # 此处故意输入错误的验证码
with allure.step("输入密码"):
self.send_keys(self.input_password, data['password'])
with allure.step("点击注册并登录"):
self.click(self.register_submit)
text = self.get_text(self.error_code)
assert_compare("验证码错误", '==', text)
delete_user(data['mobile'])
delete_code(data['mobile'])
def login(self):
self.get_url("http://meikefresh.5istudy.online/#/app/login")
self.send_keys(self.login_account, "13800001111")
self.send_keys(self.login_password, "123456")
self.click(self.login_btn)
网友评论