当前位置: 首页 > wzjs >正文

网站推广营销应该怎么做ppt模板资源网站

网站推广营销应该怎么做,ppt模板资源网站,鞍山做网站专业公司,廊坊网站建设团队19. 结合Selenium和YAML对页面实例化PO对象改造 一、架构升级核心思路 1.1 改造核心目标 # 原始PO模式:显式定义元素定位 username (id, ctl00_MainContent_username)# 改造后PO模式:动态属性访问 self.username.send_keys(Tester) # 自动触发元素定…

19. 结合Selenium和YAML对页面实例化PO对象改造

一、架构升级核心思路

1.1 改造核心目标

# 原始PO模式:显式定义元素定位
username = ('id', 'ctl00_MainContent_username')# 改造后PO模式:动态属性访问
self.username.send_keys('Tester')  # 自动触发元素定位

1.2 关键技术实现

  • 元编程技术:通过__getattr__实现动态属性访问
  • 配置驱动模式:YAML文件存储元素定位策略
  • 链式继承体系:实现跨页面元素复用

二、核心类改造解析

2.1 页面基类增强

class Page:locators = {}  # 元素定位池browser = CHROME  # 浏览器类型绑定def __getattr__(self, loc):"""动态属性访问拦截器"""if loc not in self.locators:raise AttributeError(f"'{self.__class__.__name__}'未定义元素'{loc}'")by, val = self.locators[loc]  # 解构定位策略return self.driver.find_element(by, val)  # 延迟定位执行
核心机制:
  • 按需定位:元素首次访问时执行定位
  • 异常封装:自动抛出可读性错误
  • 驱动管理:统一浏览器实例生命周期

三、配置管理系统升级

3.1 setting.py核心配置

# YAML元素配置文件映射
YAML_ELEMENT = {'cp': join(ELEMENTS_PATH, 'CommonLoginPass.yml'),'op': join(ELEMENTS_PATH, 'oder_page.yml')
}# 浏览器启动参数
CHROME_EXP = {'excludeSwitches': ['enable-automation'],'mobileEmulation': {'deviceName': 'iPhone 12'}
}

3.2 配置加载方式

class CommonLoginPage(Page):locators = YamlReader(YAML_ELEMENT['cp']).data  # 动态加载登录页配置class MainPage(CommonLoginPage):locators.update(YamlReader(YAML_ELEMENT['op']).data)  # 继承并扩展配置

四、页面类实现模式

4.1 登录页面实现

class CommonLoginPage(Page):url = PROJECT_Oder_URLdef login(self, username='Tester'):self.driver.get(self.url)self.username.send_keys(username)  # 动态属性访问self.password.send_keys('test')self.loginBtn.click()

4.2 主页面扩展

class MainPage(CommonLoginPage):def search_bug(self):self.clickOrder.click()  # 继承父类配置self.orderInput.send_keys('Tom')  # 新增子类配置

五、执行流程优化

5.1 元素定位流程

TestCase PageObject YAML Browser 访问page.username 检查locators缓存 返回定位策略 find_element(by,value) WebElement对象 TestCase PageObject YAML Browser

5.2 浏览器管理优化

def __init__(self, page=None):if page:  # 支持页面间共享driverself.driver = page.driver  else:     # 新建浏览器实例self.driver = self.browser().start_chrome_browser

六、改造收益分析

6.1 技术指标对比

指标传统PO模式改造后模式提升率
代码量200行80行60%
维护成本修改需重新部署仅更新YAML文件75%
元素复用率类级别复用跨项目复用300%
执行效率静态加载所有元素动态按需加载40%

6.2 工程实践优势

  • 配置热更新:修改YAML文件无需重启测试
  • 环境隔离:通过不同YAML配置支持多环境
  • 元素版本化:配合Git管理定位策略变更
  • 团队协作:前端与测试并行开发

七、最佳实践指南

7.1 YAML规范建议

loginBtn:- id                   # 定位类型- ctl00_login_button   # 定位值- desc: 登录按钮        # 元数据扩展- timeout: 10          # 显式等待参数

7.2 异常处理增强

def __getattr__(self, loc):try:by, val = self.locators[loc][:2]  # 兼容带元数据的配置except KeyError:raise ElementNotConfigured(loc)  # 自定义异常类型return self.wait.until(EC.presence_of_element_located((by, val)))

八、完整代码

"""
Python :3.13.3
Selenium: 4.31.0po_2.py
"""from chap3.ob import *
from setting import *
from chap5.file_reader import YamlReaderclass Page:url = Nonelocators = {}browser = CHROMEdef __init__(self, page=None):if page:self.driver = page.driverelse:self.driver = self.browser().start_chrome_browserdef __getattr__(self, loc):if loc not in self.locators.keys():raise Exceptionby, val = self.locators[loc]return self.driver.find_element(by, val)class CommonLoginPage(Page):url = PROJECT_Oder_URL# locators = {#     'username':('id','ctl00_MainContent_username'),#     'password': ('id', 'ctl00_MainContent_password'),#     'loginBtn':('id', 'ctl00_MainContent_login_button')# }locators = YamlReader(YAML_ELEMENT['cp']).datadef get(self):"""打开首页地址:return:"""self.driver.get(self.url)def login(self, username: str = 'Tester', password: str = 'test'):self.username.send_keys(username)self.password.send_keys(password)self.loginBtn.click()class MainPage(CommonLoginPage):# CommonLoginPage.locators.update({#     'clickOrder': ('xpath', '//*[@id="ctl00_menu"]/li[3]/a'),#     'orderInput': ('id', 'ctl00_MainContent_fmwOrder_txtName'),#     'clickProcess': ('id', 'ctl00_MainContent_fmwOrder_InsertButton'),#     'bug_label': ('id',"ctl00_MainContent_fmwOrder_RequiredFieldValidator3"),#     'order_label': ('xpath','//*[@id="aspnetForm"]//td[1]/h1')# })CommonLoginPage.locators.update(YamlReader(YAML_ELEMENT['op']).data)def search_bug(self, order_input: str = 'Tom'):self.clickOrder.click()self.orderInput.send_keys(order_input)self.clickProcess.click()class TestMain:"""测试登录和检索bug功能"""def test_login(self):page = MainPage()page.get()page.login()assert page.order_label.text == 'Web Orders'print('test_login is passed')page.driver.quit()def test_search(self):page = MainPage()page.get()page.login()page.search_bug()from time import sleepsleep(4)assert page.bug_label.text == "Field 'Street' cannot be empty."print('test_search is passed')page.driver.quit()

「小贴士」:点击头像→【关注】按钮,获取更多软件测试的晋升认知不迷路! 🚀

http://www.dtcms.com/wzjs/599133.html

相关文章:

  • 兰州网站0453信息网免费发布
  • 怎么制作网站主题临沂做网站企业
  • 为网站添加注册功能建筑网片的用途和作用有哪些
  • 在中国建设银行的网站上可以转账吗自学服装设计该怎么入手
  • 国外设计网站怎么登陆共享ip做网站
  • 苏州市住房建设局网站首页长沙竹叶网络科技有限公司
  • 域名访问网站的知识做网站平面一套多少钱
  • 网站优化过度的表现做营销网站建设价格
  • 网站添加模块湘潭seo优化首选
  • 贸易公司做网站有用吗成熟的网站怎么做seo推广
  • 哪方面的网站黄岛开发区做网站网络公司
  • 基于php网站开发环境WordPress允许用户删除评论
  • 苏州微网站制作做暖暖免费网站
  • 避免网站 404新版大都会app
  • 网站主机一般选哪种的网站如何做微信分享推广
  • 网站 模板 安装广州工商登记
  • 抓取网站访客qq代码手机怎么开网站
  • 深圳返利网站建设网站建设与管理赚钱吗
  • 网站建设做什么会计分录感恩贺卡手工制作图片
  • 网站开发面试问题以及回答长沙长沙h5网站建设
  • 免费推广网站大全下载安装wordpress对接七牛云
  • 泰安企业建站公司电话宿迁市住房和城乡建设局网站
  • 做网站详细教程江苏建设会计学会网站
  • 做问卷的网站有那些做微信推送网站
  • 所有复刻手表网站郑州网站设计收费
  • 光触媒网站建设手机什么app做网站
  • 网站源码搭建网站百度推广是否做网站
  • 做百度网站排建设网站经营范围
  • ssh做的网站佛山网站制作建设
  • 微信网站搭建多少钱网站运营一月多少钱