量角器将元素内部文本写入文件
Protractor writing element inner text to a file
我正在尝试获取元素内部文本并将内部文本写入文件,但我没有成功。程序运行并写入 csv 文件,但只写入全局变量等于什么而不是元素的内部文本这就是我所做的:
带全局变量的配置文件:
it('Get CycleStatus, Paydate, Weeknumber, Clientid - completed',函数(){
//
var cycle = $('#cycleStatusID');
browser.wait(EC.elementToBeClickable(cycle), 20000).then(function() {
cycle.getText().then(function(text){
if (['Cycle Complete',
'Entering Payroll Information',
'Correcting Input',
'UnderReview'].indexOf(text) >= 0) {
cycleStatus= text;
console.log(cycleStatus+ ' - Displayed');
} else {
cycleStatus= 'Cycle unknown';
console.log(cycleStatus);
}
});
});
var fs = require('fs');
fs.appendFile('/Users/hoflerj/Desktop/Protractor/WFN/psreport.csv',cycleStatus, function (err) {
if (err) throw err;
console.log('write complete!');
});
});//spec function
似乎是在实际将信息存储在变量中之前写入它应该是输入工资单信息然后说写入完成。
它正在写入文件但将其放在所有一列中时出现问题。
const fs = require('fs');
const cycle = $('#cycleStatusID'); // cycle status
const client = $('#clientID'); // clientid
const writeValueToFile = (value) => {
return fs.appendFile('/Users/hoflerj/Desktop/Protractor/WFN/psreport.csv', value + ";" + "hellow world", function (err) {
if (err) throw err;
console.log('write complete!');
});
}
您现在得到 "undefined" 的原因是您在全局声明中也拼错了 cycleStatus
。如果你解决了这个问题,你最终会回到开始的地方。
如果您向控制台输出 cycleStatus
而不是自定义消息,您可能能够更好地进行调试。您还在 browser.wait
中使用了千位分隔符,删除它们可能会也可能不会解决问题。我认为您需要稍微整理一下,以便您可以看到自己在做什么。
试试这个:
var cycle = $('#cycleStatusID');
browser.wait(EC.elementToBeClickable(cycle), 20000).then(function() {
cycle.getText().then(function(text){
if (['Cycle Complete',
'Entering Payroll Information',
'Correcting Input',
'UnderReview'].indexOf(text) >= 0) {
cycleStatus = text;
console.log(cycleStatus + ' - Displayed');
} else {
cycleStatus = 'Cycle unknown';
console.log(cycleStatus);
}
});
});
如果将它放在上下文中时这不起作用,您可能必须使用承诺 return cycleStatus
给 csv 编写器。
所以我认为您误解了 promises 和变量作用域的工作原理。
const fs = require('fs');
const cycle = $('#cycleStatusID');
const writeValueToFile = (value) => {
return fs.appendFile('/Users/hoflerj/Desktop/Protractor/WFN/psreport.csv', value, function (err) {
if (err) throw err;
console.log('write complete!');
});
}
const acceptableValues = ['Cycle Complete', 'Entering Payroll Information', 'Correcting Input', 'UnderReview'];
// Cleaned your code up
browser.wait(EC.elementToBeClickable(cycle), 20000)
.then(() => {
const cycleStatus;
cycle.getText()
.then((text) => {
if (acceptableValues.indexOf(text) >= 0) {
cycleStatus = text;
console.log(cycleStatus+ ' - Displayed');
} else {
cycleStatus = 'Cycle unknown';
console.log(cycleStatus);
}
})
.then(() => {
writeValueToFile(cycleStatus);
});
});
//Here it is cleaner but could be confusing for you since you don't fully understand promises yet.
browser.wait(EC.elementToBeClickable(cycle), 20000)
.then(() => {
return cycle.getText()
.then((text) => {
if (acceptableValues.indexOf(text) >= 0) {
return text;
} else {
return 'Cycle unknown';
}
})
.then(writeValueToFile);
});
编辑:
承诺:代码最初编写的方式,你的代码调用了 browser.wait() 并且永远不会 运行 你的 then 块中的任何代码,执行你的写函数,然后它 运行 then 块中的代码。这导致您的变量未定义。因为它是在写入函数 运行 之后设置的。
这是我第一次尝试理解 promises 时使用的一篇很棒的文章
https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html
您也可能遇到变量提升问题,但也许没有。我看到您在 then 块中为 cycleStatus 设置变量,但从未看到您在哪里定义它。当您到达写入文件的部分时,这可能会导致全局变量或该变量未定义,因为该变量从未在当前范围内定义。
https://www.designingforscale.com/understanding-hoisting-in-javascript/
我正在尝试获取元素内部文本并将内部文本写入文件,但我没有成功。程序运行并写入 csv 文件,但只写入全局变量等于什么而不是元素的内部文本这就是我所做的:
带全局变量的配置文件:
it('Get CycleStatus, Paydate, Weeknumber, Clientid - completed',函数(){
//
var cycle = $('#cycleStatusID');
browser.wait(EC.elementToBeClickable(cycle), 20000).then(function() {
cycle.getText().then(function(text){
if (['Cycle Complete',
'Entering Payroll Information',
'Correcting Input',
'UnderReview'].indexOf(text) >= 0) {
cycleStatus= text;
console.log(cycleStatus+ ' - Displayed');
} else {
cycleStatus= 'Cycle unknown';
console.log(cycleStatus);
}
});
});
var fs = require('fs');
fs.appendFile('/Users/hoflerj/Desktop/Protractor/WFN/psreport.csv',cycleStatus, function (err) {
if (err) throw err;
console.log('write complete!');
});
});//spec function
似乎是在实际将信息存储在变量中之前写入它应该是输入工资单信息然后说写入完成。
它正在写入文件但将其放在所有一列中时出现问题。
const fs = require('fs');
const cycle = $('#cycleStatusID'); // cycle status
const client = $('#clientID'); // clientid
const writeValueToFile = (value) => {
return fs.appendFile('/Users/hoflerj/Desktop/Protractor/WFN/psreport.csv', value + ";" + "hellow world", function (err) {
if (err) throw err;
console.log('write complete!');
});
}
您现在得到 "undefined" 的原因是您在全局声明中也拼错了 cycleStatus
。如果你解决了这个问题,你最终会回到开始的地方。
如果您向控制台输出 cycleStatus
而不是自定义消息,您可能能够更好地进行调试。您还在 browser.wait
中使用了千位分隔符,删除它们可能会也可能不会解决问题。我认为您需要稍微整理一下,以便您可以看到自己在做什么。
试试这个:
var cycle = $('#cycleStatusID');
browser.wait(EC.elementToBeClickable(cycle), 20000).then(function() {
cycle.getText().then(function(text){
if (['Cycle Complete',
'Entering Payroll Information',
'Correcting Input',
'UnderReview'].indexOf(text) >= 0) {
cycleStatus = text;
console.log(cycleStatus + ' - Displayed');
} else {
cycleStatus = 'Cycle unknown';
console.log(cycleStatus);
}
});
});
如果将它放在上下文中时这不起作用,您可能必须使用承诺 return cycleStatus
给 csv 编写器。
所以我认为您误解了 promises 和变量作用域的工作原理。
const fs = require('fs');
const cycle = $('#cycleStatusID');
const writeValueToFile = (value) => {
return fs.appendFile('/Users/hoflerj/Desktop/Protractor/WFN/psreport.csv', value, function (err) {
if (err) throw err;
console.log('write complete!');
});
}
const acceptableValues = ['Cycle Complete', 'Entering Payroll Information', 'Correcting Input', 'UnderReview'];
// Cleaned your code up
browser.wait(EC.elementToBeClickable(cycle), 20000)
.then(() => {
const cycleStatus;
cycle.getText()
.then((text) => {
if (acceptableValues.indexOf(text) >= 0) {
cycleStatus = text;
console.log(cycleStatus+ ' - Displayed');
} else {
cycleStatus = 'Cycle unknown';
console.log(cycleStatus);
}
})
.then(() => {
writeValueToFile(cycleStatus);
});
});
//Here it is cleaner but could be confusing for you since you don't fully understand promises yet.
browser.wait(EC.elementToBeClickable(cycle), 20000)
.then(() => {
return cycle.getText()
.then((text) => {
if (acceptableValues.indexOf(text) >= 0) {
return text;
} else {
return 'Cycle unknown';
}
})
.then(writeValueToFile);
});
编辑: 承诺:代码最初编写的方式,你的代码调用了 browser.wait() 并且永远不会 运行 你的 then 块中的任何代码,执行你的写函数,然后它 运行 then 块中的代码。这导致您的变量未定义。因为它是在写入函数 运行 之后设置的。 这是我第一次尝试理解 promises 时使用的一篇很棒的文章 https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html
您也可能遇到变量提升问题,但也许没有。我看到您在 then 块中为 cycleStatus 设置变量,但从未看到您在哪里定义它。当您到达写入文件的部分时,这可能会导致全局变量或该变量未定义,因为该变量从未在当前范围内定义。 https://www.designingforscale.com/understanding-hoisting-in-javascript/