Selenium WebDriver 测试失败,System.Net.WebException 无法连接

cor*_*ori 4 selenium mstest webdriver

我正在开发一套 Selenium WebDriver(不是 Selenium RC 并且不使用 Selenium-Server)测试,这些测试通过对 MSTest 的命令行调用来执行。我已经将它们分解为我们计划测试的每个浏览器(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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

cor*_*ori 5

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

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

  • 嗯,我的头骨此刻也有点麻木——我没有做过完全相同的事情,但我将浏览器对象藏在一个静态变量中,所以一个测试试图使用创建(和处置)的浏览器对象of) 在之前的测试中。同样的错误。你的错误帮助我指明了正确的方向。 (2认同)