由于Driver.Close()和Driver.Quit()而无法连接到远程服务器,但如何解决?

时间:2019-03-28 21:56:26

标签: c# selenium

我一直在使用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()时一切正常,所以我想就是这样。

2 个答案:

答案 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.
}

谢谢大家的帮助。我全心全意地解决了这个问题,您的回应让我得以解决:)