我们一直致力于一个 React 项目,我们正在使用“Mocha-Nightwatch”进行 e2e 测试。作为一名 UI 自动化测试人员,我需要一些东西来访问这些元素,我有以下选择:
1) 使用“CSS 选择器”,正如你所说的那样又丑又长。
2) 使用元素的“X-path”,这又很长而且更混乱
3) 元素的所有“Id”中最好的[因为它们在整个应用程序中都是独一无二的]。但问题是当我们给 id 一个元素时,React webpack 会在你每次构建应用程序时将一个字母数字字符串附加到 id 上,每次都生成一个唯一的 id。所以 id 在这个场景中又失败了。
4) 我们解决的问题是“Classes”,用于我们想要在测试中访问的元素。
就 id 或 classnames 而言,没有没有捷径可做。您需要为 id/classnames 提供有意义的名称,一些工具 [可能存在也可能不存在] 会为所有不需要的元素添加一些随机 id,只会增加应用程序的空间复杂度。
更好的解决方案是一个模块一个模块,并自己添加类或id的[id,在你的情况下,它们不是由Webpack动态化的]名称。
我们使用的方法是教自动化测试如何添加类名或 id,以及如何在 chrome 开发工具中检查 id/类是否真的存在。但这样做的限制是,测试人员可能会添加一些可能与您的功能冲突的类或 id。为了解决这个问题,您可以使用适当的命名约定,例如我们使用 .test-something-something 或 #test-something-somethig 作为命名测试 ID 和类的约定。
这是您的选择器文件中的一个示例:
usernameInput: '.test--auth-username > input',
passwordInput: '.test--auth-password > input',
loginButton: '.test--auth-submit > button',
loginError: '.test--auth-error',
inputError: '.test--inputField-errorText',
希望这会有所帮助,
干杯