出于作用域的目的,我已经分隔了变量,我可以用url1中的各个DOM元素填充所有变量,但是当我试图将它们传递给url2字段时,它们被设置为undefined,就像从未设置过变量一样。然而,console.log可以工作。我也向.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());
});发布于 2021-05-30 17:25:29
在我看来,这是您对NodeJS回调的理解的一个问题。
您应该能够使用async/await修复此问题。您的代码没有等待回调解析,并且在set value函数中使用之前没有赋值。你可以尝试下面这样的方法。
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)
});
https://stackoverflow.com/questions/67697671
复制相似问题