2

当我单击导出按钮时,它会对我们的端点进行 REST 调用,然后几秒钟后,我收到响应,然后我还呈现表格。不幸的是,我读到每个调用都是异步的,这意味着即使表尚未呈现,我的期望也会被执行。我写的期望检查字符串是否在桌子上,但它失败了,因为它还不在那里。对此的正确方法是什么?

it('should generate global user report', function() {
    element(by.css('button#exportButton')).click();

    expect(element(by.css("th[name*=Date]")).getText()).
        toEqual('Date');
})

控制台上的错误是

NoSuchElementError: No element found using locator: By.cssSelector("th[name*=Date]")

我注意到该表尚未渲染,这就是它失败的原因。

4

2 回答 2

7

Protractor 1.7 引入了一个称为“预期条件”的功能,可以在此处应用。

等待元素变得可见

var EC = protractor.ExpectedConditions;
var elm = element(by.css("th[name*=Date]"));

browser.wait(EC.visibilityOf(elm), 5000);
expect(elm.getText()).toEqual('Date');
于 2015-03-04T15:39:56.487 回答
1

我在等待动态元素出现时遇到问题。让驱动程序等待它出现或显示。最后的数字是超时。

element(by.css('button#exportButton')).click();
var header = element(by.css("th[name*=Date]"));
browser.driver.wait(function() {
    return header.isPresent();
}, 1000);
expect(header.getText()).toEqual('Date');

在测试完全稳定之前,我必须等到它出现并显示出来。你可以这样做:

var header = element(by.css("th[name*=Date]"));        
browser.driver.wait(function() {
    return header.isPresent().then(function(present) {
        if (present) {
            return header.isDisplayed().then(function(visible) {                   
                return visible;
            });
        } else {
            return false;
        }
    });
}, 1000);
于 2015-03-04T15:56:18.363 回答