Не удается отладить автоматические тесты после добавления новой Winform - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть несколько автоматических тестов, попадающих на страницы веб-интерфейса и веб-сервисы с использованием 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;
        }
    }
}
...