我正在尝试通过WebBrowser控件进行非常简单的自动化测试。有两个方面:应用程序端具有不可触摸的代码,以及测试方面,我正在生成点击自动化。
的问题是,单选按钮在网页中控制我试图测试的后面的代码创建的 - 它们是RadioButtonList控件的一部分(使用RBL.Items.Insert ..)最重要的是, RadioButtonList有一个事件处理程序OnSelectedIndexChanged,它获取SelectedValue 我可以通过WebBrowser控件找到代码隐藏生成的单选按钮,并设置以下内容:
HtmlElement subjectRadioButton = browser.Document.GetElementById("...");
if (subjectRadioButton != null)
{
subjectRadioButton.InvokeMember("click");
}
调试器显示我进入代码。此外,如果您不执行任何其他操作,则可以直观地查看该项目。另一方面,我正在测试的页面,一旦发生回发,它就会进入事件处理程序。事件处理程序具有以下代码:
int.Parse(rblSubject.SelectedValue);
在rblSubject.SelectedValue,为空字符串,并且从来没有填充,无论我怎样尝试调用subjectRadioButton,这是这是在RadioButtonList的部分项目。我甚至尝试过javascript并确认checked = true。我认为这与单选按钮本身没有与RadioButtonList同步有关,因为它是在后面的代码中动态创建的。更奇怪的是,所有手动测试都能正常工作。它只是做自动化失败。我还注意到,如果我只是设置InvokeMember(“click”),则没有错误(没有回发)。虽然看起来确实如此。当我在页面上的链接或按钮上执行InvokeMember(“click”)时,发生回发,事件处理程序触发,我得到解析错误。非常感谢。
以下是我正在测试的应用程序端的代码 - 我无法修改的代码,初始化RadioButtonList rblSubject。
rblSubject.Items.Clear();
ListItem item;
if (obj <= 0)
{
item = new ListItem(GetObject("BillingIssue").ToString(), ((int)SubjectTypeEnum.BillingQuestion).ToString());
rblSubject.Items.Insert(0, item);
item = new ListItem(GetObject("ChangeNote").ToString(), ((int)SubjectTypeEnum.ChangeOfInformation).ToString());
rblSubject.Items.Insert(1, item);
item = new ListItem(GetObject("OtherAdmin").ToString(), ((int)SubjectTypeEnum.AdminNote).ToString());
rblSubject.Items.Insert(2, item);
}