Selenium WebDriver:我可以在多大程度上依赖 JavaScript?
Posted
技术标签:
【中文标题】Selenium WebDriver:我可以在多大程度上依赖 JavaScript?【英文标题】:Selenium WebDriver: To which extent can I rely on JavaScript? 【发布时间】: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 中抽象出来通常只是糟糕的设计。我的意思是,这就是您正在测试的内容,不是吗? 【参考方案1】:原则规定,如果您只是使用 WebDriver 交付有效负载,则不应使用 JS 作为测试机制。
WebDriver = 集成测试JS = 如果你想要单元测试
我不完全了解您的用例,但是:
如果您尝试运行集成测试,请坚持使用 WebDriver 以最好地模拟用户交互。您还可以通过依赖 WebDriver 挂钩与页面交互来避免将来出现跨浏览器 JS 问题,例如,最好依靠社区为每个浏览器提供可靠的基本 DOM 交互 API。如果您无法通过浏览器交互触发测试条件,那么您将进入单元/代码测试领域,而不是集成测试。
如果您尝试运行 JS 本质上是为了测试单个功能或一段代码而不是集成交互,那么您正在尝试运行单元测试。单元测试最好在 JS 中使用 Jasmine 之类的东西完成(在此处命名任何框架)。
推理: 集成测试应尽可能实现独立。您不需要知道函数名称来触发集成测试,因为将来有人可能会更改函数名称或重构代码。 由于您正在担任 QE/测试员角色,因此您不希望在代码更改时负责破坏集成测试 - 如果您使用它并且负责,那么每次代码重组时您都需要更改测试。
来源:在 10,000 多名员工软件公司担任 QE 的经验。
【讨论】:
以上是关于Selenium WebDriver:我可以在多大程度上依赖 JavaScript?的主要内容,如果未能解决你的问题,请参考以下文章
自动化测试-webdriver(JAVA) Selenium IDE 用法