Selenium Webdriver JavaScript: Promise似乎没有得到解决

Selenium Webdriver JavaScript : Promise seems to not be resolved

本文关键字:解决 Webdriver JavaScript Promise Selenium      更新时间:2023-09-26

在我的项目中,为了测试一列是否排序良好,我在Javascript中使用了Selenium Webdriver。我想要得到表中的第一列,然后看看我的字符串是否按2乘2的顺序排序。下面是我的代码:

driver.findElements(webdriver.By.xpath("//table[@id='consentsTable']/tbody//td[1]")).then(function(id){
        assert(id[0].getText()).equalTo("26");
        for (var i = 0, l=id.length; i < l-1; i++) {
            console.log(id[i].getText());
            assert(id[i].getText()<id[i+1].getText()).isTrue();
        }
    });

我的问题是,我之间的比较不起作用。为了确保从findElements中得到什么,我放置了一个console.log。结果如下:

{ then: [Function: then], cancel: [Function: cancel], isPending: [Function: isPending] }

据我所知,这似乎是一个尚未解决的承诺。但是我有点惊讶的是,通常情况下,在"then"之后的函数应该只有在承诺被解决后才执行。

为了确保我对第一个元素进行了断言,在我的情况下应该等于26..断言通过了!我通过其他东西更改了值26,以验证我的断言是否被考虑,实际上它对其他值失败了。对于数组中的其他元素,我也这样做了。

所以在这一点上,如果assert通过,这意味着承诺实际上被解决了,这就是为什么我不明白日志在我的循环中告诉我什么。

我被这个问题困扰了很长时间,不知道为什么会显示一个承诺,我认为这也解释了为什么我的比较失败。

如果有人有主意,那对我来说将是一个巨大的帮助。

将getText()行代码更改为

element.getText().then(function(textValue) {
    assert(textValue).equalTo("foo");
});

OR,您可以将assert更改为期望

expect(element.getText()).toEqual("foo");// write using Protractor/Jasmine