This is a migrated thread and some comments may be shown as answers.

UI Test possible within same process as WPF app?

1 Answer 154 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
Lars
Top achievements
Rank 1
Lars asked on 18 Jul 2018, 03:00 PM

Hi,

for some reasons (one of them simpler test construction) I'd like to run the WPF app to be tested within the same process as the test runner, thus being able to access some interfaces in the running app, e.g. setting some properties in the ViewModel.

I suceeded to some degree by constructing the app instance in the preparation of the test, then running it in a separate thread and then doing a ConnectToApplication(Process.GetCurrentProcess()). Access to the ViewModel also works fine via Dispatcher.Invoke on the app's UI thread.

Summary:

01.public void MyTest()
02.{
03.      // run app in-process
04.      MyApp app;
05.      var dispatcher = DispatcherFactory.CreateDispatcher("Hugo", ApartmentState.STA);
06.      dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
07.      {
08.        app = new MyApp();
09.        app.Run();
10.      }));
11. 
12.      // wait for app window
13.      var testApp = Manager.Current.ConnectToApplication(Process.GetCurrentProcess());
14.      var appWnd = testApp.WaitForWindow("MyApp");
15. 
16.      // access some app API
17.      dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => { SingletonInApp.Foo(); }));
18. 
19.      // stimulate some UI action
20.      var theButton = appWnd.Find.ByAutomationId<Button>("a_idTheButton"); // <=== THIS FAILS
21.      theButton.User.Click();
22. 
23.      // ...
24.}

 

However, as soon as I subsequently use any method to find an UI element, it fails with the error shown below.
Is there any reason why the above construction would not work in general? How can I overcome that error?

 

System.ApplicationException : Exception thrown during the wait for a condition.
Error: Unexpected error while waiting on condition.
Error: ArtOfTest.WebAii.Silverlight.ExecuteSilverlightCommandException:
[WPF Extension Error] Details: System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
   bei Telerik.TestingFramework.XamlExtension.ClientServices.SerializeNode(DependencyObject root, StringBuilder sb, List`1 popups)
   bei Telerik.TestingFramework.XamlExtension.ClientServices.SerializeAllVisualTrees()
   bei Telerik.TestingFramework.XamlExtension.ClientProcessor.ProcessCommand(String command)
   bei ArtOfTest.WebAii.Wpf.WpfProxy.ExecuteSLCommand(SilverlightCommand cmd)
   bei ArtOfTest.WebAii.Wpf.WpfProxy.GetAllVisualTrees()
   bei ArtOfTest.WebAii.Wpf.WpfWindow.RefreshVisualTrees()
   bei ArtOfTest.WebAii.Silverlight.VisualFind.RefreshRoot()
   bei ArtOfTest.WebAii.Silverlight.VisualWait.WaitForExistsByFindInfo(VisualFindInfo findInfo)
   bei ArtOfTest.Common.WaitAsync._worker_DoWork[T,V](Object waitParam)
Stack Trace:
     bei ArtOfTest.Common.WaitSync.CheckResult(WaitSync wait, String extraExceptionInfo, Object target)
     bei ArtOfTest.Common.WaitSync.For[T](Predicate`1 predicate, T target, Boolean invertCondition, Int32 timeout, WaitResultType errorResultType)
     bei ArtOfTest.WebAii.Silverlight.VisualWait.ForExistsInternal(Int32 timeout, Boolean invertCondition)
     bei ArtOfTest.WebAii.Silverlight.VisualWait.ForVisible(Int32 timeout)
     bei ArtOfTest.WebAii.Silverlight.VisualFind.ReturnOrThrow(FrameworkElement e, String throwMessage)
     bei ArtOfTest.WebAii.Silverlight.VisualFind.ByAutomationId(String id, String xamlTag)
     bei ArtOfTest.WebAii.Silverlight.VisualFind.ByAutomationId[T](String id)

 

1 Answer, 1 is accepted

Sort by
0
Elena
Telerik team
answered on 23 Jul 2018, 08:54 AM
Hello Lars,

Thank you for the shared details. 

What you are trying to accomplish will not be possible. As you have tried already the application under test will start and you will be able to access the ViewModel to change its properties. Though the specifics of how the Testing Framework communicates with the WPF extension will prevent all of these to run in the same process. 

I hope this will be helpful to you. However, in case of further questions, please let me know! 

Regards,
Elena Tsvetkova
Progress Telerik
 
Quickly become an expert in Test Studio, check out our new training sessions!
Test Studio Trainings
 
Tags
General Discussions
Asked by
Lars
Top achievements
Rank 1
Answers by
Elena
Telerik team
Share this question
or