在前面的兩篇文章《漫話ID(上)——Name和ID的種種》 和《漫話ID(中)——UniqueID和ClientID》中,我們討論了關於ID的一些內容。在這一篇中,我想討論一下關於“自定義ID”的話題。
這個所謂的“自定義ID”跟前面提到的name,ID,UniqueID,ClientID沒多大關系,但是借用了id的特質——我們可以為控件添加一個自定義屬性,暫時稱之為testid,然後將id的值賦給testid。這可以應用於自定義控件較多的情形下的Web自動化測試之中,這樣我們訪問到的屬性是一個有意義的可讀的屬性,而且不會因為自定義控件中的子控件的位置改變而導致生成的UniqueID改變造成的測試腳本失效。自然,這個方法也有它很大的局限性,具體在後面會提到,先還是介紹一下我的方法。
思路
重寫System.Web.UI.Adapters.ControlAdapter中的BeginRender方法,將控件的ID值直接拿出來賦給一個新的屬性testid,並利用浏覽器配置文件並將這個testid屬性顯示到最終的頁面中。
實現步驟
步驟1:重寫System.Web.UI.Adapters.ControlAdapter中的BeginRender方法,將控件的ID值賦給新屬性testid。
public class HtmlControlAdapter:System.Web.UI.Adapters.ControlAdapter
{
protected override void BeginRender(HtmlTextWriter writer)
{
writer.AddAttribute("testid", this.Control.ID);
base.BeginRender(writer);
}
}
步驟2:使用浏覽器配置文件加入修改後的內容
<!--
可在 <windir>\Microsoft.NET\Framework\<ver>\CONFIG\Browsers 中找到現有的浏覽器定義
-->
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.WebControls.TextBox"
adapterType="TestIDWebProject.HtmlControlAdapter" />
<adapter controlType="System.Web.UI.WebControls.Button"
adapterType="TestIDWebProject.HtmlControlAdapter" />
</controlAdapters>
</browser>
</browsers>
在配置文件中我們將testid屬性應用到了TextBox和Button兩種控件上。