在使用AngularJS构建的web表单中,我尝试在组合框中输入一些数据,然后按下箭头键和enter键选择一个值。在此之后,我将检查组合框的弹出窗口(它是Kendo )是否不再可见。
这些测试运行在Windows和Mac上的Chrome中。在Windows上,以下代码运行良好:
comboInput.sendKeys('CAN')
.sendKeys(protractor.Key.ENTER)
.sendKeys(protractor.Key.ARROW_DOWN)
.sendKeys(protractor.Key.ENTER);
expect(input.getAttribute('value')).toBe('id_3');
expect(popup.getAttribute('style')).toContain('display: none');量角器在组合框中输入"CAN“,然后使用向下箭头键选择可见的条目,然后使用Enter键确认选择,这也会取消Combo Box弹出。
在OS上,这是不起作用的,第二个期望总是失败的,因为由于某些原因,在评估期望之前不会触发Enter键事件来关闭弹出窗口。
我发现我必须将代码更改为以下代码才能正常工作:
comboInput.sendKeys('CAN')
.sendKeys(protractor.Key.ENTER)
.sendKeys(protractor.Key.ARROW_DOWN)
.sendKeys(protractor.Key.ENTER).then(function() {
expect(input.getAttribute('value')).toBe('id_3');
expect(popup.getAttribute('style')).toContain('display: none');
});sendKeys返回了一个承诺,如果我把期望放在那里,一切都很好。
这样做对吗?我在网上找到的任何一个例子都没有使用then调用sendKeys。
为什么第一段代码在Windows而不是OS上工作呢?我是不是遗漏了什么?有更好的方法吗?
编辑:这可能与OS上本机键盘事件的处理有关吗?http://angular.github.io/protractor/#/api?view=webdriver.WebElement.prototype.sendKeys的量角器文档有以下内容:
注意:在不支持原生键盘事件的浏览器上(例如OS上的Firefox ),键事件将被合成。根据标准的QWERTY键盘布局,将合成特殊的点位键.
发布于 2015-01-29 23:16:29
因为sendKeys返回一个承诺,所以它是异步的(如您所知),并且在任何机器上发生的时间都可能比预期的晚。我强烈怀疑,如果您在Windows上运行了1000次测试,由于同样的原因,它至少会失败几次。
我几乎死于老年,试图为这种情况找到“最佳实践”,我认为除了你已经在做的事情之外,没有其他的办法。我的许多依赖于允诺返回操作的Protractor测试最终都是包含匿名函数的长串then()语句。请参阅链接:
How to assign count of rows or getText to a variable in Protractor
基本上,如果你不强迫量角器按照正确的顺序做事情,那么每十次中就有五次会以错误的顺序发生。
https://stackoverflow.com/questions/26272513
复制相似问题