我一直在使用Selenium和NUnit进行一些自动化测试,直到现在一切都很好。我最近所做的更改是在一个测试类中添加了多个测试。
我很确定问题出在测试类中“ Teardown”函数中的代码。当我注释掉
BrowserFactory.CloseAllDrivers();
一切正常。
这是我的“ FrontEndAddItemToCartTest”的代码:
class FrontEndAddItemToCartTest : PageTest
{
[SetUp]
public void Initialize()
{
SetBrowser(BrowserFactory.BrowserType.Chrome); // Not headless
SetServer("testUrlNotGivenForSecurityPurposes");
StartTest(TestType.FrontEnd);
SetSize(MobileSize.XXLarge);
}
[Test]
public void StandardQuantityTest()
{
OrderItem standardQuantity = new OrderItem(new Product("500", ".25"), 500);
FrontEndActions.AddItemToCart(standardQuantity);
}
[Test]
public void CustomQuantityTest()
{
OrderItem customQuantity = new OrderItem(new Product("482", ".25"), 225);
FrontEndActions.AddItemToCart(customQuantity);
}
[TearDown]
public void EndTest()
{
BrowserFactory.CloseAllDrivers();
}
}
这是我得到的错误:
Message: 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
还有其他一些我认为不相关的东西。
话虽如此,我在“ SetBrowser(...)”中有用于初始化
new ChromeDriver();
但这似乎还不够。
顶部的方法是为了避免在每个测试中都做太多看起来象硒的事情-使事情不仅由我自己维护,而且使其他人更容易维护-但这就是您对典型驱动程序设置的期望。我不确定为什么第二个测试是导致此问题的原因,但是由于运行CloseAllDrivers()
时一切正常,所以我想就是这样。
答案 0 :(得分:0)
通过属性的外观,您正在使用MSTest吗?是否可以并行执行测试?
我想无论如何,为了实现良好的测试隔离,您可能希望更改CloseAllDrivers方法,以便仅处理用于清理的测试中使用的驱动程序。我建议从那里开始,看看是否有同样的问题。
此外,CloseAllDrivers是调用driver.Quit()还是driver.Dispose()吗?这些都是您要使用的。
答案 1 :(得分:0)
好,所以问题是综合的:
1.我有Drivers[driver].Close();
和Drivers[driver].Quit();
-只有.Quit()解决了一个一个问题。老实说,我不太确定为什么Close()会引起问题。另一个(窗口最后没有正确关闭)是由于我的BrowserFactory中的以下代码:
if (driver == null)
{
Driver = new ChromeDriver((ChromeOptions)options); // options created elsewhere
Drivers.Add("Chrome", Driver); // This adds the driver to the list of Drivers currently up.
}
else
{
Driver = new ChromeDriver((ChromeOptions)options); // same as before
Drivers["Chrome"] = Driver; // **this** wasn't here before. This was the issue. Essentially, I was calling ```Quit()``` on the first instance of the driver, not on the fresh one created by the second test.
}
谢谢大家的帮助。我全心全意地解决了这个问题,您的回应让我得以解决:)