前置条件
conftest.py
import pytest
from selenium import webdriver
from pages.login_page import Login
@pytest.fixture()
# 登录浏览器
def login_get():
driver = webdriver.Chrome()
driver.implicitly_wait(8)
driver.maximize_window()
yield driver
driver.quit()
@pytest.fixture()
def teacher_login():
driver = webdriver.Chrome()
driver.implicitly_wait(8)
driver.maximize_window()
login = Login(driver)
login.load()
login.up_login("19142706666", "w6666664")
yield driver
@pytest.fixture()
def student_login():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
login = Login(driver)
login.load().up_login("13560766669", "w6666664")
yield driver
driver.quit()
====================================================
pages 模块
login_page.py(PO模式)
from selenium.webdriver.common.by import By
from common.yaml_handler import yaml_config
host = yaml_config["host"]
class Login:
url = host + "/User/login.html"
""" 元素:用户名 """
user_name = (By.XPATH, '//input[@name="account"]')
""" 元素:密码 """
pass_word = (By.XPATH, '//input[@name="pass"]')
""" 元素:登录 """
up_dl = (By.XPATH, '//a[@class="btn-btn"]')
""" "账号不能为空","密码不能为空" """
user_word = (By.XPATH, '//p[@class="error-tips"]')
def __init__(self, driver):
self.driver = driver
""" 访问 URL 页面 """
def load(self):
self.driver.get(self.url)
return self
""" 账号、密码、登录 """
def up_login(self,username,password):
self.driver.find_element(*self.user_name).send_keys(username)
self.driver.find_element(*self.pass_word).send_keys(password)
self.driver.find_element(*self.up_dl).click()
return self
def clear(self): # 清空用户名和密码
self.driver.find_element(By.XPATH, '//input[@name="account"]').clear()
self.driver.find_element(By.XPATH, '//input[@name="pass"]').clear()
return self
def actual(self):
"""获取错误信息:"账号不能为空","密码不能为空" """
elem = self.driver.find_elements(*self.user_word)
text = [el.text for el in elem]
return text
# actual_value = []
# for el in elem:
# actual_value.append(el.text)
# text = actual_value
======================================================================
home_page.py(PO模式)
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from common.yaml_handler import yaml_config
host = yaml_config["host"]
class Home:
url = host + "/Main/index.html"
# 元素:获取头像
get_win_01 = (By.XPATH, '//*[@class="avatar"]')
# 元素:+ 创建/加入课程
up_add = (By.XPATH, '//*[contains(text(),"+ 创建/加入")]')
# 创建
up_add_id = (By.XPATH, '//a[@id="addClass"]')
# 输入名称
name_up = (By.XPATH, '//input[@placeholder="请输入名称"]')
# 元素:选择学期下拉框
pull = (By.XPATH, '//div[@class="yearselbox"]')
# 元素:点击创建
up_sure = (By.XPATH, '//a[@class="sure active" and contains(text(),"创建")]')
def __init__(self,driver):
self.driver = driver
def load(self):
self.driver.get(self.url)
return self
""" 获取头像中的登录用户名 """
def get_win(self):
get_img = self.driver.find_element(*self.get_win_01)
return get_img.get_attribute("title")
def up_name_time(self,name,term="2014-2015"):
driver = self.driver
# + 创建/加入课程
driver.find_element(*self.up_add).click()
# 创建课程
driver.find_element(*self.up_add_id).click()
# 随机生成10个字符串
driver.find_element(*self.name_up).send_keys(name)
# 选择学期下拉框
driver.find_element(*self.pull).click()
# 元素:选择学期的时间
time_name = (By.XPATH, f'//li[contains(text(),"{term}")]')
el = driver.find_element(*time_name)
ActionChains(driver).click(el).perform()
# 创建
driver.find_element(*self.up_sure).click()
return self
def el_up(self,name):
"""根据课程名称定位元素"""
name_title = (By.XPATH, f'//a[@title="{name}"]')
el = self.driver.find_element(*name_title)
return el
==========================================================================
随机生成字符串
common 模块
helper.py
import random
import time
def gen_class_name():
"""随机生成课程名称, 字母,生成10长度的字母。
aacdeyualp
"""
name = ''
for i in range(10):
letter = random.choice('abcdefghijklmnopqrstuvwxyz')
name += letter
return name + str(int(time.time()))
======================================================================
创建
tests 模块
test_add.py
import time
from selenium.webdriver.common.by import By
from pages.login_page import Login
from pages.home_page import Home
from common.helper import gen_class_name
class TestAdd:
def test_add(self,login_get):
# 前置条件的调用
driver = login_get
# 重新赋值,导入模块的实例化
login = Login(driver)
home = Home(driver)
login.load()
login.up_login("19142706623","wtg444444")
up_add = (By.XPATH,'//*[contains(text(),"+ 创建/加入")]')
driver.find_element(*up_add).click()
# 创建
up_add_id = (By.XPATH,'//a[@id="addClass"]')
driver.find_element(*up_add_id).click()
# 输入名称
name_up = (By.XPATH,'//input[@placeholder="请输入名称"]')
# 随机生成10个字符串
gen_name = gen_class_name()
driver.find_element(*name_up).send_keys(gen_name)
# 元素:选择学期下拉框
pull = (By.XPATH,'//div[@class="yearselbox"]')
driver.find_element(*pull).click()
# 元素:选择学期的时间
time_name = (By.XPATH,'//div[@class="yearselbox"]//*[contains(text(),"2011-2012")]')
driver.find_element(*time_name).click()
# 元素:点击创建
up_sure = (By.XPATH,'//a[@class="sure active" and contains(text(),"创建")]')
driver.find_element(*up_sure).click()
name_title = (By.XPATH,f'//a[@title="{gen_name}"]')
assert driver.find_element(*name_title)
time.sleep(2)
======================================================================
test_add_PO.py
import time
from selenium.webdriver.common.by import By
from pages.login_page import Login
from pages.home_page import Home
from common.helper import gen_class_name
class TestAdd:
def test_add(self,login_get):
# 前置条件的调用
driver = login_get
# 重新赋值,导入模块的实例化
login = Login(driver)
home = Home(driver)
login.load()
login.up_login("19142706611","666666666")
gen_name = gen_class_name()
home.up_name_time(gen_name,term="2020-2021")
assert home.el_up(gen_name)
time.sleep(2)