private void ExtractUpdatePanelNamesFromAsyncPostback(string body, WebTestContext context) { RuleHelper.NotAlreadyDone(context, "$UPDATEPANEL.EXTRACTED", () => { int newUpdatePanelsAdded = 0; foreach (Match match in _FindUpdatePanelRegex.Matches(body)) { string updatePanelDivID = match.Groups["name"].Value; string updatePanelFullId = updatePanelDivID.Replace('_', '$'); string updatePanelIdLastPart = updatePanelFullId.Substring(updatePanelFullId.LastIndexOf('$') + 1); string contextKeyName = UPDATE_PANEL_PREFIX + updatePanelIdLastPart; string keyName = RuleHelper.PlaceUniqueItem(context, contextKeyName, updatePanelFullId); int countOfKeys = context.Count; RuleHelper.PlaceUniqueItem(context, UPDATE_PANEL_KEY, updatePanelFullId); if (context.Count > countOfKeys) { newUpdatePanelsAdded++; } } context[UPDATE_PANEL_COUNT_KEY] = ((int)context[UPDATE_PANEL_COUNT_KEY]) + newUpdatePanelsAdded; }); }
/// <summary> /// Find all javascript:__doPostback(...) type declarations which indicates /// all controls that support postback. It finds all such controls that support /// postback and then stores the full client ID of the control in Context /// using the last part of the ID as key in Context. For example: /// $POSTBACK.1.AddNewWidget = WidgetUpdatePanel001$ctl_002$AddNewWidget /// This way you can find a paricular controls full client ID when you know only the /// server ID of the control. /// </summary> /// <param name="bodyHtml">Body HTML</param> /// <param name="context">WebTest Context</param> public static void ExtractPostBackNames(string bodyHtml, WebTestContext context) { RuleHelper.NotAlreadyDone(context, "$POSTBACK.EXTRACTED", () => { var matches = _FindPostbackNames.Matches(bodyHtml); foreach (Match match in matches) { string fullID = match.Groups[1].Value; string lastPartOfID = fullID.Substring(fullID.LastIndexOf('$') + 1); string contextKeyName = "$POSTBACK." + lastPartOfID; RuleHelper.PlaceUniqueItem(context, contextKeyName, fullID); } }); }
public static void ExtractUpdatePanelNamesFromHtml(string body, WebTestContext context) { RuleHelper.NotAlreadyDone(context, UPDATEPANEL_EXTRACTED_KEY, () => { // Do not extract update panel names twice int pos = body.IndexOf(UPDATE_PANEL_DECLARATION); if (pos > 0) { // found declaration of all update panels on the page pos += UPDATE_PANEL_DECLARATION.Length; int endPos = body.IndexOf(']', pos); string updatePanelNamesDelimited = body.Substring(pos, endPos - pos); string[] updatePanelNames = updatePanelNamesDelimited.Split(','); int updatePanelCounter = 1; foreach (string updatePanelName in updatePanelNames) { // Create a unique key in the context using the UpdatePanel's Last part of the ID which is usually the // ID specified in aspx page string updatePanelFullId = updatePanelName.TrimStart('\'').TrimEnd('\'').TrimStart('t'); string updatePanelIdLastPart = updatePanelFullId.Substring(updatePanelFullId.LastIndexOf('$') + 1); string contextKeyName = UPDATE_PANEL_PREFIX + updatePanelIdLastPart; string keyName = RuleHelper.PlaceUniqueItem(context, contextKeyName, updatePanelFullId); // Store all update panels as $UPDATEPANEL.1, $UPDATEPANEL.2, ... context[UPDATE_PANEL_PREFIX + updatePanelCounter] = updatePanelFullId; // Find the position of the UpdatePanel string updatePanelDivId = updatePanelFullId.Replace('$', '_'); // Look for a div with id having the updatepanel ID, e.g. <div id="UserTabPage_TabUpdatePanel"> string lookingFor = "<div id=\"" + updatePanelDivId + "\""; int updatePanelDivIdPos = body.IndexOf(lookingFor); context[UPDATE_PANEL_PREFIX + updatePanelCounter + UPDATE_PANEL_POS_KEY] = updatePanelDivIdPos; context[keyName + UPDATE_PANEL_POS_KEY] = updatePanelDivIdPos; updatePanelCounter++; } context[UPDATE_PANEL_COUNT_KEY] = updatePanelCounter; } }); }