我将一些Selenium JUnit测试移植到.NET项目中(测试MVC项目)。
我在Java中有以下几行:
WebDriver driver = new HtmlUnitDriver();
我把它像这样移植到.NET:
IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.HtmlUnit());
在Java中,这非常适合测试Spring应用程序,但在.NET中它会抛出异常:
Test method TDD.Tests.Acceptatie.TestLoginScreen.LoginScreenTest threw exception:
OpenQA.Selenium.WebDriverException: Unexpected error.
System.Net.WebException: Can't connect to remote server --->
System.Net.Sockets.SocketException:
Can't connect because target computer actively refused the connection 127.0.0.1:4444
注意:错误信息是从荷兰语翻译的,所以可能不是英文中的确切信息。
我添加了Selenium.Webdriver NuGet包。项目结构如下:
MVC项目配置为在localhost:8080上运行,我也尝试将webdriver设置为该ip:
IWebDriver driver = new RemoteWebDriver(new Uri("http://localhost:8080"), DesiredCapabilities.HtmlUnit());
我还尝试使用环回地址而不是' localhost'。
任何人都知道可能导致此问题的原因以及如何解决此问题?
提前致谢!
答案 0 :(得分:1)
调用RemoteWebDriver类的语法如下:
public RemoteWebDriver(Uri remoteAddress, ICapabilities desiredCapabilities)
where:
remoteAddress
Type: System.Uri
URI containing the address of the WebDriver remote server (e.g. http://127.0.0.1:4444/wd/hub).
desiredCapabilities
Type: OpenQA.Selenium.ICapabilities
An ICapabilities object containing the desired capabilities of the browser.
根据错误......
OpenQA.Selenium.WebDriverException: Unexpected error.
System.Net.WebException: Can't connect to remote server --->
System.Net.Sockets.SocketException:
Can't connect because target computer actively refused the connection 127.0.0.1:4444
您的程序/脚本似乎无法连接到 WebDriver远程服务器。
根据您的第二次代码试用 http://localhost:8080 是您的 Application Server ,而不是 WebDriver远程服务器,例如Selenium Grid Hub
。因此,您的程序显示错误。如果您使用 Selenium Grid ,请将行更改为:
IWebDriver driver = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"), DesiredCapabilities.HtmlUnit());
最后,快速查看OpenQA.Selenium.Remote.RemoteWebDriver的继承层次结构的 API文档,显示以下HtmlUnit
不是的层次结构本强>:
但是根据讨论Is there an HtmlUnitDriver for .NET?,您的第一个代码试用应该有效:
IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.HtmlUnit());
如果您想使用 Firefox实施,您可以:
IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.HtmlUnitWithJavaScript());