基于WebDriver的Web应用程序测试需要同时打开多个浏览器窗口:一个打开面向消费者的门户,另一个打开管理员门户(以确保在另一个中看到一个中的更改)。这是通过创建两个单独的WebDriver对象来完成的:例如
IWebDriver driver1 = DriverFactory.NewChromeDriver();
IWebDriver driver2 = DriverFactory.NewChromeDriver();
测试可以根据需要访问两个WebDrivers。我们的测试在SpecFlow中指定,并作为MSTest案例实现。这些测试是在VisualStudio 2013 Premium中开发的,驱动程序只使用本地计算机的ChromeDriver实例。一切都很好。
当测试在Driver2中执行某些操作(例如,登录)然后移回Driver1时,我最终会抛出SocketException,因为localhost主动拒绝连接。 Windows防火墙已被告知允许所有端口上的应用程序,工厂正确设置代理。精确的堆栈跟踪是:
System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 127.0.0.1:50467
Result StackTrace:
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
Firefox打开一个浏览器,然后放弃。当多个窗口打开时,IE甚至无法找到浏览器。
(在我安装VS2013的最新更新之前,我从未遇到过这个问题....)
有什么想法吗?谢谢团队。
答案 0 :(得分:0)
如果DOM中没有元素,Selenium可能确实会抛出WebDriver异常。最后,我不得不将访问代码包装在try-catch中:如果WebDriver异常包装了一个包装SocketException的WebException,而SocketException的SocketErrorCode是ConnectionRefused,则意味着该元素确实不存在于DOM中。