---
title: Log Error Dialogs
page_title: Log Error Dialogs - Test Studio Dev Documentation
description: Log Error Dialogs
position: 1
---
#Log Error Dialogs#
*My application can potentially display a dialog containing an error message during test execution. The dialog can appear multiple times and will not always appear at the same point in the test, therefore I cannot use a standard Dialog Handler step.
I want to capture these error messages and automatically handle these dialogs if they appear.*
##Solution##
This is possible with a coded solution. The stipulation is that the dialog is displayed the same way and has the same title in each browser:
![Dialog][1]
1.Add an Assembly Reference to *System.Windows.Forms*.
2.Add a coded step to the beginning of the test that creates a dialog monitor.
3.Define a custom dialog handler that is referenced in the coded step.
4.Override the *OnAfterTestCompleted* method to log whatever text the dialog handler captured.
5.Auto reset the dialog handler in case of multiple dialogs.
Here is the full code-behind file, excluding the standard *using/Imports* statements and the Dynamic Pages Reference region:
#### __[C#]__
{{region }}
using System.Threading;
using System.Windows.Forms;
using ArtOfTest.WebAii.Win32.Dialogs;
namespace TestProject7
{
public class HandleDialogLogText : BaseWebAiiTest
{
string txt = string.Empty;
GenericDialog errorDialog;
public override void OnAfterTestCompleted(TestResult result)
{
Log.WriteLine("OnAfterTestCompleted dialog text: " + txt);
base.OnAfterTestCompleted(result);
}
[CodedStep(@"New Coded Step")]
public void HandleDialogLogText_CodedStep()
{
errorDialog = new GenericDialog(ActiveBrowser, "Custom Title", true);
errorDialog.HandlerDelegate = HandleErrorDialog;
Manager.DialogMonitor.AddDialog(errorDialog);
}
public void HandleErrorDialog(IDialog dialog)
{
txt += "\r\n";
txt += "Dialog " + (dialog.HandleCount + 1).ToString() + ": " + dialog.Window.AllChildren[dialog.Window.AllChildren.Count - 1].Caption;
Manager.Desktop.KeyBoard.KeyPress(Keys.Enter);
dialog.HandleCount++;
Thread resetDialog = new Thread(new ThreadStart(ResetDialog));
resetDialog.Start();
}
public void ResetDialog()
{
Thread.Sleep(500);
errorDialog.CurrentState = DialogCurrentState.NotActive;
}
}
}
{{endregion}}
#### __[VB]__
{{region }}
Imports System.Threading
Imports System.Windows.Forms
Imports ArtOfTest.WebAii.Win32.Dialogs
Namespace TestProject7
Public Class HandleDialogLogText
Inherits BaseWebAiiTest
Private txt As String = String.Empty
Private errorDialog As GenericDialog
Public Overrides Sub OnAfterTestCompleted(result As TestResult)
Log.WriteLine("OnAfterTestCompleted dialog text: " + txt)
MyBase.OnAfterTestCompleted(result)
End Sub
_
Public Sub HandleDialogLogText_CodedStep()
errorDialog = New GenericDialog(ActiveBrowser, "Custom Title", True)
errorDialog.HandlerDelegate = HandleErrorDialog
Manager.DialogMonitor.AddDialog(errorDialog)
End Sub
Public Sub HandleErrorDialog(dialog As IDialog)
txt += vbCr & vbLf
txt += "Dialog " + (dialog.HandleCount + 1).ToString() + ": " + dialog.Window.AllChildren(dialog.Window.AllChildren.Count - 1).Caption
Manager.Desktop.KeyBoard.KeyPress(Keys.Enter)
dialog.HandleCount += 1
Dim resetDialog__1 As New Thread(New ThreadStart(ResetDialog))
resetDialog__1.Start()
End Sub
Public Sub ResetDialog()
Thread.Sleep(500)
errorDialog.CurrentState = DialogCurrentState.NotActive
End Sub
End Class
End Namespace
{{endregion}}
[1]: images/log-error-dialogs/fig1.png