У меня есть несколько автоматических тестов, попадающих на страницы веб-интерфейса и веб-сервисы с использованием Selenium и NUnit.Недавно я добавил динамически созданную форму Windows, которая отображается как модальное диалоговое окно и ожидает некоторый пользовательский ввод, такой как пароли и т. Д. После того, как ввод введен, настройки сохраняются и шифруются с использованием DPAPI и при последующем запуске не нужны.пользовательский ввод больше.
Моя проблема в том, что я могу отлаживать до того момента, когда отображается диалоговое окно, но как только код достигает модального диалога, Visual Studio просто зависает.Я могу запустить код, и он отлично работает.Я просто не могу отладить это.Кто-нибудь видел эту проблему раньше?
Код для приглашения пользователя:
public static class TestSettingsConfigExtensions
{
....
private static string PromptUserForSetting(string settingName)
{
string promptedValue = null;
DialogResult result = UserInput.Show("User Setting", $"Please enter a value for {settingName}", ref promptedValue);
if (result == DialogResult.OK)
return promptedValue;
return null;
}
private class UserInput
{
public static DialogResult Show(string title, string promptText, ref string value)
{
Form form = new Form();
Label lblPrompt = new Label();
TextBox txtSettingValue = new TextBox();
txtSettingValue.UseSystemPasswordChar = true;
Label lblUnmask = new Label();
CheckBox chkShouldUnmask = new CheckBox();
chkShouldUnmask.CheckedChanged += (object sender, EventArgs e) => { ChkShouldUnmask_CheckedChanged(chkShouldUnmask.Checked, ref txtSettingValue); };
Button btnOk = new Button();
Button btnCancel = new Button();
form.Text = title;
lblPrompt.Text = promptText;
txtSettingValue.Text = value;
lblUnmask.Text = "Unmask";
chkShouldUnmask.Checked = false;
btnOk.Text = "OK";
btnCancel.Text = "Cancel";
btnOk.DialogResult = DialogResult.OK;
btnCancel.DialogResult = DialogResult.Cancel;
lblPrompt.SetBounds(9, 20, 372, 13);
txtSettingValue.SetBounds(12, 36, 372, 20);
lblUnmask.SetBounds(9, 65, 50, 13);
chkShouldUnmask.SetBounds(59, 65, 372, 13);
btnOk.SetBounds(228, 102, 75, 23);
btnCancel.SetBounds(309, 102, 75, 23);
lblPrompt.AutoSize = true;
txtSettingValue.Anchor = txtSettingValue.Anchor | AnchorStyles.Right;
lblUnmask.AutoSize = true;
chkShouldUnmask.Anchor = chkShouldUnmask.Anchor | AnchorStyles.Right;
btnOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
btnCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
form.ClientSize = new Size(396, 137);
form.Controls.AddRange(new Control[] { lblPrompt, txtSettingValue, lblUnmask, chkShouldUnmask, btnOk, btnCancel });
form.ClientSize = new Size(Math.Max(300, lblPrompt.Right + 10), form.ClientSize.Height);
form.FormBorderStyle = FormBorderStyle.FixedDialog;
form.StartPosition = FormStartPosition.CenterScreen;
form.MinimizeBox = false;
form.MaximizeBox = false;
form.AcceptButton = btnOk;
form.CancelButton = btnCancel;
DialogResult dialogResult = form.ShowDialog();
value = txtSettingValue.Text;
return dialogResult;
}
private static void ChkShouldUnmask_CheckedChanged(bool shouldUnmask, ref TextBox txtSettingValue)
{
if (shouldUnmask)
txtSettingValue.UseSystemPasswordChar = false;
else
txtSettingValue.UseSystemPasswordChar = true;
}
}
}