gpt4 book ai didi

javascript - 等待 sendKeys() 的 Protractor

转载 作者:数据小太阳 更新时间:2023-10-29 04:42:21 24 4
gpt4 key购买 nike

在使用 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');

Protractor 在组合框中输入“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 返回一个 promise ,如果我将期望放在那里,一切都会正常进行。

这是执行此操作的正确方法吗?我在网上找到的所有示例都没有使用 then 调用 sendKeys

为什么第一个代码可以在 Windows 而不是 OS X 上运行?我错过了什么吗?有更好的方法吗?

编辑:这可能与 OS X 上 native 键盘事件的处理有关吗? Protractor 文档位于 http://angular.github.io/protractor/#/api?view=webdriver.WebElement.prototype.sendKeys具有以下内容:

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

基本上,如果您不强制 Protractor 按正确的顺序做事,那么十有八九会以错误的顺序发生。

关于javascript - 等待 sendKeys() 的 Protractor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26272513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com