Javascript 每个循环未设置超出其范围的变量
我试图检查网页上某列的元素列表是否按降序排列。我有Java背景,所以我仍在试图弄清楚为什么这不起作用。据我所知,当isDescending达到最终预期值时,应该正确设置isDescending,但它与我初始化它时的设置不同 我已经把打印语句放在了循环中,在那里一切都很好 我做了一些挖掘,这可能与它在完成循环之前在底部运行expect有关,或者由于某种原因isDescending实际上没有正确设置有关 我尝试了许多方法,比如setTimeout和其他方法,但都没有解决这个问题 这是下面的代码,寻找任何建议或链接到我可以研究更多的页面Javascript 每个循环未设置超出其范围的变量,javascript,typescript,protractor,Javascript,Typescript,Protractor,我试图检查网页上某列的元素列表是否按降序排列。我有Java背景,所以我仍在试图弄清楚为什么这不起作用。据我所知,当isDescending达到最终预期值时,应该正确设置isDescending,但它与我初始化它时的设置不同 我已经把打印语句放在了循环中,在那里一切都很好 我做了一些挖掘,这可能与它在完成循环之前在底部运行expect有关,或者由于某种原因isDescending实际上没有正确设置有关 我尝试了许多方法,比如setTimeout和其他方法,但都没有解决这个问题 这是下面的代码,寻找
function checkIfDescending(){
// Will hold list of webelements that each have one account number
const accountNumbersDescending = pa_search.account_no_column_elements();
let previousDescendingValue = '';
let isDescending = true;
accountNumbersDescending.each((accountNumberElement) => {
accountNumberElement.getText().then((text) => {
if (previousDescendingValue !== '') {
if (!(text >= previousDescendingValue)) {
isDescending = false;
}
}
previousDescendingValue = text;
});
});
expect(isDescending).toBe(true);
}
最后,如果我将expect放在if语句中,它将正常工作。问题是,如果早期出现故障,它将运行多次。感谢Mark Schultheis为我提供了这个答案。 我不是100%的认为这是做事情的正确方式,但现在它可能通过了/失败了
function checkIfDescending(){
const accountNumbersDescending = pa_search.account_no_column_elements();
let previousDescendingValue = '';
let isDescending = true;
accountNumbersDescending.each((accountNumberElement) => {
accountNumberElement.getText().then((text) => {
if (previousDescendingValue !== '') {
if (!(text >= previousDescendingValue)) {
isDescending = false;
}
}
previousDescendingValue = text;
})
}).then(() => {
expect(isDescending).toBe(true);
});
}
你可以看看这个插件
您需要将值存储在数组或承诺中,并做出
expect
断言。expect在您设置它之前运行,即使它在顺序中是优先的,但在执行顺序中不是。是的,这就是我在尝试了更多东西之后看到的。这就是为什么我去查看如何在javascript/typescript中修复这些类型的东西。到目前为止运气不好。您需要将expect
放入某种事件处理程序中,在所有循环完成后执行,并以某种方式触发它。i、 e.承诺或类似的东西-避免settimeout
,因为这只是表示在某些情况下会失败的代码-并且在阅读承诺后很难诊断,我相信我已经在使用“then”语法了。因此,基本上,事件处理程序只需在循环完成时触发。但是我遇到了同样的问题,如果我有办法知道循环什么时候完成,我就已经有了期望值?在之后,然后在每个
之外-因为每个实例都可能更改值。或者只触发一次,使用false和abort进一步循环…这是一个非常酷的插件。我会去看看并推荐它。将它们存储在阵列中将很容易。