2016-04-19 26 views
1

我正在使用Protractor v3.2.2和Node.js v5.10.1在Chrome上运行测试。sendKeys不会等待Angular?

基本上我观察到的是我们的一个测试连续失败,因为表单字段没有被填充并且表单无法提交。在失败的步骤有效地看起来是这样的:

field.sendKeys(value); 
checkbox.click(); 
submitButton.click(); 

如果我将其更改为:

field.clear().sendKeys(value); 
checkbox.click(); 
submitButton.click(); 

或:

browser.waitForAngular(); 
field.sendKeys(value); 
checkbox.click(); 
submitButton.click(); 

它传递顺利。

所以我怀疑sendKeys不会等待页面加载完毕,即使文档会建议所有WebDriver操作在执行前调用browser.waitForAngular。有没有人对这个问题有任何想法?这可能是一个错误?

回答

0

如果您需要使用sendKeys的有效结果您需要在特定时间内休眠浏览器。

在您的代码之前或之后添加browser.driver.sleep(500);。这将是有效的。

看到这个。

field.sendKeys(value); 
browser.driver.sleep(500); 

checkbox.click(); 
browser.driver.sleep(500); 

submitButton.click(); 
+0

是,在等待将与问题的帮助,这不是处理这种情况下(如果有的话,'browser.wait'将是可取的)。我的问题是不是然而,寻找解决办法非常优雅的方式(因为我在问题本身中提到了两个),而是关于'sendKeys'的行为是否应该如此(根据文档,默认情况下所有WebDriver操作都使用'browser.waitForAngular'封装)。我编辑了我的问题以使其更清楚。 – calendir

0

尝试写在承诺,以便它会等待。

field.sendKeys(value).then(function(){ 
    checkbox.click().then(function(){ 
     submitButton.click().then(function(){ 
     expect(thisToShow).toBe(shown); 
    }); 
    }); 
});