我正在研究一套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
显然端口会根据正在测试的浏览器而改变;当我运行整个套件时,我在IE,Firefox和Chrome测试的不同端口上出现错误 - 每个浏览器有两个错误(因为套件目前每个浏览器都有两个测试)
Windows防火墙对于构建计算机是关闭的,并且在运行测试之前检查netstat表明该端口未在使用中;如果我调试测试并在启动代码运行之后但在测试运行之前停止,当然端口正在使用中。 127.0.0.1和localhost也一样。
无论是否通过命令行调用测试,使用VS测试工具从Visual Studio中运行/调试,或者执行我的控制台应用程序(通过Process.Start()调用MSTest,我都会得到相同的错误。第一个FindElement()调用抛出异常。
我在哪里可以开始寻找在构建机器上而不是在我的开发盒上失败的原因?
答案 0 :(得分:4)
这里的问题是,在尝试在启动期间实现一些更强大的错误处理时,我在try / catch的finally块中调用了Teardown代码,并且包含在登录代码中,所以一旦测试工具被完成登录我正在关闭并清理WebDriver实例,因此当测试运行时,没有WebDriver可以与之通信。
我怀疑当我在我的开发机器上查看“相同”代码时,实际运行的库中没有该块。
答案 1 :(得分:0)
从Visual Studio运行应用程序时,它会启动侦听某个端口的服务器。在你的情况下59982。
在对其进行测试之前,您需要让您的Web应用程序在测试环境中独立运行。
在您的开发计算机上,您的应用程序正在该端口上运行。我猜你的远程机器并非如此。