lenium之使用POM模式设计PO类,将POM模式运用到项目中

更新时间:2023-07-17 18:30:47 阅读: 评论:0

lenium之使⽤POM模式设计PO类,将POM模式运⽤到项⽬中
终极⽬标就是运⽤DDT思想+POM思想+pytest框架来最终实现项⽬
但是这样虽然松耦合了但是pom思想多维护了⼀个类,视情况⽽定,可以不⽤pom思想
最基本的逻辑就是:
test_ur_login调⽤UrLoginPage⽂件调⽤baPage⽂件
test_category调⽤categoryPage⽂件调⽤baPage⽂件
英文字母大小写⽂件⽬录:
具体例⼦:
BaPage⽅法中的代码是:
#这是个基类封装⼀些定位⽅法
class BaPage(object):
def __init__(lf, driver):
lf.driver = driver  #初始化
#找定位元素
def find_element(lf,*loc):
return lf.driver.find_element(*loc)
#输⼊值
def type_text(lf, text,*loc):
lf.find_element(*loc).nd_keys(text)
#点击确认
def click(lf,*loc):
lf.find_element(*loc).click()
#清空
def clear(lf,*loc):
lf.find_element(*loc).clear()
#获取title标题
def get_title(lf):
return lf.driver.title
登录的页⾯设计,调⽤bapage⽅法 处理登录
UrLoginPage:
#设计页⾯对象
from time import sleep
from by import By
from testcas.pom.pages.baPage import BaPage
class UrLoginPage(BaPage):
#先找到定位器
urname_input =(By.NAME,'urname')
pwd_input =(By.NAME,'password')
login_btn =(By.CLASS_NAME,'btn')
#先初始化,⽤BaPage的init⽅法
def __init__(lf, driver):
BaPage.__init__(lf, driver)
#登录⼊⼝
def goto_login_page(lf):
('localhost:8080/jpress/ur/login')        lf.driver.maximize_window()
#⽤户名的定位和输⼊值
def input_urname(lf, urname):
#调⽤baPage⽅法
lf.clear(*lf.urname_input)
#输⼊密码
建议英语def input_pwd(lf, pwd):
# 调⽤baPage⽅法
lf.clear(*lf.pwd_input)
#点击确定
def click_login_btn(lf):
# 调⽤baPage⽅法
lf.click(*lf.login_btn)
sleep(2)
然后测试案例运⾏,执⾏⽤户登录:
#运⽤DDT思想以及pom和pytest综合设计测试案例
#test_ur_login调⽤UrLoginPage⽂件调⽤baPage⽂件
from time import sleep
import pytest
from lenium import webdriver
from lenium.webdriver.support import expected_conditions as EC from lenium.webdriver.support.wait import WebDriverWait
from testcas.pom.ddt.pages.UrLoginPage import UrLoginPage
import pyautogui  #通过定位坐标来找到元素
class TestUrLogin(object):
login_data =[
('','root','信息提交错误'),
('root','root','Jpress'),
]
def tup_class(lf):
#初始化
lf.driver = webdriver.Chrome()
#登录的初始化
lf.loginPage =UrLoginPage(lf.driver)
#调⽤登录⼊⼝
_login_page()
# 测试⽤户登录,⽤户名错误
# 测试⽤户登录成功
#为了后⾯的依赖关系
@pytest.mark.dependency(name='admin_login')
@pytest.mark.parametrize('urname, pwd, expected', login_data)    def test_ur_login(lf,urname, pwd, expected):
# 输⼊⽤户名 #调⽤UrLoginPage⽂件中的⽅法
lf.loginPage.input_urname(urname)
# 输⼊密码#调⽤UrLoginPage⽂件中的⽅法
lf.loginPage.input_pwd(pwd)
# 点击登录#调⽤UrLoginPage⽂件中的⽅法
lf.loginPage.click_login_btn()
sleep(3)
inthedistance# 等待提⽰框
人类已经不能阻止海底捞了if urname =='':
WebDriverWait(lf.driver,5).until(EC.alert_is_prent())
alert = lf.driver.switch_to.alert
# 验证(断⾔)还是改成⾃带的断⾔
== expected
alert.accept()
el:
# 等待提⽰框
WebDriverWait(lf.driver,5).until(EC.title_is(expected))
sleep(3)
#验证因为没有弹窗所以⽤到了title断⾔判断
asrt lf.driver.title == expected
# @classmethod
# def teardown_class(cls):
#    cls.driver.quit()
if __name__ =='__main__':
pytest.main(['-sv','test_ur_login.py'])
这样就实现登录了 也实现了解耦合。
下⾯是⽂章分类实现,有⼀个登录依赖关系
先看⼀下categoryPage⽂件
⽂章分类的处理:
#设计页⾯对象chrome web store
from time import sleep
from by import By
from lenium.webdriver.support.lect import Select
from testcas.pom.pages.baPage import BaPage
class CategoryPage(BaPage):
def __init__(lf, login): #先初始化
BaPage.__init__(lf, login.driver)
# ⽂章loc
click_article_loc =(By.XPATH,'//*[@id="article"]/a/span')
# 分类loc
click_category_loc =(By.XPATH,'//*[@id="category"]/a')
nrx# 分类名称loc
category_name_loc =(By.NAME,'taxonomy.title')
新西兰大学开学时间# ⽗分类loc
parent_category_loc =(By.NAME,'taxonomy.parent_id')
# slug loc
slug_loc =(By.NAME,'taxonomy.slug')
# 添加按钮
add_btn_loc =(By.XPATH,'//*[@id="form"]/button')
# 点击⽂章
def click_article(lf):
#调⽤bapage基类的⽅法
lf.click(*lf.click_article_loc)
sleep(1)
# 点击分类
def click_category(lf):
# 调⽤bapage基类的⽅法
lf.click(*lf.click_category_loc)
sleep(1)
# 输⼊分类名称
文科二本大学分数线def input_category_name(lf, name):
# 调⽤bapage基类的⽅法
sleep(1)
# 选择⽗分类
def lect_parent_category(lf, parent_name):
# 调⽤bapage基类的⽅法
parent_category_elem = lf.find_element(*lf.parent_category_loc) Select(parent_category_elem).lect_by_visible_text(parent_name)    # 输⼊slug
def input_slug(lf, slug):
# 调⽤bapage基类的⽅法
# 点击添加
def click_add_btn(lf):
# 调⽤bapage基类的⽅法
lf.click(*lf.add_btn_loc)
然后运⾏⽂章分类的测试案例:
test_category⽂件:
#运⽤DDT思想以及pom和pytest综合设计测试案例
#test_category调⽤categoryPage⽂件调⽤baPage⽂件
# ⽂章分类
#注意下拉框选⽗级菜单时⽤到lect⽅法
from lenium.webdriver.support.lect import Select
from lenium.webdriver.support.wait import WebDriverWait
from lenium.webdriver.support import expected_conditions as EC
from time import sleep
import pytest
from testcas.st_ur_login import TestUrLogin
from testcas.pom.ddt.pages.categoryPage import CategoryPage
class TestCategory(object):
#先初始化登录
def tup_class(lf):
lf.login =TestUrLogin()
lf.categoryPage =CategoryPage(lf.login)
#成功和失败
category_data =[
('','python','test','名称不能为空!'),
('test','python','test',''),
]
# 测试⽂章分类成功因为需要依赖登录
@pytest.mark.dependency(depends=['admin_login'], scope="module")    #参数化
@pytest.mark.parametrize('name,parent,slug,expected', category_data)    def test02_add_category(lf,name,parent,slug,expected):
if name =='':
# 点击⽂章 #调⽤categoryPage⽂件的⽅法
lf.categoryPage.click_article()
# 点击分类#调⽤categoryPage⽂件的⽅法
lf.categoryPage.click_category()
# 输⼊分类名称#调⽤categoryPage⽂件的⽅法
lf.categoryPage.input_category_name(name)
projector# 选择⽗分类#调⽤categoryPage⽂件的⽅法
lf.categoryPage.lect_parent_category(parent)
# 输⼊slug#调⽤categoryPage⽂件的⽅法
lf.categoryPage.input_slug(slug)
# 点击添加#调⽤categoryPage⽂件的⽅法
lf.categoryPage.click_add_btn()
if name=='':
# 因为有弹窗所以需要切换到弹窗上
WebDriverWait(lf.login.driver,7).until(EC.alert_is_prent())
alert = lf.login.driver.switch_to.alert
# python 的断⾔
# 获取弹窗上的⽂字来⽐较
== expected
alert.accept()
el:
#没有异常就添加成功直接断⾔成功就好了
时期英语asrt 1==1

本文发布于:2023-07-17 18:30:47,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1101740.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:分类   登录   测试   定位   设计   弹窗   点击   大学
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图