背景
上文举例了公共方法,用的是登陆的例子,然后发现每个case都会走一遍登陆,这也太恶心了。能不能只登陆一次?作为前端语言来讲,这种便捷功能,获取cookie,自定义cookie必须有啊。
cypress关于cookie操作的官方文档:https://docs.cypress.io/api/cypress-api/cookies.html
思路
登陆写成Command
Before中调用登陆实现只登陆一次
BeforeEach每次进到某个页面
执行case
以测试采购模块为例

实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| const getIframeDocument = () => { return cy .get('iframe的id') .its('0.contentDocument') };
const getIframeBody = () => { return getIframeDocument() .its('body').should('not.be.undefined') .then(cy.wrap) };
Cypress.Commands.add('login', (username, passwd) => { cy.visit('登陆地址') cy.get('').type(username) cy.get('').type(passwd) cy.get('').click() });
Cypress.Commands.add('newBill', ()=>{ cy.get('').click(); });
describe('快速登陆',function(){
let sid = undefined; let token = undefined;
before(()=>{ Cypress.Cookies.debug(true)
cy.login('账号', '密码', ()=>{ }).wait(4000)
cy.getCookie('sid').then( function ($sid) { sid = $sid.value });
cy.getCookie('_pre').then( function ($_pre) { token = $_pre.value }) })
beforeEach(()=>{ Cypress.Cookies.preserveOnce('$sid', $sid) Cypress.Cookies.preserveOnce('_pre', token) cy.newBill().wait(4000)
})
it('新建XX单', () => { getIframeBody().contains('新建XX单').click(); })
})
|