每个循环不设置其范围之外的变量

时间:2017-07-19 13:58:45

标签: javascript typescript protractor

我正在尝试检查网页上某列的元素列表是否按降序排列。我来自Java背景,所以我仍然想弄清楚为什么这不起作用。据我所知,当它达到最终预期时,isDescending应该被正确设置,但它永远不会改变我初始化它。

我之前已将print语句放在循环中,并且一切正常。

我做了一些挖掘,它可能与它在完成循环之前在底部运行期望有关,或者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);
    }

作为最后一点,如果我把期望放在if语句中,它就能正常工作。问题是,如果早期出现故障,它会运行几次。

2 个答案:

答案 0 :(得分:0)

感谢Mark Schultheiss带领我回答这个问题。 我不是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);
        });
    }

答案 1 :(得分:0)

您可以查看chai-increasing插件。

您需要将值存储在数组或promise中并进行expect断言。