WebBrowser コントロールを使用して非常に単純な自動化テストを実行しようとしています。2 つの側面があります。変更できないコードを含むアプリケーション側と、クリックスルーの自動化を行うために生成しているテスト側です。
問題は、私がテストしようとしている Web ページ コントロールのコード ビハインドでラジオ ボタンが作成されていることです。ラジオ ボタンは RadioButtonList コントロールの一部です (RBL.Items.Insert を使用)。 SelectedValue を取得するイベント ハンドラ OnSelectedIndexChanged。
WebBrowser コントロールを介してコード ビハインドで生成されたラジオ ボタンを見つけ、次のように設定できます。
HtmlElement subjectRadioButton = browser.Document.GetElementById("...");
if (subjectRadioButton != null)
{
subjectRadioButton.InvokeMember("click");
}
デバッガーは、コードを取得していることを示しています。また、他に何もしなければ目視で確認できる項目です。一方、私がテストしているページでは、ポストバックが発生すると、イベント ハンドラーに入ります。イベント ハンドラーには、壊れている次のコードがあります。
int.Parse(rblSubject.SelectedValue);
rblSubject.SelectedValue は空の文字列であり、RadioButtonList の一部である項目である subjectRadioButton をどのように呼び出そうとしても、入力されません。私も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);
}