Как я могу запустить один и тот же тест в стеке браузера и в локальных браузерах?

Я настроил тесты NUnit, которые выполняются в BrowserStack (настроено из этого примера https://github.com/browserstack/nunit-browserstack )

Базовый класс:

namespace Bloc.TestProject
{

    public class BrowserStackNUnitTest
    {
        protected IWebDriver driver;
        protected string profile;
        protected string environment;
        private Local browserStackLocal;

        public BrowserStackNUnitTest(string profile, string environment)
        {
            this.profile = profile;
            this.environment = environment;
        }

        [SetUp]
        public void Init()
        {
        ...

Тесты браузерного стека:

namespace Bloc.TestProject
{
    [TestFixture("parallel", "chrome")]
    [TestFixture("parallel", "ie11")]
    [TestFixture("parallel", "iphoneX")]
    [TestFixture("parallel", "ipad")]
    [TestFixture("parallel", "samsungGalaxyS8")]
    [Parallelizable(ParallelScope.Fixtures)]
    public class OnTimeOnlineBooking : BrowserStackNUnitTest
    {
        WebDriverWait wait;
        public OnTimeOnlineBooking(string profile, string environment) : base(profile, environment)
        {

        }
... my tests ...

Локальные тесты:

namespace Bloc.TestProject
{
    [TestFixture(typeof(PhantomJSDriver))]
    public class LocalBrowserTest<TWebDriver> where TWebDriver : IWebDriver, new()
{
    private IWebDriver driver;

    [SetUp]
    public void CreateDriver()
    {
        this.driver = new TWebDriver();
    }
    [TearDown]
    public void Cleanup()
    {
        driver.Quit();
    }


    ... my tests ... 

Есть ли способ структурировать свои тесты, чтобы я мог запустить тест, и он будет работать как локально, так и в стеке браузера без дублирования тестового кода?


person olemarius    schedule 27.02.2018    source источник


Ответы (2)


Я могу предложить обходной путь для этого случая в Java, необходимо изменить в C#.

написать код настройки стека браузера

public static browserstack_setup()  {

    DesiredCapabilities caps = new DesiredCapabilities();
    caps.setCapability("browserName", "chrome");
    caps.setCapability("version", "");
    caps.setCapability("platform", "windows");
    caps.setCapability("os_version", "8.1");

    WebDriver driver = new RemoteWebDriver(new URL(URL), caps);
    driver.get("http://www.google.com");
  }

затем напишите код для запуска браузера

public void openbrowser(String browsername, String URL){
        if(browsername.equalsIgnoreCase("broserstack")){

        browserstack_setup();
        }else if(browsername.equalsIgnoreCase("CH")){
            System.setProperty("webdriver.chrome.driver",chromedriverpath);
            driver=new ChromeDriver();
            driver.get(URL);
        }
}
person Kuldeep Yadav    schedule 27.02.2018

Вы можете получить имя из тестового контекста и на основе этой информации запустить локальный драйвер или удаленный драйвер. Для репо и вашего примера я предполагаю, что приведенный ниже код должен работать. Вы также можете просмотреть другие API, доступные в разделе TestContext.CurrentContext.Test, для операции сравнения.

[SetUp]
        public void Init()
        {
         if(TestContext.CurrentContext.Test.Name == "MyTestName"){
             this.driver = new TWebDriver();
         }
         else{
          NameValueCollection caps = ConfigurationManager.GetSection("capabilities/" + profile) as NameValueCollection;
          NameValueCollection settings = ConfigurationManager.GetSection("environments/" + environment) as NameValueCollection;

          DesiredCapabilities capability = new DesiredCapabilities();

          foreach (string key in caps.AllKeys)
          {
            capability.SetCapability(key, caps[key]);
          }

          foreach (string key in settings.AllKeys)
          {
            capability.SetCapability(key, settings[key]);
          }

          String username = Environment.GetEnvironmentVariable("BROWSERSTACK_USERNAME");
          if(username == null)
          {
            username = ConfigurationManager.AppSettings.Get("user");
          }

          String accesskey = Environment.GetEnvironmentVariable("BROWSERSTACK_ACCESS_KEY");
          if (accesskey == null)
          {
            accesskey = ConfigurationManager.AppSettings.Get("key");
          }

          capability.SetCapability("browserstack.user", username);
          capability.SetCapability("browserstack.key", accesskey);

          if (capability.GetCapability("browserstack.local") != null && capability.GetCapability("browserstack.local").ToString() == "true")
          {
            browserStackLocal = new Local();
            List<KeyValuePair<string, string>> bsLocalArgs = new List<KeyValuePair<string, string>>();
            bsLocalArgs.Add(new KeyValuePair<string, string>("key", accesskey));
            browserStackLocal.start(bsLocalArgs);
          }

          driver = new RemoteWebDriver(new Uri("http://"+ ConfigurationManager.AppSettings.Get("server") +"/wd/hub/"), capability);
          }
        }

Вам необходимо убедиться, что вы указали тестовые приборы для запуска на локальном компьютере и в сетке. Например, если протестировать A в Safari on Grid и проверить A в локальном браузере

person BountyHunter    schedule 27.02.2018