抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

背景

上文举例了公共方法,用的是登陆的例子,然后发现每个case都会走一遍登陆,这也太恶心了。能不能只登陆一次?作为前端语言来讲,这种便捷功能,获取cookie,自定义cookie必须有啊。

cypress关于cookie操作的官方文档:https://docs.cypress.io/api/cypress-api/cookies.html

思路

登陆写成Command

Before中调用登陆实现只登陆一次

BeforeEach每次进到某个页面

执行case

以测试采购模块为例

image.png

实现

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') //#+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)

//getCookies获取的是所有cookie,是一个list,办法直接按name获取,用getCookie好点。
cy.getCookie('sid').then( function ($sid) {
//给变量sid赋值
sid = $sid.value
});

cy.getCookie('_pre').then( function ($_pre) {
//给变量token赋值
token = $_pre.value
})
})

beforeEach(()=>{
//往cookie中赋值
Cypress.Cookies.preserveOnce('$sid', $sid)
Cypress.Cookies.preserveOnce('_pre', token)
cy.newBill().wait(4000)

})

it('新建XX单', () => {
getIframeBody().contains('新建XX单').click();
})


})

评论