protractor - 我应该等待期望() 条件
问题描述
https://www.protractortest.org/#/async-await显示了在量角器中使用 async/await 的示例,但包括以下行:
expect(await greeting.getText()).toEqual('Hello Julie!');
但我不明白这怎么可能是正确的:如果 greeting.getText() 是异步的(由 await 指示),那么直到该行完成后才能知道文本。不是:
await expect(await greeting.getText()).toEqual('Hello Julie!');
因此,在继续之前,我们肯定会等待获得(并检查)文本。在这个例子中,它并不太重要(假设执行了期望检查),但一般来说,是否存在通过进一步操作重新排序 getText() 的风险(例如,这可能会将其从 DOM 中删除)。
如果它只是基于浏览器的异步操作,在实践中是否安全,因为它们无论如何都是串行执行的(所以 getText() 将在后续操作之前完成?
据推测,如果我们包含基于非浏览器的异步操作(例如,我们向服务器发出 http 请求),则无法保证排序,因此最佳实践是编写 'await expect(...).toX(. ..)'(即使期望表达式不是异步的也是安全的)。
当然,尽管如此,我们最终在几乎每一行的开头都有“等待”,这看起来有点难看。
解决方案
引入await后量角器真的很简单,不需要再复杂了
首先在配置文件中禁用 selenium 控制流,只需在配置文件中添加这一行:
SELENIUM_PROMISE_MANAGER: false
https://www.protractortest.org/#/control-flow
现在在测试使用:
it('should find an element by text input model', async function() {
await browser.get('app/index.html#/form');
var username =element(by.model('username'));
await username.clear();
await username.sendKeys('Jane Doe');
var name = element(by.binding('username'));
expect(await name.getText()).toEqual('Jane Doe');
});
请注意,我没有使用等待
var name = element(by.binding('username'));
这是因为在量角器中,除非您在其上调用方法,否则不会触发查找元素操作
所以你不必在那里使用 await
除非您在其上调用任何方法,否则您不会得到 element not found 。
推荐阅读
- java - java中如何获取LinkedList的头节点?
- parsing - 在 `std::string::String` 中找不到 .next() 方法
- swift - NSTokenfield 的 ChangeToken 颜色
- .net-core - 通过环境变量向 .net 控制台应用程序添加机密的最新消息是什么
- css - 如何使用 Jest 测试样式
- java - 巨数的阶乘不溢出堆栈但也不返回结果(JAVA)
- macos - persistentStoreForURL 总是返回 nil
- c++ - C++ .cpp 文件无法识别它使用的 .h 类?
- excel - 在VBA中满足条件时在if语句中退出循环
- python - 查找并打开文件 - 使用 Python