c# - 运行多个 nUnit 测试会触发“无连接”错误,但单独运行可以正常工作 (JetBrains Rider)
问题描述
我有一个非常简单的 Selenium c# 结构如下:
using System;
using System.Timers;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace ConsoleApplication2
{
internal class Program
{
IWebDriver driver = new ChromeDriver();
public static void Main(string[] args)
{
}
[SetUp]
public void Initialize()
{
driver.Navigate().GoToUrl("https://www.google.pt/");
Console.WriteLine("INITIALIZE complete");
}
[Test]
public void TestGoogleSearch()
{
IWebElement element = driver.FindElement(By.Name("q"));
element.SendKeys("ivo cunha");
Console.WriteLine("IVO complete");
}
[Test]
public void TestGoogleSearch2()
{
IWebElement element = driver.FindElement(By.Name("q"));
element.SendKeys("adam o'brien");
Console.WriteLine("ADAM complete");
}
[TearDown]
public void CleanUp()
{
System.Threading.Thread.Sleep(2500);
driver.Close();
driver.Quit();
driver.Dispose();
Console.WriteLine("CLEANUP complete");
}
}
}
当我运行每个测试单元时,每个测试单元都通过了。但是如果我运行所有测试单元(在这种情况下只有 2 个),它会失败并出现以下错误:
OpenQA.Selenium.WebDriverException:意外错误。System.Net.WebException:无法连接到远程服务器---> System.Net.Sockets.SocketException:无法建立连接,因为目标机器主动拒绝它 127.0.0.1:57535
我该如何解决这个问题,以便我可以在一系列中运行所有测试?
解决方案
当您实例化 ChromeDriver 时,它会创建一个用于测试的套接字。
然后你TearDown
在每次测试之后使用它运行,所以它基本上在之后关闭连接TearDown
并且不会再次打开它以进行第二次测试。
所以你要么:
ChromeDriver
仅在完成所有测试后关闭。- 每次测试后关闭
ChromeDriver
并创建新实例。
这是第二种解决方案的示例
using System;
using System.Timers;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace ConsoleApplication2
{
internal class Program
{
IWebDriver driver = null;
public static void Main(string[] args)
{
}
[SetUp]
public void Initialize()
{
driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.google.pt/");
Console.WriteLine("INITIALIZE complete");
}
[Test]
public void TestGoogleSearch()
{
IWebElement element = driver.FindElement(By.Name("q"));
element.SendKeys("ivo cunha");
Console.WriteLine("IVO complete");
}
[Test]
public void TestGoogleSearch2()
{
IWebElement element = driver.FindElement(By.Name("q"));
element.SendKeys("adam o'brien");
Console.WriteLine("ADAM complete");
}
[TearDown]
public void CleanUp()
{
System.Threading.Thread.Sleep(2500);
driver.Close();
driver.Quit();
driver.Dispose();
Console.WriteLine("CLEANUP complete");
}
}
}
推荐阅读
- excel - 如何将 Excel 与 IBM Watson 连接起来
- java - 无需手动编辑构建路径的 JavaFX 11 设置
- symfony - 如何在 FOR 循环中更改元素的值
- javascript - 过滤器值的增加和减少在 Camanjs 中无法正常工作
- php - 如何检查在 php 中完成的 bash shell
- dart - 如何根据第一个流中的事件启动第二个流?
- symfony4 - Symfony4 内核找不到自动加载的类
- python-3.x - 如何避免在activex autocad api上的SendCommand期间保存提示
- c - Cppcheck 在每次扫描时返回不同的结果
- json - 使用 PowerShell 嵌套 JSON