首页天道酬勤cypresshill,什么是po单

cypresshill,什么是po单

张世龙 05-06 09:33 77次浏览

cypress的PO模式1、环境部署1、node.js [ https://nodejs.org/zh-cn/] (3359 nodejs.org/zh-cn/) 2的安装、cypress 1的安装以下命令生成NPMinit----package.JSON文件npmconfigsetregistry 3359 registry.NPM.Taobao.org-- -镜像库地址npminstallcao 进入/users/dabing/cypress _ public/node _ modules/. bin目录

cypress open

方法npx cypress open

方法3:1 )修改package.json,然后添加类似以下内容的scripts代码段:

运行' script ' { ' cypress ' : ' cypress open ' }2} npmruncypress

运行后,将生成cypress文件夹

写用例是在这个目录下

二、UI和Api的第一个例子直接放在代码上,备注也注明

//context是测试套件context (登录)、()={ //ui访问示例it )、)输入正确的用户名和密码后,登录成功)、()={ //要访问的url selenium的getcy.visit (http://PC-PP.xingfuyikatong.com/log in # none ' ) cy.get(#normallogintab ' ).CLL forml ogin.item-fore5. log in-BTN.BTN-img ).click () ) ) 65 (退出) ) /接口访问示例it ()错误的用户此外,POST、PUT、DELETE等方法: ' post ', 是否将主体值转换为url encoded,并设置x-www=form-urlencoded标头form:true,//body表示委托主体主体: (loginname (: ) ) ) passport idkey (3360 )、' platform ' : ' H5 ' }.then (response={//断言expect(response.status ).to.BBB 该工具将所有元素封装在对象中,许多演进的工具和设计思想也由此继承,也是可以创建c/s框架的UI自动化。 随之衍生出更多轻量级工具,cypress轻量级高效的开发能力确实受到很多人的欢迎。 再次,只是针对以前使用selenium时的PO设计思想适用于cpyress。

以下是设计的目录结构

PO设计模式的两个主要概念:业务对象封装、页面封装常见业务流

1、包对象标识属性- JSON-element config.JSON { ' logi npage ' : } ' username ' 3360 ' # username ', ' password ' : ' # pwd ' submit ' 3360 ' # forml ogin.item-fore5. log in-BTN.BTN-img ',' account error ' 3360 '

page.js–>class LoginPage 3、封装常见业务方法–loginpage.js–>class LoginPage import locator from './elementConfig.json'export default class LoginPage { constructor() { this.url = 'http://pc-pp.xingfuyikatong.com/login' } // 封装页面对象 get getByUsername(){ return cy.get(locator.loginPage.username) } get getByPassword(){ return cy.get(locator.loginPage.password) } get getBySubmit(){ return cy.get(locator.loginPage.submit) } get getByAccountError(){ return cy.get(locator.loginPage.accountError) } get getByExit(){ return cy.get(locator.loginPage.exit) } visit(){ cy.visit(this.url) } // 封装常见业务流 login(name,pwd){ cy.get('#normalLoginTab').click() cy.wait(1) if(name!==""){ this.getByUsername.type(name) } if(pwd!==""){ this.getByPassword.type(pwd) } this.getBySubmit.click() }} 4、编写测试用例:testLogin.js–调用loginpage.js–>class LoginPage import LoginPage from "./page/loginPage";import 'cypress-xpath'context('登录',()=> { it ('输入正确的用户名和密码,可以登录成功', () => { let login = new LoginPage() login.visit() login.login('10111111111','lc123123') login.getByExit.should('contain','退出') }) it ('输入错误的用户名和密码,登录失败', () => { let login = new LoginPage() login.visit() login.login('10111111111','error') login.getByAccountError.should('contain','您输入的用户名或密码错误!') })}) 四、常用定位元素的命令 describe('选择器及元素定位',()=>{ beforeEach(()=>{ cy.visit('https://example.cypress.io/commands/querying') }) // -------------------------选择器-------------------------- it('方式1:id 选择器',()=>{ cy.get('#query-btn').should('contain','Button') //BDD }) it('方式2:标签 选择器',()=>{ cy.get('button').should('contain','Button') //BDD }) it('方式3:属性 选择器',()=>{ cy.get('[id="query-btn"]').should('contain','Button') //BDD }) it('方式4:标签+属性 选择器',()=>{ cy.get('button[id="query-btn"]').should('contain','Button') //BDD }) it('方式5:id+属性 选择器',()=>{ cy.get('#inputName[placeholder="Name"]').type('huice') }) it('方式6:class 选择器',()=>{ cy.get('.query-btn').should('contain','Button') }) it('方式7:级联混合 选择器',()=>{ cy.get('#querying .well>button').should('contain','Button') }) it('方式8::nth-child(n)',()=>{ cy.get('.query-ul').get(':nth-child(2)').should('contain','Two') }) // ------------------------元素获取----------------------- // 方法一:get,略 it('contains 一',()=>{ cy.get('.query-list').contains('bananas').should('have.class', 'third') }) it('contains 二',()=>{ cy.get('#querying').contains('ul', 'oranges').should('have.class', 'query-list') }) it('find 二',()=>{ cy.get('#querying').find('.first').should('contain','first') }) it('with',()=>{ cy.get('.query-form').within(() => { cy.get('input:first').should('have.attr', 'placeholder', 'Email') cy.get('input').first().should('have.attr', 'placeholder', 'Email') cy.get('input').eq(0).should('have.attr', 'placeholder', 'Email') cy.get('input:last').should('have.attr', 'placeholder', 'Password') }) })}) // 其它辅助方法: // .children():获取dom元素的子元素 // .parents():获取dom元素的所有父元素 // .parent():获取向上级的第一层父元素 // .siblings():获取所有同级元素(兄弟元素) // .first():匹配找到的第一个元素 // .last():匹配找到的最后一个元素 // .next():匹配紧跟着的下一个同级元素 // .nextAll:匹配该对象之后的所有同级元素 // .nextUntil():匹配该对象之后的所有同级元素,直到遇到Until中定义的元素为止 // .prev:与next()相反 // .prevAll:与nextAll相反 // .prevUntil():与nextUntil相反 // .each():遍历所有子元素 // it('each遍历所有元素',()=>{ // cy.get('.query-ul').each(($li) => { // cy.log($li.text()) // }) // }) // // .eq(index):根据索引获取指定元素 // it.only('eq获取指定元素',()=>{ // cy.get('.query-ul').get('li').eq(1).should('contain','Two') // }) // -----------------------元素常见操作-------------------------- // .click() // .dblclick() // .rightclick() // .type() // .clear() // .check() // .uncheck() // .select('huice') .select(['huice1','huice2']) // .trigger() // .visit() // .reload()/.reload(true) --强制刷新 // .viewpoint(1024,768) --设置窗口大小 // 后退:.go('back')/.go(-1) 前进:.go('forward')/.go(1) // 判断元素是否可见:.should('be.visible')/.should('not.be.visible') // 判断元素是否存在:.should('exist')/.should('not exist') // 操作被覆盖的元素,例如:.click({force:true})
项目管理中的po,评价po8