Итак, я пытался реорганизовать свой код с самого начала, и теперь я подошел к части, где он выглядит довольно аккуратно, но падает, когда речь заходит о получении различных элементов из функций.
Мой скрипт начинается с:
const DetailsPage = require('../tests/detailsPageObj');
describe('Details page', function () {
detailsPage = new DetailsPage();
// The details page is accessible by the specified URL
it(`Is defined by the URL: ${userData.url}`, async function () {
await detailsPage.navigate();
});
// Details page has a form and it can be filled out with user data
it('Has a form that can receive user data', async function () {
await detailsPage.fillFormWithUserData(); // Stops here
});
});
и читается с:
module.exports = class DetailsPage {
pageUtils = {
qtyRegex: /^Sorry.*?(\d+)/
};
constructor() {
const _fields = {
email: element(by.id('email')),
firstName: element(by.id('firstName')),
lastName: element(by.id('lastName')),
postalCode: element(by.id('postalCode')),
addressOne: element(by.id('addressOne')),
addressTwo: element(by.id('addressTwo')),
phone: element(by.id('phone')),
businessCustomerCB: element(by.id('isBusinessCustomer')),
company: element(by.id('company')),
GST: element(by.id('gst')),
};
this.getFields = function () { return _fields };
}
getForm() {
return {
fields: this.getFields,
groups: this.getGroups,
buttons: this.getFormButtons,
modals: this.getModals
}
}
async navigate() {
await browser.waitForAngularEnabled(false)
await browser.manage().window().maximize()
await browser.get("helloworld.com")
}
async fillFormWithUserData() {
const formFields = this.getForm().fields;
for (const fieldKey in formFields) {
const formField = formFields[fieldKey];
await utils.presenceOf(formField);
if (fieldKey === 'businessCustomerCB') {
await utils.click(formField);
} else {
await utils.sendKeys(formField, userData[fieldKey])
}
}
}
}
Моя проблема, с которой я сталкиваюсь:
1) Details page
Has a form that can receive user data:
TypeError: Cannot read property 'getWebElement' of undefined
at utils.click (utils\utils.js:18:70)
at Context.<anonymous> (pagesDesktop\detailsPage.js:20:21)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
, которая, по моему мнению, дает сбой из-за:
asyn c fillFormWithUserData () {
const formFields = this.getForm().fields;
for (const fieldKey in formFields) {
const formField = formFields[fieldKey];
await utils.presenceOf(formField);
if (fieldKey === 'businessCustomerCB') {
await utils.click(formField);
} else {
await utils.sendKeys(formField, userData[fieldKey])
}
}
}
, и причина этого в том, что когда я печатаю console.log(formFields)
, он просто печатает [Function]
, и я также пытался распечатать console.log(fieldKey)
внутри для l oop, но он ничего не распечатывает, и я считаю, что он не читает
const _fields = {
email: element(by.id('email')),
firstName: element(by.id('firstName')),
lastName: element(by.id('lastName')),
postalCode: element(by.id('postalCode')),
addressOne: element(by.id('addressOne')),
addressTwo: element(by.id('addressTwo')),
phone: element(by.id('phone')),
businessCustomerCB: element(by.id('isBusinessCustomer')),
company: element(by.id('company')),
GST: element(by.id('gst')),
};
правильно, потому что я предполагаю, что он должен был распечатать эти вещи как минимум?
У меня вопрос, как я могу заставить свой скрипт читать эти значения и вводить, посылая ключи?
РЕДАКТИРОВАТЬ:
Мне также жаль мой английский sh также. Мне трудно найти правильные слова в названии, и если кто-то, возможно, захочет помочь мне улучшить мой заголовок, я также буду признателен за это!