范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

WebUI自动化测试的经典设计模式PO

  一、PO 设计模式是什么PO 的全称是 PageObject, 是 Selenium 自动化测试项目开发实践的最佳设计模式之一 ,通过对界面元素和功能模块的封装减少冗余代码,有利于后期项目的维护。  对页面对象进行抽象处理 (页面对象包含:页面元素、button 点击、文本框输入、选项框选择等等)。使代码能在页面元素发生改变后,尽量减少测试脚本的改动量,最大程度支持代码的可重复性使用,同时使得测试框架结构合理、层次清晰、代码更加模块化,避免冗余、藕合性过高。
  二、PO 设计模式的优势(1)、优点说明测试的业务逻辑代码与页面的定位代码(如定位器、driver的相关操作或者其他的映射)相分离。   该页面提供的方法或元素封装在一个独立的类或方法中, 而不是将这些方法或元素分散在整个测试的业务逻辑代码中。   PO(PageObject) 对象作为一个与页面交互的接口,测试中需要与页面的 UI 进行交互时(测试数据、业务逻辑、页面操作对象已完成分离), 只需调用 PO(PageObject) 的方法, 优点在于,如果页面的 UI 发生了更改,那么测试用例本身不需要更改, 只需更改 PO(PageObject)中的代码即可,有利于后期的维护。
  (2)、优点论证
  先来看下未使用 PO(PageObject) 设计模式下的代码,以网页版百度登录为例来说明。
  非 PO(PageObject) 模式下的代码如下,所有内容全部写在一个方法里。   #test_login.py文件内容如下:  def test_login():     driver = webdriver.Chrome()     driver.implicitly_wait(30)     driver.maximize_window()     base_url = "http://www.baidu.com/"     driver.get(base_url)      # 获取登录链接并在登录页面上填写登录数据     driver.find_element(By.XPATH, "//*[@id="s-top-loginbtn"]").click()     driver.find_element(By.ID, "TANGRAM__PSP_11__footerULoginBtn").click()     driver.find_element(By.ID, "TANGRAM__PSP_11__userName").send_keys("test_user_name")     driver.find_element(By.ID, "TANGRAM__PSP_11__password").send_keys("test_user_password")     driver.find_element(By.ID, "TANGRAM__PSP_11__submit").click()      # 登录成功后验证页面是否包含文本:输入的登录用户名     login_result = driver.find_element(By.XPATH, "//*[@id="s-top-username"]/span[2]").get_attribute("innerHTML")     assert ("test_user_name" in login_result) is True
  存在的问题:   测试方法与定位器 (在此实例中为By.ID)耦合过于严重. 如果测试的用户界面更改了其定位器或登录名的输入和处理方式, 则测试本身必须进行更改。   在对登录页面的所有测试中, 同一个定位器会散布在其中。定位器的值也会耦合在业务逻辑中。
  PO(PageObject) 模式优化后的代码
  1、WebUI 自动化需要的 driver 基础操作   #initial_driver.py文件内容如下:  from selenium import webdriver   def initial_driver(browser_name="chrome", target_url=""):     browser = webdriver.Chrome     browser_name = browser_name.lower()     if browser_name not in {"chrome", "firefox", "ff", "ie"}:         browser_name = "chrome"     if browser_name == "chrome":         browser = webdriver.Chrome()     elif browser_name in ("firefox", "ff"):         browser = webdriver.Firefox()     elif browser_name == "ie":         browser = webdriver.Ie()     browser.maximize_window()     browser.implicitly_wait(30)     browser.get(target_url)     return browser
  2、登录页面元素获取   #elements.py文件内容如下:  from selenium.webdriver.common.by import By  getloginBy = (By.XPATH, "//*[@id="s-top-loginbtn"]") getusername_loginBy = (By.ID, "TANGRAM__PSP_11__footerULoginBtn") usernameBy = (By.ID, "TANGRAM__PSP_11__userName") passwordBy = (By.ID, "TANGRAM__PSP_11__password") signinBy = (By.ID, "TANGRAM__PSP_11__submit") homepageBy = (By.XPATH, "//*[@id="s-top-username"]/span[2]") test_url = "http://www.baidu.com"
  3、登录逻辑业务的封装   #user_login.py文件内容如下:  import elements,initial_driver  def user_login(user_name, password):     driver = initial_driver("chrome", elements.test_url)     driver.find_element(*elements.getloginBy).click()     driver.find_element(*elements.getusername_loginBy).click()     driver.find_element(*elements.usernameBy).send_keys(user_name)     driver.find_element(*elements.passwordBy).send_keys(password)     driver.find_element(*elements.signinBy).click()     target_text = driver.find_element(*elements.homepageBy).get_attribute("innerHTML")     return target_text
  4、登录测试用例将使用以上3个页面对象   #test_user_login.py文件内容如下:  import user_login  def test_user_login():     target_text = user_login.user_login("username", "password")     assert ("username" in target_text) is True
  可以发现,使用 PO(PageObject) 模式优化后的代码,有以下明显优势:
  1)、将以下3个模块进行了单独封装 【降低了模块之间的耦合度,使层次更加清晰合理,便于后期维护与复用】:   WebUI 中 driver 的常规操作。例如:测试浏览器的选择,满足了测试多样化的需求、浏览器窗口最大化操作等等。   登录页面所有元素的 locator_type 和 locator_value,以及被测试的域名。   完成业务逻辑代码流程的调用,并返回正常登录成功后主页面的文本内容。
  2)、如果前端页面有 定位元素的 type 或 value 发生变化时,只需要修改 elements.py 文件中元素信息即可 ,不需要在测试业务模块中进行修改。
  三、PO 设计模式使用6大原则一个公共方法代表一个公共的服务,就是说一个方法代替页面上的某些操作。   PO(PageObject) 中的方法细节不会暴露在外,通过提供公共服务接口的形式提供给外部。   PO(PageObject) 本身是不应进行判断或断言. 判断和断言是测试的一部分, 应始终在测试的代码内, 而不是在 PO(PageObject)中,PO(PageObject) 用来包含页面的表示形式, 以及页面通过方法提供的服务, 但是与 PO(PageObject) 无关的测试代码不应包含在其中。   当有页面跳转的操作时候,执行这个方法时应该在方法结束返回时能够跳转到另一个页面中。   只需要对页面中我们需要的重要内容进行封装。   页面中相同的组件,但是不同的操作应该要被拆成不同的方法进行封装。
  四、总结不要强迫自己一次封装到位,大多都是在项目实践中不断优化重构才使得脚本更加灵活和健全的,需经过一个不断迭代的过程。   PO(PageObject) 的设计方式具有很大的灵活性, 但是有一些基本规则可以使测试代码具有理想的可维护性。   PO(PageObject) 不一定需要代表整个页面,PO(PageObject) 设计模式可用于表示页面上的组件. 如果自动化测试中的页面包含多个组件, 则每个组件都有单独的页面对象, 这样有助于提高可维护性。

自动化所2项成果荣获北京市科学技术奖一等奖9月25日,2021中关村论坛全体大会召开,会上揭晓了2020年度北京市科学技术奖。自动化所2项成果荣获北京市科学技术奖一等奖。自动化所联合天津医科大学完成的脑网络组图谱绘制和验证德邦大为携手北大荒农服集团龙江超越合作社共图大业9月13日,北大荒农业服务集团有限公司龙江超越合作社北京德邦大为科技股份有限公司签署合资协议,成立黑龙江北大荒农业科技有限公司。北大荒农服集团董事长姜涛德邦大为董事长刘汉武超越合作漫漫产检之路不敢尝试的三胎最近国家出台了三胎政策,对于大部分人来说都不考虑的。生一个孩子的成本和精力真的是太大了,以后国家政策支持了大部分人也老了臣妾做不到啊捂脸从开始的某个星期姨妈来迟感到不对,便和舍友商空调常用知识常用知识1)压缩机的判断压缩机的故障常有哪些?答电阻最大的两点对应是C点,用C点分别测另两点,阻值大S小M。电机烧坏匝间短路压缩机卡缸抱轴阀片损坏排气量下降。2)风扇电机绕组的判断黄埔古港之姜撞奶在广州海珠区的黄埔古港,有着特色美食姜撞奶。从地铁琶洲站下车,搭乘公交车几个站就达到黄埔古港总站。有人会说黄埔古港不在黄埔吗?怎么会在海珠区呢?其实广州很多地方都是这样的。必需海珠WIN10进入安全模式八大办法如果您想了解可用于以安全模式启动Windows10的所有方法,请最终阅读本教程。首先,我们介绍了无法再登录Windows10时的操作,然后介绍了可以登录Windows10时的操作。自定义显卡分辨率解决无选项适配显示器由于显示器VGA线显卡的问题,部分电脑没办法显示正常的分辨率。最简单办法是更换合适的显示器,但若没办法的情况下,可以通过显卡的自定义显卡分辨率来解决这种问题。解决办法1先安装显卡驱中控S60考勤机操作指引1考勤机的使用1。1连接设备1。2登记指纹2考勤软件的使用2。1软件的安装2。2软件使用2。2。1增加设备2。2。2从设备下载人员信息2。2。3修改人员信息(改名字,调动部门等)2低压电工复习资料温馨提示。1。特种作业理论考试80分为合格,只有一次补考机会2。理论考试采用电脑考试(即机考),题型判断题70题。单选题30题,合计100题,3。理论练习微信公众号安全生产模拟考试惠州之巽寮湾在广东的海边沙滩除了深圳的大小梅沙阳江海陵岛沙扒湾等,就是惠州的巽寮湾出名了。从广州开车过去三小时左右,一路上跨海大桥风景非常好推荐拍照留影(注意安全喔)。过了桥就下高速一路很多餐东京奥运会就算裁判眼拙,我们也能获胜7月28日,东京奥运会还在紧锣密鼓的举行中,在女子水球比赛中,中国女子水球队经过了四节拼搏,在最终以1611击败了东道主日本女子水球队取得了本届奥运会的首胜。比赛中出现了日本选手压
新型铸造废旧砂再生成套设备的研发与应用通过科技成果评价2021年9月17日,中国铸造协会在重庆市主持召开了由重庆长江造型材料(集团)有限公司完成的高效节能新型铸造废旧砂再生成套设备的研发与应用科技项目评价会。会议邀请了中国机械工业联合日立建机与客户签署矿山战略合作协议在矿山工程机械领域,日立建机与经销商的长期携手努力,赢得了全国客户的信赖,并持续推动着行业的健康发展。日前,日立建机(上海)有限公司(以下简称HCS)再次促成厂家经销商客户的三方战奇瑞汽车的颜值巅峰来了,瑞虎7PLUS,3天后开始预售今天,奇瑞汽车官方发布了瑞虎7PLUS的预售开启时间,3天后也就是9月16日开启预售,大家关心的价格配置将揭晓。个人认为,瑞虎7PLUS的颜值堪称奇瑞汽车的颜值巅峰了,前脸由夸张型微型电车又来一款,奇(瑞)鲁汽车,开启预售,宏光nini等我今天由奇瑞汽车和山东齐河县政府合作的奇鲁新能源的第一款微型电动汽车EC1开始预售。新车共有3款车型,预售价格由3。28万元至4。38万元。续航里程为125公里和200公里两款。12秦创原秦川机床集团研究院宝鸡分院揭牌8月10日,宝鸡市委市政府在西咸新区举行秦创原(宝鸡)创新促进中心项目合作签约仪式。陕西省副省长程福波,宝鸡市委书记惠进才,中国工程院院士专家,省科技厅省工信厅省国资委主要领导,西兰石重装承制国能榆林化工项目核心设备近日,重装公司承接的国家能源集团神华榆林能源化工有限公司5万吨年聚乙醇酸项目6台反应釜14台塔器已经全面投料生产。为保证生产顺利进行,重装公司成立专项组重点跟进各项进度。产品投产前白鹤滩柔直换流变压器首台产品试验成功8月3日,西电西变承接的白鹤滩江苏800kV特高压直流输电工程受端虞城站首台柔直换流变压器研制成功,一次性通过全部型式试验。首台产品在国网公司国网电科院武汉南瑞江苏省公司武高所等多沙钢两项成果获冶金科学技术奖一等奖8月19日,2021年中国钢铁工业协会中国金属学会冶金科学技术奖评审结果揭晓,沙钢集团有限公司主导的高效薄带铸轧稳定化生产关键技术创新及应用沙钢集团淮钢特钢股份有限公司参与的钢轧过航天云网与香港新华集团在京举行战略签约仪式近日,航天云网公司与香港新华集团战略合作签约仪式在北京举行。航天云网公司党委书记董事长於亮,副总经理汤滔,全国政协常委粤港澳大湾区企业家联盟主席环渤海企业家联盟主席香港新华集团主席星途凌云对比星越L,你会选择谁?现在星途TXL的2。0T改名为星途凌云开始预订,官方也公布了详细的配置,咱再来看看。星途凌云先来吐槽一下,奇瑞高端品牌,即将上市的2。0T的星睿版本售价15。9万元,现款在售的1。索尼A7M4ampampamp双十一携手到来,业余玩家摄影好物推荐开始写这篇推荐文章的时间是10月11日,距离双十一还有一个月在十一长假里就get到了SONY即将发布全画幅入门级微单A7M4的消息,一个刚刚使用A7M3半年多并且准备首发购入A7M