protractor - 量角器:使用 API 调用登录应用程序
问题描述
我正在尝试从 Cypress.io 移回 Protractor,(Cypress 没有我们需要的跨浏览器功能)。赛普拉斯的一大优点是能够进行 API 调用以登录应用程序。
我想知道如何用量角器做到这一点。
这是我的登录请求:
async apiLogin(email: string, password: string) {
const PostURL = browser.baseUrl + 'api/auth/login'
console.log(`Logging in as ${email}`)
const body = {
email: email,
password: password,
}
// tslint:disable-next-line: only-arrow-functions
this.request
.post(PostURL)
.set('Content-Type', 'application/json')
.send(body)
// tslint:disable-next-line: only-arrow-functions
.end(function(err: string, response: any) {
if (err) {
console.log(`Login post error = ${err}`)
} else {
console.log(`Login post response = ${response.status}`)
}
})
}
我在量角器上遇到的问题是我收到了一个成功的请求,但它只是位于登录页面上。
这是我beforeAll()
登录的方法,然后尝试导航到我要访问的应用程序区域。
beforeAll(async () => {
await loginPage.apiLogin(user.email, user.password)
await browser.get(browser.baseUrl + 'explorations/new')
})
不太确定我在这里做错了什么。
解决方案
为了进行 API 调用,我切换到 Axios
async loginAPI(email: string, password: string) {
const PostURL = browser.baseUrl + 'api/auth/login'
const requestBody = {
email: email,
password: password,
}
const response = await axios.post(PostURL, requestBody, {
headers: {
'Content-Type': 'application/json',
},
})
const csrfToken = await response.headers['set-cookie'][0].split(';')[0].split('=')[1]
const sessionID = await response.headers['set-cookie'][1].split(';')[0].split('=')[1]
const results = {
csrfToken,
sessionID,
}
return results
}
然后使用它:
beforeAll(async () => {
const sessionInfo = await loginPage.loginAPI(user.email, user.password)
const csrftoken = await sessionInfo.csrfToken
const sessionID = await sessionInfo.sessionID
await browser.manage().addCookie({
name: 'csrftoken',
value: csrftoken,
})
await browser.manage().addCookie({
name: 'sessionid',
value: sessionID,
})
browser.get(browser.baseUrl + 'home')
})
推荐阅读
- json - 杰克逊 - 使用 JsonNode 类型时对象未保存为基本 JSON
- node.js - 是否有用于 sequelize 的拦截器模式,用于对 db 的敏感数据进行标记化和去标记化
- java - Codenameone "AWT-EventQueue-0" java.lang.UnsupportedClassVersionError: javafx/scene/media/MediaException 已由更新的版本编译
- php - 如何在 PHP 中使用 Itext?
- mysql - mysql select按if else条件计数
- c++ - 我的项目的属性配置正确,但Visual Studio仍然无法打开包含头文件
- c - 如何在C中将a字符串拆分为单独的单词,其中空格不是恒定的?
- powerbi - 根据月份和年份列计算工作日数 - DAX
- python - 在 python 中模拟 Elasticsearch API
- php - Wordpress:允许上传媒体中的 zip 文件