游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

一篇文章学会PageFactory模式

  前言
  我们已经学习了PageObject设计模式,优势很明显,能更好的体现java的面向对象思想和封装特性。但同时也存在一些不足之处,那就是随着这种模式使用,随着元素定位获取,元素定位与页面操作方法都在一个类里维护,会造成代码冗余度过高。
  相信使用过spring的同学肯定都知道,基于注解方式的开发,会大大提高开发效率,使代码块变得相对整洁,清晰。
  本文要介绍的就是PageFactory设计模式,同PageObject思想大体差不多,只是表现形式不太一样,只是通过注解方式来定位元素对象。一、FindBy和CacheLookup用法
  元素声明的写法:定位密码输入框FindBy(nameloginpassword)CacheLookupprivateWebElementpassWord;
  注解说明:
  FindBy:这个注解的意思是说我们所查找的元素是以什么方式定位,
  CacheLookup:这个注解的意思是说找到元素之后将缓存元素,重复的使用这些元素,将会大大加快测试的速度。
  WebElementpassWord:就是变量名二、PageFactory类使用
  PageFactory提供的是静态方法,可以直接调用,一般在用完FindBy后,需要进行元素初始化,则需要调用initElements(driver,this);方法。三、使用PageFactory模式来分离页面元素
  此处演示还沿用pageobject模式的风格,这里我又加了一层自己暂时定义叫基础层,现在就变成了四层:基础层:用来存放driver及初始化使用。对象层:用于存放页面元素定位和控件操作。操作层:则是一些封装好的功能用例模块。业务层:则是我们真正的测试用例的操作部分。
  下面将举例说明PageObject设计模式,我们还有360影视页面为例,来做进一步讲解。
  1、基础层
  先创建一个包,名为com。pagefactory。demo,接着在这个包下创建一个类名为HomePage,具体示例代码如下:importorg。openqa。selenium。WebDriver;importorg。openqa。selenium。chrome。ChromeDriver;importorg。openqa。selenium。support。PageFactory;authorrongrong基础页面publicclassHomePage{privatestaticWebDriverdriver;用来传递WebDriverreturnpublicstaticWebDriverdriver(){returndriver;}publicHomePage(){设置系统变量,并设置chromedriver的路径为系统属性值System。setProperty(webdriver。chrome。driver,toolchromedriver。exe);实例ChromeDriverdrivernewChromeDriver();PageFactory。initElements(driver,this);}打开浏览器publicvoidopen(){driver。get(https:i。360kan。comlogin);}关闭浏览器publicvoidclose(){driver。quit();}publicLoginPageloginPage(){LoginPageloginPagenewLoginPage();returnloginPage;}}
  这是我的基础页面,为了让driver抽离出去
  2、对象层
  接着我们再来创建一个类,名为LoginPage,具体示例代码如下:importorg。openqa。selenium。WebElement;importorg。openqa。selenium。support。CacheLookup;importorg。openqa。selenium。support。FindBy;importorg。openqa。selenium。support。How;importorg。openqa。selenium。support。PageFactory;authorrongrong对象库层代码案例publicclassLoginPage{publicLoginPage(){PageFactory。initElements(HomePage。driver(),this);}定位用户名输入框FindBy(howHow。NAME,usingloginname)第一种写法CacheLookupprivateWebElementuserName;定位密码输入框FindBy(nameloginpassword)第二种写法CacheLookupprivateWebElementpassWord;定位登录按钮FindBy(linkText立即登录)CacheLookupprivateWebElementloginBtn;定位提示错误信息FindBy(css〔classbsigninerrorjsbsigninerrorerror2〕)CacheLookupprivateWebElementerrorMsg;publicWebElementgetUserName(){returnuserName;}publicWebElementgetPassWord(){returnpassWord;}publicWebElementgetLoginBtn(){returnloginBtn;}publicWebElementgetErrorMsg(){returnerrorMsg;}用户名输入操作paramuserNamepublicvoidsendKeysUserName(StringuserName){getUserName()。clear();getUserName()。sendKeys(userName);}密码输入操作parampassWordpublicvoidsendKeysPassWord(StringpassWord){getPassWord()。clear();getPassWord()。sendKeys(passWord);}}
  3、操作层
  接着我们再来创建一个类,名为LoginMovies,用来记录登录的一系列操作,具体示例代码如下:packagecom。demo;importorg。testng。Assert;authorrongrong操作层代码案例publicclassLoginMovies{登录过程paramuserNameparampwdparamexpectedpublicvoidloginByPageFactory(StringuserName,Stringpwd,Stringexpected){HomePagehomePagenewHomePage();打开登录页homePage。open();输入用户名homePage。loginPage()。sendKeysUserName(userName);输入密码homePage。loginPage()。sendKeysPassWord(pwd);点击登录homePage。loginPage()。getLoginBtn()。click();获取提示语操作StringmsghomePage。loginPage()。getErrorMsg()。getText();验证输入手机号错误是否提示Assert。assertEquals(msg,expected);关闭浏览器homePage。close();}}
  4、业务层
  最后我们再来创建一个类,名为TestPageFactory,用来验证登录功能,具体示例代码如下:importorg。testng。annotations。Test;authorrongrong业务层代码案例publicclassTestPageFactory{测试登录TestpublicvoidtextLogin(){实例化操作对象LoginMoviesloginMoviesnewLoginMovies();登录操作loginMovies。loginByPageFactory(youruserName,yourpassWord,输入手机号不合法);}}
  从以上代码看,如果页面元素发生变化,我们在对应类里修改对应元素即可,而操作和业务层流程类及用例都不用改,如果仅是业务流程更改,只需要维护业务层流程类业务脚本,其他几个类都不用改,从而做到了很好的将页面、元素、脚本进行了分离。

为什么全国人口没有增加,双十一销售额却逐年递增呢?因为以前是双11一天的销售额,现在是半个月的销售额。虽然人口没有增加,但拥有购买力的还是那一批人,而且随着年龄的增加,大部分的收入也在增加,相应的消费能力也增加了你……4小时成交额超去年全天海信激光电视ULED游戏电视成双11爆中证网讯(王珞)今年双11进入第13个年头,海信电视开售4小时成交额超过去年11月11日全天。作为客厅高端大屏消费的引领者,海信80英寸及以上高端大屏销售额全网第一,其中海信U……有了微信支付宝,还需要数字人民币吗?相比于现金使用存在的印制发行成本高、携带不便等局限,数字人民币的出现通过电子账本的方式,替代了实体货币,节约了现金生产和流通时所需的各项成本。而且,基于数字加密和区块链等技术,……各位网友,网上有流量多套餐优惠的流量卡或者物联卡推荐吗?套餐是不断更新的,最近有两个电信卡性价比相当非常高哈!而且都是正规卡,流量不会虚标,可以接打电话收发短信正常注册之类的其实基本每个月都会出新套餐,今年政策原因,好套餐有所……联想走到今天的感叹与朋友喝酒闲谈过联想集团,或许用战略眼光来评价当年联想的重要人物柳,倪都有点牵强。骨子里可能还是商人的思维和技人的思维之区别。假如思考更长,更深一点,实际上人类社会的发展进步是……华为手机与苹果手机你会买谁?感谢您的阅读!华为手机和苹果手机到底会买谁?不管是华为手机还是苹果手机,都是目前来说非常值得我们消费者关注的手机品牌,这两个品牌的优势确实还是比较明显的,国产手机特……手机内存多少够用我用手机,经历了8G,16G,32,64直接过度,来到了128G的红米k20pro,现在每天需要清理手机,我当初想买的时候,是想选择256G,但是当时没过,就选择了这个128G……华为空出的手机市场,国产三大品牌接盘了2021年上半年最新中国智能手机品牌出货量排名:第一OPPO530万左右;第二vivo500万;第三小米350万;第四苹果340万;第五华为210万左右。OV曾经被消费者……锂电池大跌,白酒又成香饽饽?大家好,距上次发文又过了差不多10天了,在11月29的时候我又再次给持仓新能源车锂电池的提示了高位风险,可无奈还有人在上面等被割,为什么新能源车锂电池能撑到现在,我在29号的文……威马,智能汽车带您智享出行伴随良好的新能源汽车市场发展态势,威马汽车作为出色的造车新势力成员之一,推出了多款搭载智能科技的新能源汽车,深得用户喜爱。仅在11月,威马交付的智能新能源汽车已达5,027辆,……在Python中使用Asyncio系统(34)Task和FuTask和Future前面我们讨论了协程,以及如何在循环中运行它们才有用。现在我想简单谈谈Task和Futureapi。你将使用最多的是Task,因为你的大部分工作将涉及……有没有预算在4k的全面屏手机推荐?感觉这个问题就是给一加量身提的啊,无刘海无水滴无打孔,屏下摄像头还没量产,只有升降摄像头,4000左右,性能好,看了一圈貌似只有7pro了吧。虽然是上半年发的,但骁龙855和8……
小米8探索版不简单三项功能首次出现在安卓手机上小米8可以说是这两天行业圈里最受关注的产品之一,5月31日小米一口气推出了8系列的三款新机,作为小米成立8周年的献礼。其中小米8透明探索版更是采用了两项安卓手机阵营从未使用过的……谁都知道上清北天赋比勤奋更重要,为啥偏偏老师从来不说?事实就是这样,有些人穷极一生也达不到别人的起点;有些人在错误的方向努力一辈子,无非就是为了寻求个自我安慰,努力到让自己感动。文科类的我不敢说,理工科类,从来没有一个名家只靠勤奋……33个按键配备触摸板,畅玩各种游戏小鸡G5游戏手柄作为红白机陪伴成长的一代人,对手柄有着特殊的感情,现在还记得一群小伙伴挤在一台电视机前玩超级玛丽和魂斗罗的游戏。如今,游戏画面越来越逼真精美,也不在需要电视的帮忙,只需要一部小……声临其境雷蛇魔音海妖mini麦克风体验评测(体验篇)【引言】当一个游戏主播最重要的是什么?是能说会道的口才;当一个竞技玩家最靠谱的是什么?是清晰无延迟的通话。当游戏需要用到说这个功能的时候,一支好用的麦克风就显……酒店如何变得更加智能以适应不断变化的时代酒店变得越来越智能。作为全球规模最大、历史最悠久的行业之一,酒店业数千年来一直在适应不断变化的世界。近几十年来,由于技术进步和随之而来的客人期望的提高,这种速度加快了。最近,C……灯圈儿洗暗槽勾勒造型,家装中使用灯带,让装修更靓眼如何在不吊顶的情况下安装灯带首先我先理解一下题主的问题如何在不吊顶的情况下安装灯带,我的理解是题主家里并没有做吊顶,但还想要用到灯带产品。如果按我的理解,这个是没有必要的……装修前兴高采烈,入住后叫苦不迭,这8个装修大坑可把我害苦了最近大学同学搬了新房,昨晚与同学聊天时,随口问了她一句,入住新家后的感受如何?没想到却戳中了同学的痛点,引得她大倒苦水,说自己入住一个周就感觉装修太差,这也有问题,那也有问题,……这款好用的国产远程办公软件真的爱了疫情期间,不能随时随地到公司办公,这时候有一款远程控制软件是不是就方便很多呢?欲善其事必先利其器,很多人这时候苦恼的,就是如何选择一款靠谱的远程办公工具。由国人自主……拼多多瞄准新款MacBook,等等党再次胜利,果粉酸了曾经何时,本该是上帝的消费者们,被各大品牌的营销战略硬生生逼成了乙方,每当某些品牌出了新品,就要带着钱彻夜排队抢货,明明是掏钱买东西,还要陪着小心看尽脸色。好在,这种本末倒置的……春节过后,招聘季来了,不少人都准备跳槽了,你打算换工作吗?大家都知道,每年的春节后,都是各单位的应聘高峰期,当然了,也是求职者应聘的黄金期,因为道理很简单,一年之计在于春,春季正是规划的时候,一切才刚刚开始,时间来得及。而现在很多年轻……大数据开发OLAP开源数据分析引擎简介针对于不断新增的海量数据资源,企业需要通过及时地数据分析处理,才能从中挖掘出价值线索,反哺业务,实现数据驱动业务发展。而企业级的数据分析场景,多是采用OLAP数据分析引擎。今天……大数据开发和大数据分析有什么区别吗?近几年,大数据技术的应用为人们带来了许多便利,其中大数据开发和大数据分析作为大数据技术的其中两个分支,它们之间有什么区别呢?一、概念及应用1、大数据开发概念:……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网