发出代码
Selenium IDE 有两个主要组件,浏览器内的播放,由 actions
和 events
提供支持。
以及使用 命令行运行器 在命令行模式下播放。
Selenium SIDE 运行器环境
运行器基于 Node,你可以利用环境发出更好的代码。
- 带有 npm 的 Node.js 8 或更高版本
- Jest
- jest-environment-selenium
- selenium-webdriver
发出代码
发出代码时必须注意某些要点,因为你的插件并不是唯一发出代码的插件,也不是控制发出流程的插件。
为了确保插件不会相互干扰执行,必须采取某些预防措施。
切勿使用 Return
关键字return
表示您之后的代码永远不会被访问到,您可能会妨碍其他插件。
return somePromise();
plugin2Func(); // unreachable
相反,由于我们使用的是 Node 8 或更高版本,我们可以利用异步函数。
await somePromise();
plugin2Func(); //works
不要在全局作用域中定义变量
在全局作用域中定义变量,意味着如果您和另一个插件或 Selenium IDE 本身定义了相同的变量,则会出现错误或未知的副作用,这将使调试变得困难。
例如,采用此测试用例
store
|button
|element
plugin click
|button
assert element present
|css=${element}
如果您定义一个变量,则代码将如下所示
let element = "button";
let element = await driver.findElement();
await element.click();
expect(element).toBePresent(); // different button!
为避免在全局作用域中定义变量,请使用 Promise 的then
函数
let element = "button";
await driver.findElement().then(element => {
return element.click();
});
expect(element).toBePresent(); // the store defined button
总结
通常,尝试避免与全局范围发生冲突,如果你需要定义,你可以始终使用 Promise 的 then
或最坏情况下使用 iife。