4

我正在开发一套通过命令行调用 MSTest 执行的 Selenium WebDriver(不是 Selenium RC 并且不使用 Selenium-Server)测试。我已经为我们计划测试的每个浏览器(Chrome、Firefox 和 IE9,目前)将它们分解为测试类,每个测试类都有一个启动方法,该方法登录到被测系统,然后执行请求的测试以及使用 WebDriver.Quit() 关闭浏览器的 TearDown 方法。

在我的开发机器上,一切都是笨拙的,但在我们的构建机器上,类初始化/启动方法执行得很好并登录到站点,但是一旦第一个实际测试开始,测试运行器就会关闭并显示错误消息:

OpenQA.Selenium.WebDriverException: Unexpected error. System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 127.0.0.1:59982

显然端口会根据正在测试的浏览器而变化;当我运行整个套件时,我在针对 IE、Firefox 和 Chrome 的测试的不同端口上遇到错误 - 每个浏览器都有两个错误(因为该套件目前对每个浏览器都有两个测试)

构建机器的 Windows 防火墙已关闭,并且在运行测试之前检查 netstat 表明该端口未在使用中;如果我在启动代码运行之后但在测试运行之前调试测试并停止,那么端口当然正在使用中。127.0.0.1 和 localhost 也是一样的。

无论我是通过命令行调用测试、使用 VS 测试工具从 Visual Studio 中运行/调试它,还是通过执行我的控制台应用程序(该应用程序通过 Process.Start() 调用 MSTest),我都会收到相同的错误。在第一次 FindElement() 调用时引发异常。

我可以从哪里开始找出为什么这在构建机器上而不是在我的开发盒上失败?

4

2 回答 2

6

这里的问题是,在尝试在启动期间实现一些更强大的错误处理时,我在包含登录代码的 try/catch 的 finally 块中调用了 Teardown 代码,因此一旦测试工具完成登录我正在关闭并清理 WebDriver 实例,因此当测试运行时,那里没有可与之通信的 WebDriver。

我怀疑当我在我的开发机器上查看“相同”代码时,实际运行的库中没有那个块。

于 2012-11-08T17:25:13.600 回答
0

当您从 Visual Studio 运行应用程序时,它会启动侦听某个端口的服务器。在你的情况下 59982。

在针对它运行测试之前,您实际上需要让您的 Web 应用程序在测试环境中独立运行。

在您的开发机器上,您的应用程序正在该端口上运行。我猜在您的远程机器上并非如此。

于 2012-11-07T19:26:18.637 回答