2015-02-12 3 views
2

У меня есть метод, который создает 2 удаленных веб-драйверов. один с хромом и другое с светлячками:Выполнение тестов Selenium в нескольких браузерах с C#

Driver.cs

public class Driver 
{ 

    public static IWebDriver Instance { get; set; } 

    public static void Initialize() 
    { 
     DesiredCapabilities[] browsers = {DesiredCapabilities.Firefox(),DesiredCapabilities.Chrome()}; 
     foreach (DesiredCapabilities browser in browsers) 
     { 
      if (browser == DesiredCapabilities.Chrome()) 
       { 
       var browser = DesiredCapabilities.Chrome(); 
       System.Environment.SetEnvironmentVariable("webdriver.chrome.driver", "C:/Users/jm/Documents/Visual Studio 2013/Projects/VNextAutomation - Copy - Copy (3)/packages/WebDriverChromeDriver.2.10/tools/chromedriver.exe"); 
       ChromeOptions options = new ChromeOptions() { BinaryLocation = "C:/Users/jm/AppData/Local/Google/Chrome/Application/chrome.exe" }; 
       browser.SetCapability(ChromeOptions.Capability, options); 
       Console.Write("Testing in Browser: " + browser.BrowserName); 

       Instance = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"), browser); 

      } else { 
       Console.Write("Testing in Browser: "+ browser.BrowserName); 
       Instance = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"), browser); 
      } 
     } 
     Instance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(15)); 
    } 

Тогда у меня есть класс Test:

[TestClass] 
public class LoginTests 
{ 
    [TestInitialize] 
    public void Init() 
    { 
     Driver.Initialize(); 
    } 

    [TestMethod] 
    public void Failed_login() 
    { 
     LoginPage.GoTo(); 
     LoginPage.LoginAs("user").WithPassword("pass").WithDatasource("db").Login(); 

     Assert.IsTrue(LoginFail.IsAt, "Login failure is incorrect"); 
    } 


    [TestMethod] 
    public void Admin_User_Can_Login() 
    { 
     LoginPage.GoTo(); 
     LoginPage.LoginAs("user").WithPassword("pass").WithDatasource("db").Login(); 

     Assert.IsTrue(HomePage.IsAt, "Failed to login."); 
    } 

    [TestCleanup] 
    public void Cleanup() 
    { 
     Driver.Close(); 

    } 
} 

}

Проблема заключается в том, когда Driver.Intialize вызывается он не запускает как хром, так и firefox. Я хочу, чтобы при запуске метода Init он запускал оба браузера и запускал методы тестирования в каждом браузере. Я новичок в Selenium и C#, поэтому, пожалуйста, со мной. Любое руководство будет высоко оценено.

ответ

6

То, как я сейчас это делаю, - это NUnit. У меня была такая же проблема и не удалось найти хороший способ сделать это с помощью MSTest.

Что я делаю бы:

Как вы можете видеть, что я просто создать новый TestFixture для каждого браузера.

[TestFixture(typeof(ChromeDriver))] 
[TestFixture(typeof(InternetExplorerDriver))] 
[TestFixture(typeof(FirefoxDriver))] 

public class LoginTests<TWebDriver> where TWebDriver : IWebDriver, new() 
{ 


[SetUp] 
public void Init() 
{ 
    Driver.Initialize<TWebDriver>(); 
} 

[Test] 
public void Failed_login() 
{ 
    LoginPage.GoTo(); 
    LoginPage.LoginAs("user").WithPassword("pass").WithDatasource("db").Login(); 

    Assert.IsTrue(LoginFail.IsAt, "Login failure is incorrect"); 
} 


[Test] 
public void Admin_User_Can_Login() 
{ 
    LoginPage.GoTo(); 
    LoginPage.LoginAs("user").WithPassword("pass").WithDatasource("db").Login(); 

    Assert.IsTrue(HomePage.IsAt, "Failed to login."); 
} 

[TearDown] 
public void Cleanup() 
{ 
    Driver.Close(); 

} 
} 
} 

Driver Class

public class Driver<TWebDriver> where TWebDriver : IWebDriver, new() 
{ 

    public static IWebDriver Instance { get; set; } 

    public static void Initialize() 
    { 
     if (typeof(TWebDriver) == typeof(ChromeDriver)) 
     { 


     var browser = DesiredCapabilities.Chrome(); 
       System.Environment.SetEnvironmentVariable("webdriver.chrome.driver", "C:/Users/jm/Documents/Visual Studio 2013/Projects/VNextAutomation - Copy - Copy (3)/packages/WebDriverChromeDriver.2.10/tools/chromedriver.exe"); 
       ChromeOptions options = new ChromeOptions() { BinaryLocation = "C:/Users/jm/AppData/Local/Google/Chrome/Application/chrome.exe" }; 
       browser.SetCapability(ChromeOptions.Capability, options); 
       Console.Write("Testing in Browser: " + browser.BrowserName); 



       Instance = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"), browser); 

      } else { 
       Console.Write("Testing in Browser: "+ browser.BrowserName); 
       Instance = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"), browser); 
      } 
     } 
     Instance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(15)); 
    } 
} 

Я попытался установить его вокруг вашего кода.

+0

Это потрясающе! спасибо, чтобы попробовать. Сообщение об ошибке назад. Спасибо Тидусу. – JerryBringer

+0

Thats fine, Если я помог, пожалуйста, не стесняйтесь повышать. Если у вас возникли проблемы, сообщите мне, чтобы я мог помочь. –

+0

Я обязательно сделаю это благодаря. – JerryBringer

2

Если вы хотите указать браузер для запуска теста на основе adhoc, а не все из них каждый раз, используя TestFixtures, у Ричарда Брэдшоу есть отличный учебник here.

Идея состоит в использовании файла конфигурации приложения (и заводского шаблона), в котором хранятся такие значения, как браузер, версия, платформа, концентратор селена и информация о порте (а также любые другие данные, которые могут потребоваться в вашем концентраторе/узле реализация на Grid) и вытащить его во время тестирования, чтобы создать экземпляр WebDriver. Затем вы можете изменить этот файл в промежутках между тестами, чтобы, если необходимо, развернуть WebDriver другого типа.

Мы используем это, чтобы последовательно запускать тесты с помощью NUnit, и это оказалось довольно эффективным.

+0

Это отличный ответ и именно то, что я хочу сделать. - Мне просто интересно, если вы предположили, что вы использовали это в своих последовательных тестах NUnit? – pipplupp

+0

Конечно, в статье есть ссылка в github repo с некоторыми примерами. Вот один из них: https://github.com/FriendlyTester/WebDriverFactoryExample/blob/master/WebDriverDriverFactory/RichardsTestSuite/Tests/LoginTests.cs – Jordan