【发布时间】:2013-10-22 09:11:59
【问题描述】:
我正在开发一个使用一些自定义命令扩展 Selenium 2 的库。该库应该可以在 Selenium 的 Java 和 Python 绑定以及 Selenium IDE 中使用。从我的research 来看,这三个目标绑定应该至少涵盖所有 Selenium 2 脚本的 80%。
为了实现我对 Selenium IDE 的自定义命令,我想我需要用 JavaScript 为它编写一个插件。
我的问题是这样的:如果我已经在 JavaScript 中实现了我的自定义命令,那么将这个实现重新用于我的库的 Java 和 Python 绑定是否安全? p>
我正在考虑一种方法,通过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。
虽然这种方法可以让我不必执行 3 次自定义命令(Java、Python、Selenium IDE),但我有一些顾虑:
- 当我注入我的
code.js时,我是否有破坏网站全局状态的危险? - 我可以在多大程度上依赖 JavaScript?如果存在警报对话框,它会起作用吗?在实践中,有多少与 Selenium 一起使用的驱动程序不支持 JavaScript?例如。
HtmlUnit? - 这是否适用于所有主流浏览器(IE、Chrome、Firefox、Safari 的最新版本)?
非常感谢您在这方面的真实经历。
【问题讨论】:
-
来自我的“真实经历”。我很少在测试时甚至需要使用 javascript。在我看来,如果您需要触发一些 JavaScript 事件,那么这是糟糕的应用程序设计。从 UI 中抽象出来通常只是糟糕的设计。我的意思是,这就是您正在测试的内容,不是吗?
标签: java javascript python selenium webdriver