下一步,我模拟了对“Last Name”单选按钮的检查,向文本框控件中输入“urk”:
Console.WriteLine("\nSelecting ''Last Name'' radio button"); Console.WriteLine("Setting text box to ''urk''"); |
这两段代码是非常相似的,并且看起来相当明白。我通过getElementByID方法获得了HTMLInputElemen对象的引用。在拥有这个对象之后,我能使用它的属性或方法来操纵它。这里我选择单选按钮控件的“checked”属性(因为在C#中checked是一个保留字,我必须使用 “@checked”)和文本框控件的“value”属性。按你下面看到的方式点击Search按钮:
Console.WriteLine("Clicking search button"); HTMLInputElement button = (HTMLInputElement)theDoc.getElementById("Button1"); button.click(); documentComplete.WaitOne(); |
在这个例子中,我需要调用WaitOne方法来确保表示搜索结果的页面被充分装载了。通过一些很小的实验,你会发现你能虚拟操纵任何HTML元素。例如,我能模拟下拉框的选择、超链接的点击,当然在这个测试场景中我无需这样做。在我操作Web应用程序之后,我必须检查最终状态的正确性。
Console.WriteLine("\nSeeking ''Burke, Brian'' in list box"); HTMLSelectElement selElement = (HTMLSelectElement)theDoc.getElementsByTagName("select").item(0, null); if (selElement.innerText.ToString().IndexOf("Burke, Brian") >= 0) { Console.WriteLine("Found target string"); pass = true; } else { Console.WriteLine("*Target string not found*"); } |
一般模式是通过共同的标签名获得一个HTML元素集的引用,然后使用属性得到某一特定元素,然后获取表示该元素头标签和尾标签之间数据串的 innerText。这里,我获得了所有<select>元素的引用,然后通过元素集的属性得到了第一个<select>元素 ——当然,也是我的Web页面中唯一的<select>元素。这是由一个ASP.NET列表框控件生成的HTML。传递给项目属性的参数有点复杂。第一个参数既可以是整数,也可以是字符串,前者被理解为基于0的索引值,后者被理解为标签名。我向项目属性的第二个参数传递一个空值NULL。这个参数也是一个索引值,但它只是在项目属性返回一个集合而不是一个原子对象时才有用。有时你需要访问不是任何HTML字元素中的文档体中的值,下面的代码片断向你展示了一种达到目的的方法:
Console.WriteLine("Seeking ''Search complete'' in body"); HTMLBody body = (HTMLBody)theDoc.getElementsByTagName("body").item(0, null); if (body.createTextRange().findText("Search complete", 0, 0) == true) { Console.WriteLine("Found target string"); pass = true; } else { Console.WriteLine("*Target string not found*"); } |