2015-03-20 3 views
1

Во время работы над моей первой большой программой для кодированных ui я узнал, что я испортил то, как я двигался через приложение. Это проявилось в том, что моя программа очень медленная, я имею в виду черепаху медленный LOL. Я понял это после кодирования большей части программы и очень разочаровался в производительности.HOw Я передаю экземпляр моего браузера Класс окна из метода [ClassInitialize] в другой класс, который не является статичным

Проблема в том, что я не передавал экземпляр моего браузера между моими классами и строго полагался, я должен сказать, что на моих картах U.I я создал (я могу подробно рассказать об этом, если кто-то захочет узнать). Когда я начал проект, я знал, что должен это сделать, но так как я создал [ClassInitialize], чтобы запустить браузер для всех моих методов тестирования. Область, которую я выпустил из своего браузера, я не смог передать ее, поскольку она была статичной, и это заставляет меня делать много ненужных последствий в том, как я построил карты U.I и т. Д.

В настоящее время я думаю, что мне нужно либо изменить его на инициализацию теста, либо начать запуск моего браузера в одном методе тестирования, или, как я думал, это передать экземпляр моего браузера, вызвав мой первый класс, который я использую. Вот код ниже того, что у меня сейчас есть, я бы хотел, чтобы некоторые мнения касались наилучшего способа его решения.

[ClassInitialize] 
    public static void GoToHomePage(TestContext context) 
    { 
     Playback.Initialize(); 

     MyCodedUITests.StartTest(); 
     //Playback.PlaybackSettings.MatchExactHierarchy = true; 
     // //dev 
     //VyguideWindow = BrowserWindow.Launch(new Uri(@"http://ThesiteIlaunch")); 
     //prod 
     VyguideWindow = BrowserWindow.Launch(new Uri(@"http://ThesiteILauch")); 
     proc = VyguideWindow.Process; 
     VyguideWindow.CloseOnPlaybackCleanup = false; 
     VyguideWindow.Maximized = true; 
     HomePage passWnd = new HomePage(); 
     passWnd.PassBrows(VyguideWindow); 

    } 

    public BrowserWindow PassBrows(BrowserWindow window) 
    { 
     BrowserWindow myBrowser = window; 

     return myBrowser; 
    } 

Просьба сообщить мне о наилучшей практике или использовать функцию инициализации теста. Первоначальное мышление состояло в том, что я собирался использовать classinitialize, и все мои другие методы тестирования собирались бежать от него, поэтому я впервые это сделал, но я не знаю, все ли это выполнимо. Спасибо за любую обратную связь.

ответ

0

У меня есть статический класс, который я использую для переменных, которые мне придется использовать на протяжении всего теста. Итак, я объявляю окно браузера здесь:

public static class GlobalVariables 
{ 
    public static BrowserWindow Browser; 
} 

А затем создайте экземпляр в моей инициализации.

[ClassInitialize] 
public void ClassInitialize() 
{ 
    Playback.Initialize(); 
    MyCodedUITests.StartTest(); 

    // dev 
    //GlobalVariables.Browser = BrowserWindow.Launch(new Uri(@"http://ThesiteIlaunch")); 

    // prod 
    GlobalVariables.Browser = BrowserWindow.Launch(new Uri(@"http://ThesiteILauch")); 


    GlobalVariables.Browser.CloseOnPlaybackCleanup = false; 
    GlobalVariables.Browser.Maximized = true; 
} 

Теперь я могу использовать GlobalVariables.Browser объект в моем UIMaps в качестве родительского объекта для всех новых объектов.

public HtmlControl MyButton 
{ 
    get 
    { 
     HtmlControl target = new HtmlControl(GlobalVariables.Browser); 
     target.SearchProperties[propName] = "blah"; 
     return target; 
    } 
} 
+0

Спасибо Райан, я не знаю, почему я об этом не думал. Я надеюсь, что, пройдя по моему браузеру, это значительно ускорит мое общее воспроизведение, так как это также заставило меня перепроектировать мое текущее решение, но я бы предпочел, чтобы оно было исправлено. Еще раз спасибо. – skinnyWill