// Read the XML for each elem generate output with Path private void SetOutput(XmlDocument xmlDoc, Act act) { XmlReader rdr1 = XmlReader.Create(new System.IO.StringReader(xmlDoc.InnerXml)); XmlReader rdr = XmlReader.Create(new System.IO.StringReader(xmlDoc.InnerXml)); XmlReader subrdr = null; string Elm = ""; ArrayList ls = new ArrayList(); List <string> DeParams = new List <string>(); foreach (ActReturnValue r in act.ReturnValues) { //TODO: How the user will know? add check box? if (r.Param.IndexOf("AllDescOf") == 0) { DeParams.Add(r.Param.Trim().Substring(9).Trim()); } } while (rdr.Read()) { if (rdr.NodeType == XmlNodeType.Element) { Elm = rdr.Name; if (ls.Count <= rdr.Depth) { ls.Add(Elm); } else { ls[rdr.Depth] = Elm; } foreach (var p in DeParams) { if (p == rdr.Name) { subrdr = rdr.ReadSubtree(); subrdr.ReadToFollowing(p); act.AddOrUpdateReturnParamActualWithPath("AllDescOf" + p, subrdr.ReadInnerXml(), "/" + string.Join("/", ls.ToArray().Take(rdr.Depth))); subrdr = null; } } } if (rdr.NodeType == XmlNodeType.Text) { // soup req contains sub xml, so parse them if (rdr.Value.StartsWith("<?xml")) { XmlDocument xmlnDoc = new XmlDocument(); xmlnDoc.LoadXml(rdr.Value); SetOutput(xmlnDoc, act); } else { act.AddOrUpdateReturnParamActualWithPath(Elm, rdr.Value, "/" + string.Join("/", ls.ToArray().Take(rdr.Depth))); } } } }
public static void ParseActionResult(NewPayLoad RC, Act actPlugin) { // After we send it we parse the driver response if (RC.Name == "ActionResult") { // We read the ExInfo, Err and output params actPlugin.ExInfo = RC.GetValueString(); string error = RC.GetValueString(); if (!string.IsNullOrEmpty(error)) { actPlugin.Error += error; actPlugin.Status = Execution.eRunStatus.Failed; return; } List <NewPayLoad> OutpuValues = RC.GetListPayLoad(); foreach (NewPayLoad OPL in OutpuValues) { // //TODO: change to use PL AddValueByObjectType // // it is param name, type and value string PName = OPL.GetValueString(); string path = OPL.GetValueString(); string mOutputValueType = OPL.GetValueEnum(); switch (mOutputValueType) { case nameof(Amdocs.Ginger.CoreNET.RunLib.NodeActionOutputValue.OutputValueType.String): string stringValue = OPL.GetValueString(); actPlugin.AddOrUpdateReturnParamActualWithPath(PName, stringValue, path); break; case nameof(Amdocs.Ginger.CoreNET.RunLib.NodeActionOutputValue.OutputValueType.ByteArray): byte[] b = OPL.GetBytes(); //actPlugin.ReturnValues.Add(new ActReturnValue() { Param = PName, Path= path, Actual = "aaaaaaa" }); //FIXME!!! when act can have values types actPlugin.AddOrUpdateReturnParamActualWithPath(PName, "aaa", path); //FIXME!!! when act can have values types break; default: throw new Exception("Unknown param type: " + mOutputValueType); } } } else { // The RC is not OK when we faced some unexpected exception //TODO: string Err = RC.GetValueString(); actPlugin.Error += Err; } }
private void ParseFileToReturnValues(string filecontent, Act act) { if (!string.IsNullOrEmpty(filecontent)) { act.AddOrUpdateReturnParamActualWithPath("Processed file", filecontent, null); } }
private void MainframeGetDetailsFromText(Act act) { ActMainframeGetDetails MFGD = (ActMainframeGetDetails)act; int locx; int locy = -1; String[] MainFrameLines = MFE.screenText.Split('\n'); int instance = 1; for (int i = 0; i < MainFrameLines.Length; i++) { locx = MainFrameLines[i].IndexOf(MFGD.ValueForDriver); if (locx >= 0) { locy = i; if (MFGD.TextInstanceType == ActMainframeGetDetails.eTextInstance.AllInstance) { if (locy != -1) { act.AddOrUpdateReturnParamActualWithPath("CaretPosition", (locy * (MFColumns + 1) + locx).ToString(), instance.ToString()); act.AddOrUpdateReturnParamActualWithPath("X", locx.ToString(), instance.ToString()); act.AddOrUpdateReturnParamActualWithPath("Y", locy.ToString(), instance.ToString()); } } else if (MFGD.TextInstanceType == ActMainframeGetDetails.eTextInstance.InstanceN) { int k = Int32.Parse(MFGD.TextInstanceNumber); if (locy != -1 && instance == k) { act.AddOrUpdateReturnParamActual("CaretPosition", (locy * (MFColumns + 1) + locx).ToString()); act.AddOrUpdateReturnParamActual("X", locx.ToString()); act.AddOrUpdateReturnParamActual("Y", locy.ToString()); break; } } else if (MFGD.TextInstanceType == ActMainframeGetDetails.eTextInstance.AfterCaretPosition) { if (Int32.Parse(MFGD.LocateValueCalculated.ToString()) < (locy * (MFColumns + 1) + locx)) { act.AddOrUpdateReturnParamActual("CaretPosition", (locy * (MFColumns + 1) + locx).ToString()); act.AddOrUpdateReturnParamActual("X", locx.ToString()); act.AddOrUpdateReturnParamActual("Y", locy.ToString()); break; } } else { if (locy != -1) { act.AddOrUpdateReturnParamActual("CaretPosition", (locy * (MFColumns + 1) + locx).ToString()); act.AddOrUpdateReturnParamActual("X", locx.ToString()); act.AddOrUpdateReturnParamActual("Y", locy.ToString()); break; } } } if (locy != -1) { instance++; } } }
public override void RunAction(Act act) { if (act.GetType().ToString() == "GingerCore.Actions.ActScreenShot") { TakeScreenShot(act); return; } try { switch (act.GetType().ToString()) { case "GingerCore.Actions.MainFrame.ActMainframeGetDetails": ActMainframeGetDetails MFGD = (ActMainframeGetDetails)act; //todo Implement get Type and others int locx = -1; int locy = -1; switch (MFGD.DetailsToFetch) { case ActMainframeGetDetails.eDetailsToFetch.GetText: if (MFGD.LocateBy == eLocateBy.ByCaretPosition) { if (String.IsNullOrEmpty(act.ValueForDriver)) { string MFText = MFE.GetTextatPosition(Int32.Parse(MFGD.LocateValueCalculated), 50); MFText = MFText.Split().ElementAt(0).ToString(); MFGD.AddOrUpdateReturnParamActual("Value", MFText); } else { act.AddOrUpdateReturnParamActual("Value", MFE.GetTextatPosition(Int32.Parse(act.LocateValueCalculated), Int32.Parse(act.ValueForDriver))); } } else if (MFGD.LocateBy == eLocateBy.ByXY) { string XY = MFGD.LocateValueCalculated; String[] XYSeparated = XY.Split(','); int x = Int32.Parse(XYSeparated.ElementAt(0)); int y = Int32.Parse(XYSeparated.ElementAt(1)); if (x >= Coloumn || y >= Rows) { throw new Exception("X,Y out of bounds please use X/Y less than Rows/Columns configured in agent"); } if (String.IsNullOrEmpty(act.ValueForDriver)) { string MFText = MFE.GetTextatPosition(x, y, 50); MFText = MFText.Split().ElementAt(0).ToString(); MFGD.AddOrUpdateReturnParamActual("Value", MFText); } else { act.AddOrUpdateReturnParamActual("Value", MFE.GetTextatPosition(x, y, Int32.Parse(act.ValueForDriver))); } } break; case ActMainframeGetDetails.eDetailsToFetch.GetDetailsFromText: String[] MainFrameLines = MFE.screenText.Split('\n'); int instance = 1; for (int i = 0; i < MainFrameLines.Length; i++) { locx = MainFrameLines[i].IndexOf(MFGD.ValueForDriver); if (locx >= 0) { locy = i; if (MFGD.TextInstanceType == ActMainframeGetDetails.eTextInstance.AllInstance) { if (locy != -1) { act.AddOrUpdateReturnParamActualWithPath("CaretPosition", (locy * (MFColumns + 1) + locx).ToString(), instance.ToString()); act.AddOrUpdateReturnParamActualWithPath("X", locx.ToString(), instance.ToString()); act.AddOrUpdateReturnParamActualWithPath("Y", locy.ToString(), instance.ToString()); } } else if (MFGD.TextInstanceType == ActMainframeGetDetails.eTextInstance.InstanceN) { int k = Int32.Parse(MFGD.TextInstanceNumber); if (locy != -1 && instance == k) { act.AddOrUpdateReturnParamActual("CaretPosition", (locy * (MFColumns + 1) + locx).ToString()); act.AddOrUpdateReturnParamActual("X", locx.ToString()); act.AddOrUpdateReturnParamActual("Y", locy.ToString()); break; } } else if (MFGD.TextInstanceType == ActMainframeGetDetails.eTextInstance.AfterCaretPosition) { if (Int32.Parse(MFGD.LocateValueCalculated.ToString()) < (locy * (MFColumns + 1) + locx)) { act.AddOrUpdateReturnParamActual("CaretPosition", (locy * (MFColumns + 1) + locx).ToString()); act.AddOrUpdateReturnParamActual("X", locx.ToString()); act.AddOrUpdateReturnParamActual("Y", locy.ToString()); break; } } else { if (locy != -1) { act.AddOrUpdateReturnParamActual("CaretPosition", (locy * (MFColumns + 1) + locx).ToString()); act.AddOrUpdateReturnParamActual("X", locx.ToString()); act.AddOrUpdateReturnParamActual("Y", locy.ToString()); break; } } } if (locy != -1) { instance++; } } break; case ActMainframeGetDetails.eDetailsToFetch.GetAllEditableFeilds: XmlDocument XD = new XmlDocument(); XmlDeclaration dec = XD.CreateXmlDeclaration("1.0", null, null); XD.AppendChild(dec); XmlElement root = XD.CreateElement("EditableFields"); XD.AppendChild(root); string CaretValuePair = @"<?xml version='1.0' encoding='UTF-8'?><nodes>"; XMLScreen XC = MFE.GetScreenAsXML(); foreach (XMLScreenField XSF in XC.Fields) { if (XSF.Attributes.Protected == true) { continue; } string node = "<node caret=\"" + XSF.Location.position.ToString() + "\" text=\"" + XSF.Text + "\"> </node>"; CaretValuePair = CaretValuePair + node; XmlElement EditableField = XD.CreateElement("EditableField"); EditableField.SetAttribute("Caret", XSF.Location.position.ToString()); EditableField.SetAttribute("Text", XSF.Text); root.AppendChild(EditableField); } act.AddOrUpdateReturnParamActual("Fields", XD.OuterXml); break; case ActMainframeGetDetails.eDetailsToFetch.GetCurrentScreenAsXML: Open3270.TN3270.XMLScreen XMLS = MFE.GetScreenAsXML(); System.Xml.Serialization.XmlSerializer xsSubmit = new System.Xml.Serialization.XmlSerializer(typeof(Open3270.TN3270.XMLScreen)); System.IO.StringWriter sww = new System.IO.StringWriter(); System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(sww); xsSubmit.Serialize(writer, XMLS); String ScreenXML = sww.ToString(); // Your XML act.AddOrUpdateReturnParamActual("ScreenXML", ScreenXML); break; } break; case "GingerCore.Actions.MainFrame.ActMainframeSendKey": ActMainframeSendKey MFSK = (ActMainframeSendKey)act; MFE.SendKey(MFSK.KeyToSend); break; case "GingerCore.Actions.MainFrame.ActMainframeSetText": ActMainframeSetText MFST = (ActMainframeSetText)act; switch (MFST.SetTextMode) { case ActMainframeSetText.eSetTextMode.SetSingleField: if (MFST.LocateBy == eLocateBy.ByXY) { string XY = MFST.LocateValueCalculated; String[] XYSeparated = XY.Split(','); int x = Int32.Parse(XYSeparated.ElementAt(0)); int y = Int32.Parse(XYSeparated.ElementAt(1)); if (x >= Coloumn || y >= Rows) { throw new Exception("X,Y out of bounds please use X/Y less than Rows/Columns configured in agent"); } MFE.SetCaretIndex(x, y); } else { MFE.SetCaretIndex(Int32.Parse(act.LocateValueCalculated)); } MFE.SendText(act.ValueForDriver); break; case ActMainframeSetText.eSetTextMode.SetMultipleFields: if (MFST.ReloadValue) { MFST.LoadCaretValueList(); } foreach (ActInputValue AIV in MFST.CaretValueList) { MFE.SetCaretIndex(Int32.Parse(AIV.Param)); ValueExpression VE = new ValueExpression(this.Environment, this.BusinessFlow); VE.Value = AIV.Value; MFE.SendText(VE.ValueCalculated); } break; } if (MFST.SendAfterSettingText) { mDriverWindow.Refresh(); try { Thread.Sleep(DelayBwSetTextandSend * 1000); } catch { Thread.Sleep(3000); } MFE.SendKey(TnKey.Enter); } break; default: throw new Exception("Action not Implemented"); } mDriverWindow.Refresh(); } catch (Exception e) { act.Status = Amdocs.Ginger.CoreNET.Execution.eRunStatus.Failed; act.ExInfo = e.Message; } }
private void TestToOutput(SoapUIUtils soapUIUtils, Act act) { Dictionary <string, List <string> > dict = new Dictionary <string, List <string> >(); dict = soapUIUtils.RequestsAndResponds(); foreach (KeyValuePair <string, List <string> > kpr in dict) { if (!string.IsNullOrEmpty(kpr.Value[1])) { string requestQouteFixed = kpr.Value[1].Replace("\"", ""); requestQouteFixed = requestQouteFixed.Replace("\0", ""); act.AddOrUpdateReturnParamActual(kpr.Value[0] + "-Request", requestQouteFixed); } if (!string.IsNullOrEmpty(kpr.Value[2])) { string responseQouteFixed = string.Empty; //if response is JSON format then not replace double quotes if (kpr.Value[2].IndexOf("{") > -1) { responseQouteFixed = kpr.Value[2]; } else { responseQouteFixed = kpr.Value[2].Replace("\"", ""); } responseQouteFixed = responseQouteFixed.Replace("\0", ""); act.AddOrUpdateReturnParamActual(kpr.Value[0] + "-Response", responseQouteFixed); if (((ActSoapUI)act).AddXMLResponse_Value) { string fileContent = kpr.Value[2]; ObservableList <ActReturnValue> ReturnValues = null; if (APIConfigurationsDocumentParserBase.IsValidJson(fileContent)) { ReturnValues = JSONTemplateParser.ParseJSONResponseSampleIntoReturnValues(fileContent); foreach (ActReturnValue ReturnValue in ReturnValues) { act.ReturnValues.Add(ReturnValue); } } else if (APIConfigurationsDocumentParserBase.IsValidXML(fileContent)) { XmlDocument xmlDoc1 = new XmlDocument(); xmlDoc1.LoadXml(kpr.Value[2]); List <GingerCore.General.XmlNodeItem> outputTagsList1 = new List <GingerCore.General.XmlNodeItem>(); outputTagsList1 = General.GetXMLNodesItems(xmlDoc1); foreach (GingerCore.General.XmlNodeItem outputItem in outputTagsList1) { act.AddOrUpdateReturnParamActualWithPath(outputItem.param, outputItem.value, outputItem.path); } } } } if (!string.IsNullOrEmpty(kpr.Value[4])) { string messageQouteFixed = kpr.Value[4].Replace("\"", ""); messageQouteFixed = messageQouteFixed.Replace("\0", ""); act.AddOrUpdateReturnParamActual(kpr.Value[0] + "-Message", kpr.Value[4]); } if (!string.IsNullOrEmpty(kpr.Value[5])) { string propertiesQouteFixed = kpr.Value[4].Replace("\"", ""); propertiesQouteFixed = propertiesQouteFixed.Replace("\0", ""); act.AddOrUpdateReturnParamActual(kpr.Value[0] + "-Properties", kpr.Value[5]); } } Dictionary <List <string>, List <string> > dictValues = new Dictionary <List <string>, List <string> >(); dictValues = soapUIUtils.OutputParamAndValues(); foreach (KeyValuePair <List <string>, List <string> > Kpr in dictValues) { int index = 0; if (Kpr.Key.Count() != 0 && Kpr.Value.Count() != 0) { foreach (string property in Kpr.Key) { act.AddOrUpdateReturnParamActual(Kpr.Key[index], Kpr.Value[index]); index++; } } } }