#javascript #scope #nightwatch.js
Вопрос:
Я разделил переменные для целей определения области, я могу заполнить все переменные соответствующими элементами DOM из url1, но когда я пытаюсь передать их в поля url2, они устанавливаются undefined
так, как если бы переменная никогда не была установлена. И все же консоль.журнал работает… Я передал также функцию .setValue('#address-serviceability-form', '', '', function(e){ // set the value here})
, но все равно не определился… Является ли эта проблема с областью видимости переменной?
describe('Ecosia.org Demo', function() {
var address ='';
var streetNumber = '';
var city = '';
var stateAndZip = '';
var state = ''
var zip = '';
before(browser => browser.url('url1.com'));
test('Extract random address', function (browser) {
browser
.getText('.rand_large li:first-child', function(result) {
address = result.value.split("n");
streetNumber = address[0];
console.log('streetNumber', streetNumber) //this works and logs correctly
city = address[1].split(",")[0];
stateAndZip = address[1].split(",")[1];
state = stateAndZip.split(" ")[1];
zip = stateAndZip.split(" ")[2];
})
.url('url2.com')
.waitForElementVisible('form')
.setValue('#address-serviceability-form', streetNumber) // this is set to undefined
.pause(5000)
});
after(browser => browser.end());
});
Ответ №1:
Мне кажется, что это проблема с вашим пониманием обратных вызовов NodeJS.
Вы должны быть в состоянии исправить это с помощью async/await. Ваш код не ожидает разрешения обратного вызова, и значение не назначается перед использованием в функции установить значение. вы могли бы попробовать что-то вроде приведенного ниже.
test('Extract random address', async function(browser) {
await browser
.getText('.rand_large li:first-child', function(result) {
address = result.value.split("n");
streetNumber = address[0];
console.log('streetNumber', streetNumber) //this works and logs correctly
city = address[1].split(",")[0];
stateAndZip = address[1].split(",")[1];
state = stateAndZip.split(" ")[1];
zip = stateAndZip.split(" ")[2];
})
browser.url('url2.com')
.waitForElementVisible('form')
.setValue('#address-serviceability-form', streetNumber) // this is set to undefined
.pause(5000)
});