javascript – 量角器等待sendKeys()

前端之家收集整理的这篇文章主要介绍了javascript – 量角器等待sendKeys()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在使用AngularJS构建的Web表单中,我尝试将一些数据输入到组合框中,然后按向下箭头键然后按Enter键选择一个值.之后,我正在检查组合框的弹出窗口(它是一个Kendo 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');

量角器将“CAN”输入组合框,然后使用向下箭头键选择可见条目,然后使用Enter键确认选择,这也取消了组合框弹出窗口.

在OS X上,这不起作用,第二个期望总是失败,因为在由于某种原因评估期望之前,不会触发解除弹出窗口的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上本机键盘事件的处理有关吗? http://angular.github.io/protractor/#/api?view=webdriver.WebElement.prototype.sendKeys的Protractor文档具有以下内容

Note: On browsers where native keyboard events are not yet supported (e.g. Firefox on OS X),key events will be synthesized. Special punctionation keys will be synthesized according to a standard QWERTY en-us keyboard layout.

解决方法

由于sendKeys返回一个promise,它是异步的(如你所知)并且可能比任何机器上的预期发生得晚.我强烈怀疑,如果你在Windows上运行1000次测试,由于同样的原因,它至少会失败几次.

对于像这样的案件,我几乎已经老去试图找到一个“最佳实践”,除了你已经在做的事情之外我不认为有一个.我的许多依赖于promise返回操作的Protractor测试最终都是带有匿名函数的then()语句的长字符串.看到链接

How to assign count of rows or getText to a variable in Protractor

基本上,如果你不强迫量角器以正确的顺序做事,那么十分之五会以错误的顺序发生.

猜你在找的JavaScript相关文章