WebdriverIO v5 发布
我们很高兴地宣布,WebdriverIO 的一个新主要版本终于发布了!我从未想过这会花费这么长时间(已经超过一年了),但我们终于可以说 WebdriverIO 的新版本已准备好使用(并且比以往任何时候都更好)。来自超过34 位不同的贡献者,已经进行了超过 800 次提交;我真心地感谢所有参与这项集体努力的人。话虽如此...
🎉 🎉 🎉 庆祝时间!🎉 🎉 🎉
当我在一年前开始从头开始重写这个项目时,我知道这里和那里会出现问题。但是,我相信 WebdriverIO 社区在支持渠道中将共同努力互相帮助;我很自豪地说,我是对的!
目标
回顾项目的历史,看到它在短短几年内取得的巨大发展令人谦卑。从每天只有少数下载量,到现在的近 50k;以及大型公司依靠此工具每天发布软件的知识,很明显下一个重大功能必须是可持续性。第一步是通过加入 JS.Foundation在 2017 年完成。
很荣幸地宣布 @webdriverio 加入 @the_jsf 以继续发展项目和社区 🎉 👏 https://t.co/N58Iv5oC9r
— WebdriverIO (@webdriverio) 2017年9月13日
下一步是实施一个技术基础设施,以允许项目发展。通过审查其他成功的开源项目,例如 Jest 或 Babel,我们采用了单体项目结构来简化参与 WebdriverIO 的过程。
我们希望完全以社区驱动的形式开始这项工作,并开始收集来自每天使用 WebdriverIO 的每个人的反馈。我们创建了一个Discord 服务器,以便讨论架构更改,并组织将软件包移植到新的技术栈(即Lerna)的工作。
新的包结构
随着我们转向单体系统,我们将所有 WebdriverIO 包范围限定在@wdio
NPM 组织中。这将简化贡献者加入发布新包版本的过程,并更好地阐明哪些包是由组织“正式”维护的,或者哪些是第三方社区包。
如果您在项目中使用了wdio-mocha-framework
或wdio-spec-reporter
,请更新包以使用为 v5 构建的包:@wdio/mocha-framework
或@wdio/spec-reporter
。展望未来,所有包的版本号现在彼此固定;这意味着您应该始终对使用的所有“官方”WebdriverIO 包使用相同的版本。
我们进行了一些春季大扫除
当人们向 API 提出新的命令时,我们贡献者越来越犹豫是否要引入它们。存在大量现有的命令;并且许多这些请求的命令与现有命令几乎没有区别。这开始成为维护噩梦。
从 v5 开始,我们创建了一个名为webdriver
的“基础”WebdriverIO 包。它包含发出 HTTP 请求到 WebDriver 端点的基本逻辑;并包含来自各种规范(包括WebDriver规范以及 Appium 的Mobile JSONWire 协议)的所有命令,这些命令在易于维护的 JSON 对象中定义。
作为这项工作的一部分,我们已重命名了许多命令,以便使它们更接近协议中使用的模式。基础 WebDriver 客户端现在还返回所有协议命令响应的value
属性,因此我们能够消除很多冗余(例如,title
现在使用getTitle
调用)。
此外,我们发现 WebdriverIO API 存在明显的混淆,并且它有时将选择器作为第一个参数,有时则不是。这导致了各种问题,例如为其构建一致且有用的 TypeScript 定义。在新版本中,我们取消了选择器作为命令参数,并强制区分仅可从浏览器/客户端实例访问的命令和来自元素实例的命令。为了单击某个元素,您现在必须先获取它,然后在该实例上调用 click 命令,例如
browser.click('#elem') // throws 'browser.click is not a function'
const elem = $('#elem')
elem.click() // clicks successfully on the element
// or
$('#elem').click()
elem.url('https://webdriverio.node.org.cn') // throws because the url command is scoped on the browser object
网站更改
我们已经有一个自动系统为我们的网站生成文档。但是,作为新架构和技术栈的一部分,我们将此从Hexo移植到Docusaurus。
我们仍在最终确定这项工作,因为我们希望继续为每个人提供一种轻松更改文档版本的方法。我们还在研究提供多种文档翻译,以便不会说英语的人能够更好地理解和使用 WebdriverIO。如果您想提供帮助,请在Twitter上或直接在问题线程上与我们联系。这可能是参与开源项目最好的方法之一。
如何升级到 v5
在过去的一年中,我们一直在开展更多您可能想了解的工作。查看官方更改日志,以查找描述新版本的所有更改。我们可能会随着时间的推移继续更新此内容,因为我们无法保留每个更改的详细信息列表。我们还希望您查看新的指南部分以及我们更新的文档。
不幸的是,没有您可以下载并运行的简单升级工具来将您的测试套件从 v4 更新到 v5(尽管我们很想拥有这样的工具,欢迎提交 PR 😉)。如果您在升级到 v5 时遇到任何问题,请加入我们在Discord上的支持服务器并与我们联系。
每个项目都不同,因此不可能为每个人提供一个单一的指南。但是,以下分步说明将帮助您更接近所需的位置
- 阅读更改日志以了解所有重大更改
- 从您的
package.json
中删除所有wdio-*
包 - 删除您的
node_modules
目录 - 安装最新版本的 webdriverio:
$ npm install webdriverio@latest
- 安装新的 wdio 测试运行器:
$ npm install @wdio/cli --save-dev
- 如果您的根目录中存在
wdio.conf.js
,请创建备份:$ cp wdio.conf.js wdio_backup.conf.js
- 重新运行配置向导:
$ npx wdio config
- 将旧
wdio_backup.conf.js
的自定义修改合并到您的新配置文件中。不要一次合并所有内容 - 只需从使用无服务和仅使用例如 spec reporter 在本地运行测试的基本设置开始,并逐步实现完全迁移 - 获取套件中最简单的测试,并根据更改日志重命名命令
- 在您的配置中设置日志目录(例如
outputDir: __dirname
),以确保您可以看到所有正在发生的事情,包括错误(以后可以将其设置为正确的日志目录) - 尝试运行您修改的测试套件
$ npx wdio wdio.conf.js --spec ./path/to/modified/test.js
- 重复操作您剩余的测试文件
- 将 reporter 和 service 添加回您的
wdio.conf.js
中,并查看它们是否按预期工作(**注意:**您可能使用的一些 service 或 reporter 尚未移植到 v5,如果是这种情况,请在该社区包的仓库中提出 issue 或尝试移植它)
如果您在移植测试套件时遇到问题,请查看 issue 线程以了解是否有人已报告了相同的问题;然后在我们的 Discord 服务器上联系我们。我们可能错过了您在测试中使用的功能的移植/尚未移植。感谢新的项目结构,我们可以快速修复此问题并为您提供更新版本!
我们将在我们的新博客中发布更多关于如何将 WebdriverIO 升级到 v5 的教程博客文章。您还可以查看我们心爱的 Will Brock 发布的精彩 视频系列。对 WebdriverIO 学习课程 的更新也正在进行中。
下一步
我们投入了这么多精力到这个项目中,并非就此结束。相反,我们才刚刚开始。我们坚信 WebDriver 是并且始终将是业界的自动化标准。因此,我们积极参与对标准的贡献,以确保所有命令都符合协议。我们还将把您的常见问题和一般反馈反馈给 W3C 工作组,以确保我们能够解决技术核心中的主要问题。
为了确保 @webdriverio 始终符合 #WebDriver 标准,它将直接派代表参加 @w3c TPAC 会议,以便您可以在新功能可用时立即使用 🙌🏻 pic.twitter.com/oJbHPn99Oc
— WebdriverIO (@webdriverio) 2018年10月26日
发布之后,我们将开始制定未来一年的详细路线图,让您参与到进度中来,并帮助我们确定功能的优先级。
一个用 ❤️ 打造的开源项目
在结束这篇博文之前,我想说明 WebdriverIO 是一个由热爱开源的专业人士维护的开源项目。我经常有一种感觉,人们认为这项工作理所当然,并忘记了有一些真实的人在花费他们的空闲时间为所有人免费提供一些软件。正如 @left_pad 在 Babel7 正式发布中所说
"[...] 当看到有人在网上发信息询问为什么某个东西还没有发布,而另一个人则询问为什么这个 bug 还没有修复时,我只能用恐惧来形容我的感受。我想尽快发布并完成它,但我也希望认真对待这件事。"
请始终记住,当您提出 issue 或请求功能时,您基本上是在请求某人花费他的时间为您做一些事情,而且是免费的!开源项目只有在每个人都参与并提供帮助的情况下才能运作和生存。我们都是人,错误会发生,如果您发现了错误,请以一种我们可以轻松处理信息并快速修复的方式告知我们。如果每个人偶尔花些时间回馈社区,那就更好了。我们正在维护 一个列表,其中列出了任何人都可以认领并开始处理的描述清晰的问题。
再说一次,这个项目没有得到任何公司的赞助或拥有。它是包容性社区的协作努力,大家互相帮助。让我们继续保持这种状态!
感谢
最后,我想感谢一些帮助实现此版本发布的人;以及社区中一些很棒的人。首先,我想感谢所有参与实现此目标的 34 位贡献者,以及自一开始就一直合作的其他 328 位人士。
我个人要感谢 Kevin Lamping 创建了一个优秀的 在线学习课程,以及过去几年在 YouTube 上发布的许多其他精彩内容。如上所述,还要特别感谢 Will Brock 发布的新版本 视频课程。
我要感谢所有深度参与支持渠道,每天帮助人们解决问题的人。随着超过 3500 名用户的加入,我无法像以前那样回复每个人。感谢 Erwin Heitzman、Tu Huynh、Jim Davis、Xu Cao、Boris Osipov 和 Wim Selles。
特别感谢 Daniel Chivescu 和 Josh Cypher 在世界各地发表关于 WebdriverIO 的演讲。
最后但并非最不重要的是,感谢 Adam Bjerstedt,他不仅一直在社区频道中提供帮助;而且在最后帮助推动 v5 版本的发布。
🙏