自动化流程
"""python自动化"""
import time
import random
from selenium.webdriver.common.by import By
from pages.home import HomePage
from pages.login import LoginPage
def gen_class_name():
"""随机生成课程名称, 字母,生成10长度的字母。
aacdeyualp
"""
name = ''
for i in range(10):
letter = random.choice('abcdefghijklmnopqrstuvwxyz')
name += letter
return name + str(int(time.time()))
class TestAddClass:
# 测试类可以不创建吗?可以
# pytest当中,测试用例函数可以写在类下面,也可以单独存在
def test_add_success(self, get_driver):
"""运行成功的测试用例.
测试步骤:
1、打开浏览器
2、登录老师账号 前置条件
3、点击创建/加入课程
4、点击创建课程(课程名称,动态生成,每次都不一样的课程名)
5、输入课堂名称其他数据
6、点击创建
7、出现已经创建好的课程。
8、assert, 如果在首页上出现了课程名称 # 要不要校验数据库
# ui 测试 ui界面显示是否正常。
"""
# 获取浏览器
driver = get_driver
# 登录老师账号, 直接从 LoginPage 当中调用 login 方法
login_page = LoginPage(driver)
home_page = HomePage(driver)
login_page.load().login("wagyu2016@163.com", "admin123456")
# 进入首页
# 先获取所有的课程内容判断新的课程标题是否已经存在
# Lily: 加一个时间戳
driver.find_element(By.XPATH, "//span[contains(text(),'+ 创建/加入课程')]").click()
driver.find_element(By.XPATH, "//a[@id='addClass']").click()
# 输入课程名称
# 去随机生成一个课程名称
class_name = gen_class_name()
driver.find_element(By.XPATH, "//input[@placeholder='请输入课程名称']").send_keys(class_name)
time.sleep(2)
# 点击学期选择下拉框
driver.find_element(By.CSS_SELECTOR, '.yearselbox').click()
# 点击自己想要的选项
driver.find_element(By.XPATH, '//li[text()="2014-2015"]').click()
driver.find_element(By.CSS_SELECTOR, '.pop-btns > .sure').click()
# 断言
# 能不能找到课程
assert driver.find_element(By.XPATH, f'//a[text()="{class_name}"]')
time.sleep(2)
===============================================================
前置条件
import pytest
from selenium import webdriver
from pages.login import LoginPage
@pytest.fixture()
def get_driver():
"""启动浏览器"""
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
yield driver
driver.quit()
@pytest.fixture()
def teacher_login(get_driver):
login_page = LoginPage(get_driver)
login_page.load().login("wa222222163.com", "a22222256")
return get_driver
# 没有后置
=================================================================
随机生成字符
import time
import random
def gen_class_name():
"""随机生成课程名称, 字母,生成10长度的字母。
aacdeyualp
"""
name = ''
for i in range(10):
letter = random.choice('abcdefghijklmnopqrstuvwxyz')
name += letter
return name + str(int(time.time()))
if __name__ == "__main__":
print(gen_class_name())
========================================
PO优化自动化流程
pages模块中的home.py文件
from selenium.webdriver.common.by import By
from common.basepage import BasePage
class HomePage(BasePage):
url = 'https://v4.ketangpai.com/Main/index.html'
# 获取用户头像
avatar_locator = (By.XPATH, '//*[@class="avatar"]')
# 新建课程/加入课程
new_class_locator = (By.XPATH, "//span[contains(text(),'+ 创建/加入课程')]")
# 创建课程
create_class_locator = (By.XPATH, "//a[@id='addClass']")
# 课程名称输入框
class_input_locator = (By.XPATH, "//input[@placeholder='请输入课程名称']")
# 学期选择框
term_selector_locator = (By.CSS_SELECTOR, '.yearselbox')
# 确认创建按钮
create_confirm_locator = (By.CSS_SELECTOR, '.pop-btns > .sure')
# def __init__(self, driver):
# self.driver = driver
def load(self):
self.driver.get(self.url)
return self
def get_username(self):
"""获取头像中的登录用户名
TODO: 封装获取属性属性"""
user_elem = self.driver.find_element(*self.avatar_locator)
return user_elem.get_attribute('title')
def add_class(self, name, term="2014-2015"):
"""添加课程"""
driver = self.driver
self.click(self.new_class_locator)
self.click(self.create_class_locator)
driver.find_element(*self.new_class_locator).click()
driver.find_element(*self.create_class_locator).click()
# 输入课程名称
# 去随机生成一个课程名称
driver.find_element(*self.class_input_locator).send_keys(name)
# 点击学期选择下拉框
driver.find_element(*self.term_selector_locator).click()
# 点击自己想要的选项
driver.find_element(By.XPATH, f'//li[text()="{term}"]').click()
# 点击创建
driver.find_element(*self.create_confirm_locator).click()
return self
def get_class(self, name):
"""根据课程名称定位元素"""
el = self.driver.find_element(By.XPATH, f'//*[text()="{name}"]')
return el
================================================
PO优化的成果
"""python自动化"""
from pages.home import HomePage
from common import helper
class TestAddClass:
def test_add_success(self, teacher_login):
"""运行成功的测试用例.
"""
# 获取浏览器
driver = teacher_login
home_page = HomePage(driver)
# 添加课程
class_name = helper.gen_class_name()
home_page.add_class(class_name, term='2020-2021')
# 断言
assert home_page.get_class(class_name)