Selenium Webdriver JavaScript:承诺似乎无法解决

时间:2014-07-30 01:25:55

标签: javascript selenium-webdriver promise

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

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] }

据我所知,这似乎是一个尚未解决的承诺。但是我知道通常是&#34;然后&#34;之后的功能,我有点惊讶。只有在承诺得到解决后才能执行。

为了确保我把一个断言放到第一个元素中,在我的情况下应该等于26 ..并且断言传递!我通过别的东西改变了值26以验证我的断言是否被考虑,实际上它对其他值没有成功。我也为我阵列中的其他元素做了这个。

所以在这一点上,如果断言通过,则意味着承诺实际上已经解决,这就是为什么我不理解日志在循环中告诉我的原因。

我已经在很长一段时间内一直坚持这个问题而不知道为什么会显示一个承诺,我也认为这解释了为什么我的比较失败了。

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

1 个答案:

答案 0 :(得分:2)

将您的代码更改为行getText()到

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

或者,您可以将断言更改为期望

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