Webdriver.io 的同步模式与 Promise 有问题
Synchronous mode of Webdriver.io have problems with Promise
我使用启用了同步模式的 Webdriver.io 框架(Wdio testrunner)在 CoffeeScript 上编写测试。根据文档,Webdriver.io 命令应该以同步模式执行。但是在使用Promise的过程中出现了意想不到的问题
我们正在考虑最简单的测试,即通过选择器在页面上找到一个元素,并将找到的元素的文本显示到控制台。
示例 1 – 没有承诺的代码
browser.url('... URL ...')
a = browser.$('... selector ...').getText()
console.log(a)
在此示例中,Webdriver.io 的命令可以正常工作。
示例 2 - 代码在 Promise 的构造函数中
p = new Promise((resolve, reject) ->
browser.url('... URL ...')
a = browser.$('... selector ...').getText()
console.log(a)
resolve()
)
return p
如果命令包含在 Promise 的构造函数中,那么它们也会正确执行。
示例 3 - 代码在代码块中。然后返回 Promise
p = new Promise((resolve, reject) ->
resolve()
).then(() ->
browser.url('... URL ...')
a = $('... selector ...').getText()
console.log(a)
)
return p
显示下一条错误消息:“$ (...)。GetText 不是函数”(示例 3)。显然,Webdriver.io 的命令开始异步工作。虽然我可以使用 await 关键字来处理这些 Promise,但我想以相同的方式(同步地)同样地执行代码,而不管代码的位置(在 Promise 中还是在 Promise 之外)。
使用命令 Await 时也会切换到异步模式。
示例 4(使用 await 关键字的示例 1 代码)
await console.log('123')
browser.url('... URL ...')
a = browser.$('... selector ...').getText()
console.log(a)
在这种情况下,为了程序的正确运行,需要重做所有代码,同时考虑到异步处理。
作为解决方案,我可以异步编写所有测试,但代码会变得更复杂。我可以在使用 Promise 时同步使用 Webdriver.io 的命令吗?
我使用启用了同步模式的 Webdriver.io 框架(Wdio testrunner)在 CoffeeScript 上编写测试。根据文档,Webdriver.io 命令应该以同步模式执行。但是在使用Promise的过程中出现了意想不到的问题
我们正在考虑最简单的测试,即通过选择器在页面上找到一个元素,并将找到的元素的文本显示到控制台。
示例 1 – 没有承诺的代码
browser.url('... URL ...')
a = browser.$('... selector ...').getText()
console.log(a)
在此示例中,Webdriver.io 的命令可以正常工作。
示例 2 - 代码在 Promise 的构造函数中
p = new Promise((resolve, reject) ->
browser.url('... URL ...')
a = browser.$('... selector ...').getText()
console.log(a)
resolve()
)
return p
如果命令包含在 Promise 的构造函数中,那么它们也会正确执行。
示例 3 - 代码在代码块中。然后返回 Promise
p = new Promise((resolve, reject) ->
resolve()
).then(() ->
browser.url('... URL ...')
a = $('... selector ...').getText()
console.log(a)
)
return p
显示下一条错误消息:“$ (...)。GetText 不是函数”(示例 3)。显然,Webdriver.io 的命令开始异步工作。虽然我可以使用 await 关键字来处理这些 Promise,但我想以相同的方式(同步地)同样地执行代码,而不管代码的位置(在 Promise 中还是在 Promise 之外)。
使用命令 Await 时也会切换到异步模式。
示例 4(使用 await 关键字的示例 1 代码)
await console.log('123')
browser.url('... URL ...')
a = browser.$('... selector ...').getText()
console.log(a)
在这种情况下,为了程序的正确运行,需要重做所有代码,同时考虑到异步处理。
作为解决方案,我可以异步编写所有测试,但代码会变得更复杂。我可以在使用 Promise 时同步使用 Webdriver.io 的命令吗?