ExpectedConditions.presenceOf 和 element.isPresent 有什么区别
What is the difference between ExpectedConditions.presenceOf and element.isPresent
我一直在用 element.IsPresent()
进行测试,由于某种原因,我的测试在尝试 browser.wait(element(by.id('id').IsPresent())
时开始失败。它永远不会离开等待,即使元素存在。
我开始使用 protractor.ExpectedConditions
的代码,它开始工作了。只是想知道一个和另一个之间有什么区别。
这是具有预期条件的代码。
const EC = protractor.ExpectedConditions;
const ele = element(by.id('id'));
return browser.wait(EC.presenceOf(ele));
两者之间的主要区别是什么?我在 google 中进行了搜索,但没有找到合适的答案。
如果您查看 this 对另一个问题的回答,您会发现 presenceOf()
和 isPresent()
几乎完全相同。主要区别在于 presenceOf()
将 包裹在 isPresent()
和 returns 周围 Function
而不是 Promise
。
为什么这很重要?好吧,这与 browser.wait()
的工作方式有关。如果我们看一下 docs 我们可以看到它:
Schedules a command to wait for a condition to hold or promise to be resolved.
这意味着如果您将 Promise
传递给 browser.wait()
它只会等到 Promise
被 解决 之后再继续执行进一步的命令(如果它解析为 true 或 false 并不一定重要)。而如果您将 Function
传递给它,它将等到该条件 "holds" 后再继续。
此外,您可以为 browser.wait()
方法指定自定义超时参数。根据文档,如果您没有指定超时,它将默认为 30 秒。我相信这就是为什么您觉得使用 isPresent()
时等待永远不会解决的原因(可能只需要 30 秒)。
我建议做的是,当您 期望 某个元素出现在特定时间时使用 isPresent()
,而当您 presenceOf()
时使用 presenceOf()
您想等待元素出现或出现。
这是我将如何使用这两者的示例:
const EC = protractor.ExpectedConditions;
const ele = element(by.id('id'));
browser.wait(EC.presenceOf(ele), 5000); // Waits a maximum of 5000 milliseconds (5 seconds)
expect(ele.isPresent()).toBe(true); // Expects this element to be present **right now**
我一直在用 element.IsPresent()
进行测试,由于某种原因,我的测试在尝试 browser.wait(element(by.id('id').IsPresent())
时开始失败。它永远不会离开等待,即使元素存在。
我开始使用 protractor.ExpectedConditions
的代码,它开始工作了。只是想知道一个和另一个之间有什么区别。
这是具有预期条件的代码。
const EC = protractor.ExpectedConditions;
const ele = element(by.id('id'));
return browser.wait(EC.presenceOf(ele));
两者之间的主要区别是什么?我在 google 中进行了搜索,但没有找到合适的答案。
如果您查看 this 对另一个问题的回答,您会发现 presenceOf()
和 isPresent()
几乎完全相同。主要区别在于 presenceOf()
将 包裹在 isPresent()
和 returns 周围 Function
而不是 Promise
。
为什么这很重要?好吧,这与 browser.wait()
的工作方式有关。如果我们看一下 docs 我们可以看到它:
Schedules a command to wait for a condition to hold or promise to be resolved.
这意味着如果您将 Promise
传递给 browser.wait()
它只会等到 Promise
被 解决 之后再继续执行进一步的命令(如果它解析为 true 或 false 并不一定重要)。而如果您将 Function
传递给它,它将等到该条件 "holds" 后再继续。
此外,您可以为 browser.wait()
方法指定自定义超时参数。根据文档,如果您没有指定超时,它将默认为 30 秒。我相信这就是为什么您觉得使用 isPresent()
时等待永远不会解决的原因(可能只需要 30 秒)。
我建议做的是,当您 期望 某个元素出现在特定时间时使用 isPresent()
,而当您 presenceOf()
时使用 presenceOf()
您想等待元素出现或出现。
这是我将如何使用这两者的示例:
const EC = protractor.ExpectedConditions;
const ele = element(by.id('id'));
browser.wait(EC.presenceOf(ele), 5000); // Waits a maximum of 5000 milliseconds (5 seconds)
expect(ele.isPresent()).toBe(true); // Expects this element to be present **right now**