我正在开发一个使用一些自定义命令扩展Selenium 2的库。该库应该可以从Selenium的Java和Python绑定以及Selenium IDE中使用。从我的research开始,这三个目标绑定应该覆盖所有Selenium 2脚本的至少80%。
为了实现我的Selenium IDE自定义命令,我想我需要在JavaScript中为它编写一个插件。
我的问题是:如果我已经在JavaScript中实现了自定义命令,那么将此实现重用于我的库的Java和Python绑定是否安全?
我正在考虑一种通过WebDriver#executeScript
注入我的命令的JavaScript实现的方法。这是我正在考虑的伪代码实现。
在Java中:
public void fooJava() {
executeScript("Inject code.js");
executeScript("fooJavaScript();");
}
在code.js
:
function fooJavaScript() {
// Implementation of command "foo" from Selenium IDE plugin.
}
因此,要在Java中执行我的自定义命令fooJava()
,我的库code.js
将通过executeScript
注入浏览器。这将包含foo
的 JavaScript 实现,比如fooJavaScript
。在下一个executeScript
调用中,将调用此fooJavaScript
。
虽然这种方法会阻止我不得不三次实现我的自定义命令(Java,Python,Selenium IDE),但我有一些顾虑:
code.js
时,我是否有摧毁网站全球状态的危险?HtmlUnit
?非常感谢您对此的真实体验。
答案 0 :(得分:1)
原则声明,如果您只是使用WebDriver提供有效负载,则不应使用JS作为测试机制。
WebDriver =集成测试
JS =如果你想要单元测试
我完全不了解您的用例,但是:
如果您正在尝试运行集成测试,请坚持使用WebDriver来最好地模拟用户交互。您还可以通过依赖WebDriver挂钩与页面交互来避免跨浏览器JS问题,例如,您最好依靠社区为每个浏览器提供可靠的基本DOM交互API。如果您无法通过浏览器交互触发测试条件,那么您将进入单元/代码测试领域而不是集成测试。
如果您为了实际测试单个函数或代码而不是集成交互而尝试运行JS ,那么您正在尝试运行单元测试。单元测试最好在JS中完成,例如Jasmine(在这里命名任何框架)。
推理:
集成测试应编写为尽可能独立实现。您不需要知道函数名称来触发集成测试,因为有人可能会在将来更改函数名称或重构代码。
由于您正在填写QE /测试人员角色,因此您不希望在代码更改时负责破坏集成测试 - 如果您使用此代码并负责,则每次进行代码重组时都需要更改测试。< / p>
资料来源:10,000多名员工软件公司的QE经验。