用于通过 Se2 Firefox 运行 IDE 测试套件的 Selenium 2.0 后端

GSoC 2010,这是一次伟大的冒险。我是 Raynatou,我来自布基纳法索,并在 SERLI 实习。

GSoC 2010,这是一次伟大的冒险。

我是 Raynatou,我来自布基纳法索,并在 SERLI 实习。与该公司所有实习生一样,我的实习主题侧重于高级主题,例如将 WebDriver 集成作为 Selenium IDE 的后端。Selenium IDE 目前基于 Selenium Core 与网页进行交互。Selenium Core 有几个主要的限制,包括无法触发原生事件。为了避免这些限制并生成更健壮的测试,我正在研究使用 WebDriver 代替 Selenium Core 的 Selenium IDE。

我的导师是来自 SauceLabs 的 Eric Allen,我的主要导师,以及来自 SERLI 的 Jérémy Hérault,他的第二位但并非不重要的导师 ;)。

Eric 早在今年早些时候就完成了大部分集成。他的工作目标主要是展示 Selenium IDE 和 Selenium 2.0 Firefox 驱动程序可以实现的功能。它基于 Firefox WebDriver 扩展和 Selenium IDE 之间的异步通信,Se-IDE 等待 WebDriver 告诉他当前命令已成功传递(或未传递),以调用当前测试用例的下一个命令(使用回调函数)。我的任务目标是完成此集成。然而,Eric 是个疯狂的人,他很快就完成了它,并且我们一起考虑了另一种合并的方法。

我们的新思路基于它们之间的同步通信。为此,我获取 FirefoxDriver 实例并像普通对象一样使用它,通过调用它的方法。但是 FirefoxDriver 的行为并不像我想的那么简单。JavaScript 是一种强大的语言(是的,它可以让你不寒而栗),我只需要替换一些对象(例如 Response 对象),并使用 Proxy(以及一些类似 IoC 的代码)来简化我的生活和要完成的代码。你可以在 GitHub 上查看我的工作并关注它。

目前,我认为 Selenium API 命令的 95% 以上可以在 Selenium IDE 中使用 WebDriver 作为后端。这个过程基本上是遍历 seleniumemulation 包,并将所有 Java 类移植到 WebDriver 类上的 JavaScript 方法中。

现在,我正在进行单元测试,以覆盖我完成的任何 2.0 工作。我设法使所有 Selenium Core 测试都通过 IDE 运行。我有一些重构工作要做,以优化代码并添加更多注释以更好地理解我的工作。我几乎完成了。

我希望您喜欢我正在做的事情,并且我们(我和我的导师)希望这项工作可以被纳入 Selenium 2 的浪潮中。

最后修改于 2021 年 8 月 7 日:重命名目录 (e9895f27c26)