使用 fixture 和 POM 时,cypress 返回 "undefined" 参数
cypress returning "undefined" argument when using fixture and POM
在修复了我的固定装置的一些问题后,我正在使用 POM 玩弄柏树脚本,但是每当我希望我的函数键入我的 JSON 文件中的一些数据时,我会收到以下消息
cy.type() can only accept a string or number. You passed in: undefined
这是我的代码,我确保遵循有关如何使用固定装置的正确说明
import loginPage from '../POM/pomtest.js'
const credentials = require('../../fixtures/loginTestCases.json')
/// <reference types= "cypress" />
describe("test suite", function(){
let credentials;
before(() => {
cy.fixture('loginFixture').then((logindata) =>{
credentials = logindata;
return credentials
});
})
beforeEach(() =>{
loginPage.visit();
cy.wrap(credentials).as('credentials')
})
it('incorrect username', function (){
loginPage.clickLoginBtn()
loginPage.typeUsername(this.credentials.usernameIncorrecto);
loginPage.typePassword(this.credentials.passwordCorrecto);
loginPage.clickLoginBtn();
loginPage.elements.myNotes().should('have.text', this.credentials.loginFallido);
})
it('incorrect password', function (){
loginPage.clickLoginBtn()
loginPage.typeUsername(this.credentials.usernameCorrecto);
loginPage.typePassword(this.credentials.passwordIncorrecto)
loginPage.clickLoginBtn()
loginPage.elements.myNotes().should('have.text', this.credentials.loginFallido)
})
it('Valid Login', function (){
loginPage.clickLoginBtn()
loginPage.typeUsername(this.credentials.usernameCorrecto);
loginPage.typePassword(this.credentials.passwordCorrecto)
loginPage.clickLoginBtn()
loginPage.elements.myNotes().should('have.text', this.credentials.loginCorrecto)
})
})
这是我的 POM 文件
class loginPage{
elements = {
usernameInput: () => cy.xpath("//input[@placeholder='Username']"),
passwordInput: () => cy.xpath("//input[@name='login.password']"),
loginBtn: () => cy.get('button').contains('Login'),
errorMsg: () => cy.get('#login-error-message'),
myNotes: () => cy.get('H2')
}
typeUsername(username){
this.elements.usernameInput().type(username);
}
typePassword(password){
this.elements.passwordInput().type(password);
}
clickLoginBtn(){
this.elements.loginBtn().click();
}
visit(){
cy.visit("http://testapp.galenframework.com/")
}
fillemail(value){
let field = cy.xpath("//input[@placeholder='Username']")
field.clear()
field.type(value)
}
fillpassword(value){
let field = cy.xpath("//input[@name='login.password']")
field.clear()
field.type(value)
}
}
//export default loginPage
module.exports = new loginPage();
我在尝试键入 JSON 文件中的内容时遇到错误
[
{
"usernameIncorrecto": "incorrecto@gmail.com",
"passwordIncorrecto": "incorrecta",
"usernameCorrecto": "testuser@example.com",
"passwordCorrecto": "test123",
"loginFallido": "The username or password are incorrect",
"loginCorrecto": "My Notes"
}
]
你的问题是你的 credentials
变量是一个数组,但你正试图直接访问变量没有的属性。 (此外,您调用的属性在对象上不存在,即使它们被正确引用也是如此。您应该切换到通过索引查找数据,或者在对象上使用名称 属性。
// accessing data via an index
it('incorrect username', function (){
loginPage.clickLoginBtn()
loginPage.typeUsername(this.credentials[0]. usernameIncorrecto);
loginPage.typePassword(this.credentials[0]. passwordIncorrecto);
loginPage.clickLoginBtn();
loginPage.elements.myNotes().should('have.text', this.credentials[0]. loginFallido);
})
请注意上面我是如何使用 this.credentials[0]
访问您的 JSON 中的第一个对象的。使用此方法,您还可以在 it
块的开头声明一个变量以简化此操作。
it('incorrect username', function() {
const creds = this.credentials[0];
...
loginPage.typeUsername(creds.usernameIncorrecto);
...
})
在修复了我的固定装置的一些问题后,我正在使用 POM 玩弄柏树脚本,但是每当我希望我的函数键入我的 JSON 文件中的一些数据时,我会收到以下消息
cy.type() can only accept a string or number. You passed in: undefined
这是我的代码,我确保遵循有关如何使用固定装置的正确说明
import loginPage from '../POM/pomtest.js'
const credentials = require('../../fixtures/loginTestCases.json')
/// <reference types= "cypress" />
describe("test suite", function(){
let credentials;
before(() => {
cy.fixture('loginFixture').then((logindata) =>{
credentials = logindata;
return credentials
});
})
beforeEach(() =>{
loginPage.visit();
cy.wrap(credentials).as('credentials')
})
it('incorrect username', function (){
loginPage.clickLoginBtn()
loginPage.typeUsername(this.credentials.usernameIncorrecto);
loginPage.typePassword(this.credentials.passwordCorrecto);
loginPage.clickLoginBtn();
loginPage.elements.myNotes().should('have.text', this.credentials.loginFallido);
})
it('incorrect password', function (){
loginPage.clickLoginBtn()
loginPage.typeUsername(this.credentials.usernameCorrecto);
loginPage.typePassword(this.credentials.passwordIncorrecto)
loginPage.clickLoginBtn()
loginPage.elements.myNotes().should('have.text', this.credentials.loginFallido)
})
it('Valid Login', function (){
loginPage.clickLoginBtn()
loginPage.typeUsername(this.credentials.usernameCorrecto);
loginPage.typePassword(this.credentials.passwordCorrecto)
loginPage.clickLoginBtn()
loginPage.elements.myNotes().should('have.text', this.credentials.loginCorrecto)
})
})
这是我的 POM 文件
class loginPage{
elements = {
usernameInput: () => cy.xpath("//input[@placeholder='Username']"),
passwordInput: () => cy.xpath("//input[@name='login.password']"),
loginBtn: () => cy.get('button').contains('Login'),
errorMsg: () => cy.get('#login-error-message'),
myNotes: () => cy.get('H2')
}
typeUsername(username){
this.elements.usernameInput().type(username);
}
typePassword(password){
this.elements.passwordInput().type(password);
}
clickLoginBtn(){
this.elements.loginBtn().click();
}
visit(){
cy.visit("http://testapp.galenframework.com/")
}
fillemail(value){
let field = cy.xpath("//input[@placeholder='Username']")
field.clear()
field.type(value)
}
fillpassword(value){
let field = cy.xpath("//input[@name='login.password']")
field.clear()
field.type(value)
}
}
//export default loginPage
module.exports = new loginPage();
我在尝试键入 JSON 文件中的内容时遇到错误
[
{
"usernameIncorrecto": "incorrecto@gmail.com",
"passwordIncorrecto": "incorrecta",
"usernameCorrecto": "testuser@example.com",
"passwordCorrecto": "test123",
"loginFallido": "The username or password are incorrect",
"loginCorrecto": "My Notes"
}
]
你的问题是你的 credentials
变量是一个数组,但你正试图直接访问变量没有的属性。 (此外,您调用的属性在对象上不存在,即使它们被正确引用也是如此。您应该切换到通过索引查找数据,或者在对象上使用名称 属性。
// accessing data via an index
it('incorrect username', function (){
loginPage.clickLoginBtn()
loginPage.typeUsername(this.credentials[0]. usernameIncorrecto);
loginPage.typePassword(this.credentials[0]. passwordIncorrecto);
loginPage.clickLoginBtn();
loginPage.elements.myNotes().should('have.text', this.credentials[0]. loginFallido);
})
请注意上面我是如何使用 this.credentials[0]
访问您的 JSON 中的第一个对象的。使用此方法,您还可以在 it
块的开头声明一个变量以简化此操作。
it('incorrect username', function() {
const creds = this.credentials[0];
...
loginPage.typeUsername(creds.usernameIncorrecto);
...
})