代码之家  ›  专栏  ›  技术社区  ›  Divi

添加新Winform后无法调试自动测试

  •  0
  • Divi  · 技术社区  · 7 年前

    我使用Selenium和NUnit对webui页面和web服务进行了一些自动测试。我最近添加了一个动态创建的Windows窗体,它显示为一个模式对话框,需要一些用户输入,如密码等。一旦输入,设置将使用DPAPI保存和加密,在随后的运行中,不再需要用户输入。

    用户提示代码:

    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;
            }
        }
    }
    
    0 回复  |  直到 7 年前