protected void UseWindow(BaseScreen model, Func <Window, UserControl, Task> action) { WpfTestHelper.WithWindow2(async w => { var view = Bind(model); w.Content = view; await w.WaitLoaded(); await action(w, view); }); }
public void InputActiveWindow(string name, string text) { dispatcher.Invoke(() => { var el = activeWindow.Descendants <FrameworkElement>().FirstOrDefault(e => e.Name == name); if (el == null) { throw new Exception($"Могу найти элемент с именем '{name}' в окне {activeWindow}"); } AssertInputable(el); el.RaiseEvent(WpfTestHelper.TextArgs(text)); }); }
protected async Task Start() { session.Flush(); var loaded = new SemaphoreSlim(0, 1); dispatcher = WpfTestHelper.WithDispatcher(() => { Env.TplUiScheduler = TaskScheduler.FromCurrentSynchronizationContext(); //wpf обеспечивает синхронизацию объектов ui //тк сам тест запускает в отдельной нитке то в статических полях StyleHelper могут содержаться объекты созданные //в других нитках что бы избежать ошибок очищаем статические структуры StyleHelper.Reset(); activeWindow = (Window)ViewLocator.LocateForModel(shell, null, null); //такой размер нужен что бы уместились все кнопки на панели инструментов //тк невидимую кнопку нельзя нажать activeWindow.Width = 1014; activeWindow.Height = 764; windows.Add(activeWindow); activeWindow.Loaded += (sender, args) => loaded.Release(); ViewModelBinder.Bind(shell, activeWindow, null); //что бы тесты не лезли на первый план activeWindow.ShowActivated = false; activeWindow.ShowInTaskbar = false; activeWindow.Show(); }); Env.UiScheduler = new MixedScheduler((TestScheduler)Env.UiScheduler, new DispatcherScheduler(dispatcher)); dispatcher.UnhandledException += (sender, args) => { args.Handled = true; //ошибки отмены могут возникнуть если мы закроем форму до завершения всех запросов //игнорируем их if (!(args.Exception is TaskCanceledException)) { exceptions.Add(args.Exception); } }; await loaded.WaitAsync(); WaitIdle(); }
protected static void Input(UIElement element, Key key) { Contract.Assert(element != null); AssertInputable(element); element.RaiseEvent(WpfTestHelper.KeyArgs(element, key)); }
protected void Input(UIElement element, string text) { Assert.IsNotNull(element); AssertInputable(element); element.RaiseEvent(WpfTestHelper.TextArgs(text)); }