4

我正在尝试为 QA 部门设置 CI 环境。他们使用 SeleniumRC 在 IE 和 FF 浏览器中运行 UI 测试来测试一些 Web 应用程序。我成功地将其配置为作为 Windows 服务运行,如此处所述。但是,当我运行测试时,它会挂起。我可以在进程列表中看到由 Selenium 服务生成的 iexplore.exe 进程,但没有任何反应。没有浏览器窗口出现,Windows 事件日志中没有条目。我做了很多谷歌搜索,据我所知,问题在于与桌面的交互。我尝试在设置了“允许服务与桌面交互”复选框的 SYSTEM 帐户下以及在具有本地管理员权限的常规用户帐户下运行该服务。所以我的问题是这是否可能?

4

3 回答 3

4

在我们的组织中,我们有一个持续集成服务器(Cruise Control)运行构建,包括 Selenium RC 测试。CI 服务器作为 Windows 服务运行(在 MS Windows 2003 Server 上),Selenium 测试只是测试套件的一部分。

这是一个非常简单的设置,坦率地说,我认为没有理由放弃它。目前在我们的设置中,Selenium 服务器(和客户端)直接从测试中启动(但是我们曾经将 Selenium 作为单独的服务)。

在 Java 代码中(实际上是所有 Web 测试的超类),我们执行以下操作:

// to start the server
RemoteControlConfiguration config = new RemoteControlConfiguration();
config.set(...)  // set the serverHost and port
...
SeleniumServer server = new SeleniumServer(config);
server.start();

// and then to start the client
Selenium selenium = new DefaultSelenium(serverHost, port, "*firefox", "http://www.google.com");
selenium.start();
selenium.open("http://www.google.com");

// now the browser should be visible for you (if you run it locally, not as a service)

所以我建议您尝试以下方法(无论您使用什么语言):

  1. 尝试从一个独立的应用程序运行 Selenium 服务器和客户端。浏览器应该显示为一个窗口。根据您的需要调整设置(浏览器类型等)。

  2. 尝试将代码合并到您的测试框架(xUnit 或其他)中。手动运行它们。结果应该是一样的。

  3. 然后,您可以尝试从持续集成中运行测试。将 CI 服务器作为服务运行并让它构建您的项目。浏览器将不可见,但这不是运行测试所必需的,不是吗?

注意:如果你想看看 Selenium 正在做什么,我相信在 UNIX 机器上会更容易。您可以将测试指向使用DISPLAY您选择的 X 服务器 - 连接到某个监视器的假服务器或真服务器。

于 2009-10-16T09:06:41.910 回答
2

我对将任何东西作为应该与桌面应用程序交互的 Windows 服务运行持怀疑态度。Windows 服务在自己的沙箱中运行;他们不应该与用户的桌面或其应用程序进行交互。为此需要特别努力与服务进行通信,因此如果可能的话,我认为也会运行某种桌面客户端,充当浏览器和 Windows 服务之间的联络人。

不过,我不能告诉你它不会起作用,因为如果人们在博客上写它显然是可能的。

顺便说一句,为什么它需要作为 Windows 服务运行?这就是 Selenium 设置自动化的方式,还是没有 Windows 服务可以做到这一点?因为我认为那将是两点之间最短的距离。

于 2009-10-16T08:01:21.260 回答
0

我的建议是使用专用机器(或虚拟机)来运行 Selenium RC。根据我的经验,最好让 Selenium 以交互方式而不是无头模式运行。

于 2009-10-16T08:10:23.497 回答