等待sendKeys()的量角器
Protractor waiting for sendKeys()
在使用AngularJS构建的web表单中,我试图在组合框中输入一些数据,然后按向下箭头键和enter键选择一个值。之后,我检查组合框的弹出窗口(这是一个剑道UI组合框)是否不再可见。
测试在Windows和Mac OS X上的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');
Protractor在组合框中输入"CAN",然后使用向下箭头键选择可见条目,然后使用Enter键确认选择,这也会取消组合框弹出窗口。
在OSX上,这是不起作用的,第二个期望总是失败,因为在评估期望之前,由于某种原因,没有触发关闭弹出窗口的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
返回一个承诺,如果我把期望放在那里,一切都会很好。
这样做正确吗?我在网上找到的例子都没有使用sendKeys
上的then
调用。
为什么第一个代码可以在Windows上运行,而不能在OS X上运行?我是不是错过了什么?有更好的方法吗?
编辑:这可能与OS X上本机键盘事件的处理有关吗?Protractor文档http://angular.github.io/protractor/#/api?view=webdriver.WebElement.prototype.sendKeys具有以下功能:
注意:在尚未支持本机键盘事件的浏览器上(例如OS X上的Firefox),将合成键事件。特殊的标点键将根据标准QWERTY en-us键盘布局进行合成。
由于sendKeys
返回promise,因此它是异步的(正如您所知),并且在任何机器上都可能晚于预期发生。我强烈怀疑,如果你在Windows上运行1000次测试,出于同样的原因,它至少会失败几次。
我试图为这种情况找到一个"最佳实践",几乎已经老死了,我认为除了你已经在做的事情之外,没有其他的了。我的许多依赖于promise返回操作的Protractor测试最终都是包含匿名函数的then()
语句的长字符串。请参阅链接:
如何在Protractor 中将行数或getText分配给变量
基本上,如果你不强迫Protractor按正确的顺序做事,那么十有八九会按错误的顺序发生。
- CasperJS在使用sendKeys时不会上传文件
- 使用量角器的当前url单元测试的getTitle
- 量角器:读取表格内容
- javascript、量角器和类的问题
- 使用Angular js-量角器e2e测试上传文件
- 在量角器中创建一个.txt错误输出文件是手动的,而不是控制台错误
- 复杂量角器选择器
- 点击图标是't在量角器上工作
- 我可以访问量角器配置文件中的参数吗
- 量角器使用ElementArrayFinder执行脚本怪异
- 使用PhantomJS的量角器错误
- 如何使用量角器获取当前url
- 无法从量角器测试中元素的值返回字符串
- 以字符串形式读取量角器测试中的更新输入
- 我如何选择/点击一个带有for=“”的元素"属性[量角器]
- clear().sendKeys() 两次在量角器中失败
- 量角器:element.click,element.sendKeys和来自browser.debugger断点的朋友
- 如何使用“”在量角器中使用browser.actions().sendKeys"象征
- 等待sendKeys()的量角器
- 量角器sendKeys()不工作元素不可见