2012-01-03 48 views
4

我想要简单的方法来启动Selenium webdriver实例并在其上运行各种测试。我试图在Suite文件中这样做,但它不起作用。实例立即死亡。有没有其他方法可以做到这一点?如何在NUnit和C#中共享一个Selenium webdriver实例?

可能我想在此套件中添加更多驱动程序(IE,Chrome),如果可能的话单独启动。欢迎任何建议。

namespace NUnit.Tests 
{ 
    public class AllTests 
    { 
     private static IWebDriver _Driver; 

     [TestFixtureSetUp] 
     public void SuiteSetUp() 
     { 
      _Driver = new FirefoxDriver(); 
     } 

     [TestFixtureTearDown] 
     public void SuiteTearDown() 
     { 
      try 
      { 
       _Driver.Quit(); 
      } 
       catch (Exception) 
      { 
        // Ignore errors if unable to close the browser 
      } 
     } 

     [Suite] 
     public static TestSuite Suite 
     { 
      get 
      { 
       LoginTest lt = new LoginTest { Driver=_Driver }; 
       suite.Add(lt); 
       AnotherTest at = new AnotherTest { Driver=_Driver }; 
       suite.Add(at); 
       return suite; 
      } 
      } 


    } 
} 

回答

2

尝试使用基类/扩展类运行此失败。由于webdriver实例没有正确初始化,无法正确杀死。相反,我在Suite中创建了SetupIE(),SetupChrome(),SetupFirefox()方法,并创建了可用作套件最后测试的拆卸方法。

下面是代码:

namespace TestNamespace 
{ 
    using System; 
    using NUnit.Framework; 
    using NUnit.Core; 
    using SeleniumTests; 
    using OpenQA.Selenium; 
    using OpenQA.Selenium.IE; 
    using OpenQA.Selenium.Firefox; 
    using OpenQA.Selenium.Chrome; 
    using OpenQA.Selenium.Support.UI; 

    class AllTests 
    { 
     public static IWebDriver WebDriver { get; private set; } 

     [Suite] 
     public static TestSuite Suite 
     { 
      get 
      { 
       TestSuite suite = new TestSuite("All Tests"); 

       //Setup a Web driver (see methods below for different browsers) - SetupIE(), SetupChrome(), SetupFirefox() 
       SetupIE(); 

       // Add tests to suite 
       suite.Add(new FlashLoadedTest { Driver = WebDriver }); 

       // Tear down a Web driver 
       suite.Add(new TearDownTest { DriverToTearDown = WebDriver }); 

       // return suite to NUnit 
       return suite; 
      } 
     } 

     // Method that's initialises FireFox Driver 
     private static void SetupFireFox() 
     { 
      WebDriver = new FirefoxDriver(); 
     } 

     // Method that's initialises IE Driver 
     private static void SetupIE() 
     { 
      WebDriver = new InternetExplorerDriver(); 
     } 


     // Can't get this working, but this is how its supposed to work 
     private static void SetupChrome() 
     { 
      WebDriver = new ChromeDriver(@"C:\Users\<user>\AppData\Local\Google\Chrome\Application"); 
     } 


     // Class with a test that tears down browser instance 
     [TestFixture] 
     class TearDownTest 
     { 
      public IWebDriver DriverToTearDown; 

      [Test] 
      public void TearDownBrowser() 
      { 
       if (DriverToTearDown == null) 
        Assert.Fail("No Browser to Tear Down"); 

       try 
       { 
        DriverToTearDown.Close(); 
        DriverToTearDown.Dispose(); 
       } 
       catch 
       { 
        Assert.Fail("Browser failed to tear down"); 
       } 
      } 
     } 

    } 
} 
2

我在Java中这样做,我做了一个基类,宣布webdriver的静态,把我的启动/配置方法在这个类,然后在每个测试类我做扩展它。

我相信它对于C#是一样的。

+0

我会尽力的。在这种情况下,如何启动不同的浏览器并行? – Gita 2012-01-03 15:58:10

+0

我使用了TestNG,然后使用它的参数化变量功能来运行各种浏览器。 它也有一个并行执行选项。 对不起,但我不熟悉NUnit。 – MostWanted 2012-01-03 16:11:48

+0

使用基类和扩展类尝试此操作后,它不起作用。所以我在Suite中创建了单独的测试来设置和拆卸浏览器。将这些作为第一个/最后一个添加到套件中,并且它像魔术一样工作感谢您的意见。 – Gita 2012-03-12 14:58:21

2

我明白这是一个有点晚,但可以证明是有用的未来的读者。

我创建了一个包含firefox驱动程序的基类,它适用于我。然后,您可以简单地从您的派生测试类中引用基类(此例中为Driver)。值得注意的是我正在使用C#和Nunit。

代码基类是:

namespace yournamespace 
{ 
    public class Driver 
    { 
     public IWebDriver driver; 
     public StringBuilder verificationErrors; 

     public Driver() 
     { 
      driver = new FirefoxDriver(); //replace with required driver 
      verificationErrors = new StringBuilder(); 
     } 

    } 
} 

然后简单地称为从我的测试类中的 '驱动程序' 类:

[TestFixture] 
public class IMSLogin : Driver 
{ 
    //.. all the usual bits and bobs! 
相关问题