Пример #1
0
        public string ExtractSelector(CodeceptAction action)
        {
            //bool isFound = false;
            string header = string.Empty;

            foreach (string head in HeaderString)
            {
                if (action.Script.StartsWith(head))
                {
                    header = head;
                    break;
                }
            }

            //var split = args.Split(new string[] { "``" }, StringSplitOptions.None);
            //step# _8.5 action.Script.Split(new string[] { ";I." }, StringSplitOptions.None);
            string[] split  = action.Script.Split(new string[] { ";I." }, StringSplitOptions.None);
            var      target = split[0];

            split  = target.Split(new string[] { ")." }, StringSplitOptions.None);
            target = split[0];

            if (target.Last() == ')')
            {
                target = target.Substring(0, target.Length - 1);
            }
            target = target.Replace(header, string.Empty).Trim();
            return(target);
        }
Пример #2
0
        private void toolStripButtonSave_Click(object sender, EventArgs e)
        {
            if (System.IO.Path.GetExtension(saveFileDialog1.FileName.ToLower()) == ".xml")
            {
                toolStripLabelSaveAs_Click(sender, e);
            }
            else
            {
                //save
                var list   = MyActions; //actionSource.List;
                var length = list.Count;
                List <CodeceptAction> myList = new List <CodeceptAction>();

                string codes = string.Empty;

                for (int i = 0; i < length; i++)
                {
                    CodeceptAction a = (CodeceptAction)list[i];
                    //myList.Add(a);
                    if (string.IsNullOrEmpty(a.Script))
                    {
                        continue;
                    }

                    var code = a.Script.Trim();

                    while (code.Last() == ';')
                    {
                        code = code.Substring(0, code.Length - 1);
                    }

                    if (code.StartsWith("say('step#"))
                    {
                        codes = codes + string.Format("I.{0};\n", code);
                    }
                    else
                    {
                        codes = codes + string.Format("I.say('step#{0}');I.{1};\n", a.OrderNo.ToString(), code);
                    }
                }

                //step# _8.4 config.GetValue("CodeceptTestTemplate");
                var codeCeptConfigPath   = FileEndPointManager.MyCodeceptTestTemplate; //config.GetValue("CodeceptTestTemplate");
                var codeCeptTestTemplate = File.ReadAllText(codeCeptConfigPath);
                codeCeptTestTemplate = codeCeptTestTemplate.Replace("##steps##", codes);

                if (File.Exists(saveFileDialog1.FileName))
                {
                    File.Delete(saveFileDialog1.FileName);
                }

                //step# _8.5 save scenario file
                File.WriteAllText(saveFileDialog1.FileName, codeCeptTestTemplate);
                //txtCaption.Text = "Dev Note Console -" + Path.GetFileNameWithoutExtension(saveFileDialog1.FileName);
                //UpdateStatus(true);
            }
        }
Пример #3
0
        // public int inputCount { get; set; }
        public override CodeceptAction Modify(CodeceptAction action)
        {
            //throw new NotImplementedException();
            bool isFound = false;

            foreach (string head in HeaderString)
            {
                if (action.Script.Contains(head))
                {
                    isFound = true;
                    break;
                }
            }

            if (isFound)
            {
                //inputCount += 1;

                var expressions = action.Script.Split(new string[] { Keywords.declareVariable }, StringSplitOptions.None);
                //I.say('DECLARE');var
                //TIP: we only allow one varible declare per action line OR we only covert the first var
                if (expressions.Length > 1)
                {
                    //X='123';I.say('END_DECLARE')";I.fillField({id:'usernamebox'}
                    var expression = expressions[1].Split(';').First();

                    //x ='123'
                    //x
                    var xName = expression.Split('=').First().Trim();
                    if (!ListOfVariables.Contains(xName))
                    {
                        ListOfVariables.Add(xName);
                    }
                    else
                    {
                        //remove declartion
                        //var1='123';I.say('END_DECLARE')";I.fillField({id:'usernamebox'}

                        action.Script = Keywords.useVariable + expressions[1];
                    }


                    //'123'
                    //var xValue = expression.Split('=').Last().Trim();
                }
            }

            return(action);
        }
Пример #4
0
        public override CodeceptAction Modify(CodeceptAction action)
        {
            if (string.IsNullOrEmpty(action.Script))
            {
                return(action);
            }


            action.Script = action.Script.Replace(";;", ";");

            if (action.Script.Last() != ';')
            {
                action.Script = action.Script + ";";
            }

            return(action);
        }
Пример #5
0
        // public int inputCount { get; set; }
        public override CodeceptAction Modify(CodeceptAction action)
        {
            //throw new NotImplementedException();
            bool isFound = false;

            foreach (string head in HeaderString)
            {
                if (action.Script.Contains(head))
                {
                    isFound = true;
                    break;
                }
            }

            if (isFound)
            {
                //inputCount += 1;

                foreach (var keyWord in HeaderString)
                {
                    var expressions = action.Script.Split(new string[] { keyWord }, StringSplitOptions.None);
                    //I.say('DECLARE');var
                    //TIP: we only allow one varible declare per action line OR we only covert the first var
                    if (expressions.Length > 1)
                    {
                        //X='123';I.say('END_DECLARE')";I.fillField({id:'usernamebox'}
                        var expression = expressions[1].Split(';').First();

                        //x ='123'
                        //x
                        var xName  = expression.Split('=').First().Trim();
                        var xValue = expression.Split('=').Last();
                        //Parameters[xName]

                        if (Parameters.ContainsKey(xName))
                        {
                            //do substitution
                            action.Script = action.Script.Replace(xValue, Parameters[xName]);
                        }
                    }
                }
            }

            return(action);
        }
Пример #6
0
        public override CodeceptAction Modify(CodeceptAction action)
        {
            //throw new NotImplementedException();
            bool isFound = false;

            foreach (string head in HeaderString)
            {
                if (action.Script.StartsWith(head))
                {
                    isFound = true;
                    break;
                }
            }

            if (isFound)
            {
                //var target =ExtractSelector(action);

                //pressKey('Enter');
                var split = action.Script.Split('\'');

                //wait for use square barcket
                var keys = split[1];

                //fillField({id:'usernamebox'}
                OriginalString = action.Script;
                var newScript = OriginalString;

                var suffix = string.Empty;
                if (keys.ToUpper().StartsWith("ENTER"))
                {
                    suffix    = string.Format("I.wait({0})", DefaultWait.ToString());
                    newScript = string.Format("{0};{1}", OriginalString, suffix);
                }

                Console.WriteLine(newScript);
                action.Script = newScript;
            }

            return(action);
        }
Пример #7
0
 public abstract CodeceptAction Modify(CodeceptAction action);
Пример #8
0
        public override CodeceptAction Modify(CodeceptAction action)
        {
            //throw new NotImplementedException();
            bool isFound = false;

            foreach (string head in HeaderString)
            {
                if (action.Script.StartsWith(head))
                {
                    isFound = true;
                    break;
                }
            }

            if (isFound)
            {
                var target = ExtractSelector(action);

                //waitForElement({id:'usernamebox'},45)
                //{id:'inputEmail1'}, '*****@*****.**'
                //var split = target.Split(new string[] { ")." }, StringSplitOptions.None);
                var split = target.Split(',');

                var sqr = split[0];
                if (sqr.StartsWith("{"))
                {
                    var sqrContent = sqr.Substring(1, sqr.Length - 2);
                    sqrContent = sqrContent.Replace(":", "=");
                    sqrContent = sqrContent.Replace("'", "\"");


                    sqrContent = "'[" + sqrContent + "]'";

                    sqr = sqrContent;
                }


                var prefix1 = string.Format("waitForElement({0},45)", split[0]);
                //var prefix1 =string.Format("waitByElement({0})",split[0]);


                //retry({ retries: 3, maxTimeout: 3000 }).click({id:'usernamebox'}
                var prefix2 = @"retry({ retries: 3, maxTimeout: 3000 })";//string.Format("retry({ retries: 3, maxTimeout: 3000 })");

                //fillField({id:'usernamebox'}
                OriginalString = action.Script;
                var newScript = string.Empty;

                if (IsSemanticLocator(target))
                {
                    newScript = string.Format("{0}.see({1});I.{2};I.wait(1);", prefix2, target, OriginalString);
                }
                else
                {
                    newScript = string.Format("{0};I.{1}.{2};I.wait(1)", prefix1, prefix2, OriginalString);
                }

                Console.WriteLine(newScript);
                action.Script = newScript;
            }

            return(action);
        }
Пример #9
0
 // public int inputCount { get; set; }
 public override CodeceptAction Modify(CodeceptAction action)
 {
     throw new NotImplementedException();
 }
Пример #10
0
 public void TestRunAsync(CodeceptAction action)
 {
     throw new NotImplementedException();
 }
Пример #11
0
        public override CodeceptAction Modify(CodeceptAction action)
        {
            //throw new NotImplementedException();
            bool isFound = false;

            foreach (string head in HeaderString)
            {
                if (action.Script.StartsWith(head))
                {
                    isFound = true;
                    break;
                }
            }

            if (isFound)
            {
                inputCount += 1;
                var target = ExtractSelector(action);

                //waitForElement({id:'usernamebox'},45)
                //{id:'inputEmail1'}, '*****@*****.**'
                //var split = target.Split(new string[] { ")." }, StringSplitOptions.None);
                var split = target.Split(',');


                var sqr = split[0];
                if (sqr.StartsWith("{"))
                {
                    var sqrContent = sqr.Substring(1, sqr.Length - 2);
                    sqrContent = sqrContent.Replace(":", "=");
                    sqrContent = sqrContent.Replace("'", "\"");


                    sqrContent = "'[" + sqrContent + "]'";

                    sqr = sqrContent;
                }


                var prefix1 = string.Format("waitForElement({0},45)", sqr);

                //retry({ retries: 3, maxTimeout: 3000 }).click({id:'usernamebox'}
                var prefix2 = @"retry({ retries: 3, maxTimeout: 3000 })";//string.Format("retry({ retries: 3, maxTimeout: 3000 })");

                //fillField({id:'usernamebox'}
                OriginalString = action.Script;
                var newScript = string.Empty;

                if (IsSemanticLocator(target))
                {
                    newScript = string.Format("{0}.see({1});I.{2};I.wait(1);", prefix2, target, OriginalString);
                }
                else
                {
                    newScript = string.Format("{0};I.{1}.{2};I.wait(1)", prefix1, prefix2, OriginalString);
                }

                Console.WriteLine(newScript);

                //add variable prefix here
                //waitForElement({id:'inputEmail1'},45);I.retry({ retries: 3, maxTimeout: 3000 })
                //.fillField
                //({id:'inputEmail1'}, '*****@*****.**')
                //; I.wait(1)

                var splitFillField = newScript.Split(new string[] { ".fillField" }, StringSplitOptions.None);
                var fillFieldLast  = splitFillField.Last();

                var splitWait      = fillFieldLast.Split(';');
                var fillFieldParam = splitWait.First();//({id:'inputEmail1'}, '*****@*****.**')

                var splitFillFieldParam = fillFieldParam.Split(new string[] { ", '" }, StringSplitOptions.None);
                if (splitFillFieldParam.Count() == 1)
                {
                    splitFillFieldParam = fillFieldParam.Split(new string[] { ",'" }, StringSplitOptions.None);
                }

                //[email protected]')
                var inputVal  = splitFillFieldParam.Last();
                var splitMore = inputVal.Split(new string[] { "'" }, StringSplitOptions.None);

                //[email protected]
                inputVal = splitMore.First();


                var inputVar = "input_" + inputCount.ToString() + "_";
                newScript = newScript.Replace("'" + inputVal + "'", inputVar);

                //step# 9 DECLARE variable interpreter
                var variablePrefix = string.Format("{0}{1} = '{2}';I.", Keywords.declareVariable, inputVar, inputVal);

                newScript     = variablePrefix + newScript;
                action.Script = newScript;
            }

            return(action);
        }
Пример #12
0
        public override CodeceptAction Modify(CodeceptAction action)
        {
            //throw new NotImplementedException();
            bool isFound = false;

            foreach (string head in HeaderString)
            {
                if (action.Script.StartsWith(head))
                {
                    isFound = true;
                    break;
                }
            }

            var JSONObj = new Dictionary <string, string>();

            if (isFound)
            {
                var target = ExtractSelector(action);

                //waitForElement({id:'usernamebox'},45)
                //{id:'inputEmail1'}, '*****@*****.**'
                //var split = target.Split(new string[] { ")." }, StringSplitOptions.None);
                var split = target.Split(',');

                //wait for use square barcket
                var sqr     = split[0];
                var prefix1 = string.Empty;


                if (sqr.StartsWith("'//"))
                {
                    prefix1 = string.Format("waitByXPath({0},5);I.wait(1)", sqr);
                }
                else if (sqr.StartsWith("{xpath:"))
                {
                    var orig = sqr;
                    sqr = target;

                    //{ xpath: "//*[@id="main - wrap"]/div[2]/div[1]/div[1]/div[2]/div[4]/div"}
                    //sqr = BaiTextFilterClassLibrary.Helper.XpathHandleQuotes(sqr); ==>  '{xpath:"//*[@id="main-wrap"]/div[2]/div[1]/div[1]/div[2]/div[4]/div"}'
                    //var JSONObj = new JavaScriptSerializer().Deserialize<Dictionary<string, string>>(sqr);

                    try
                    {
                        //JSONObj = JsonConvert.DeserializeObject<Dictionary<string, string>>(sqr);
                        JSONObj = JsonConvert.DeserializeObject <Dictionary <string, string> >(sqr);
                    }
                    catch (Exception)
                    {
                        sqr = sqr.Replace("=\"", "='");
                        sqr = sqr.Replace("\"]", "']");

                        JSONObj = JsonConvert.DeserializeObject <Dictionary <string, string> >(sqr);
                    }

                    var xpath = JSONObj["xpath"];
                    sqr = string.Format("{0}", xpath);

                    sqr = BaiTextFilterClassLibrary.Helper.XpathHandleQuotes(sqr);

                    prefix1 = string.Format("waitByXPath({0},5);I.wait(1)", sqr);


                    #region MAYBE NOT NEEDED

                    ////{"xpath":"(//input[@value=''])[2]"}, 5
                    //string[] delimeter = new string[] { "])" };

                    //var split0 = sqr.Split(delimeter, StringSplitOptions.None);

                    ////{"xpath":"(//input[@value=''])[2]
                    //var sqr1 = split0[0];
                    //delimeter = new string[] { "//" };
                    //var split1 = sqr1.Split(delimeter, StringSplitOptions.None);


                    //var sqr2 = "";

                    //if (split1.Length > 1)
                    //{
                    //    //input[@value=''])[2]
                    //    sqr2 = split1[1];
                    //    sqr = "//" + sqr2 + "]";

                    //}
                    //else
                    //{
                    //    //TIP: xpath
                    //    //{xpath:"/html/body/div[6]/div[2]/div[1]/div[1]/div[2]/div[4]/div"}
                    //    // should transform to ==>> '//html/body/div[6]/div[2]/div[1]/div[1]/div[2]/div[4]/div'

                    //   // var JSONObj = new JavaScriptSerializer().Deserialize<Dictionary<string, string>>(sqr);

                    //   // var xpath = JSONObj["xpath"];
                    //    sqr = string.Format("{0}", xpath);

                    //    //I.waitByXPath('//html/body/div[6]/div[2]/div[1]/div[1]/div[2]/div[4]/div',5)

                    //}


                    //sqr = BaiTextFilterClassLibrary.Helper.XpathHandleQuotes(sqr);

                    //prefix1 = string.Format("waitByXPath({0},5);I.wait(1)", sqr);

                    #endregion
                }
                else if (sqr.StartsWith("{"))
                {
                    var sqrContent = sqr.Substring(1, sqr.Length - 2);
                    sqrContent = sqrContent.Replace(":", "=");
                    sqrContent = sqrContent.Replace("'", "\"");


                    sqrContent = "'[" + sqrContent + "]'";
                    sqr        = sqrContent;

                    prefix1 = string.Format("waitByElement({0})", sqr);
                }
                else
                {
                    // var prefix1 =string.Format("waitForElement({0},45)",split[0]);
                    prefix1 = string.Format("waitForElement({0},45)", sqr);
                }

                //var prefix1 =string.Format("waitByElement({0})",split[0]);
                //retry({ retries: 3, maxTimeout: 3000 }).click({id:'usernamebox'}
                var prefix2 = @"retry({ retries: 3, maxTimeout: 3000 })";//string.Format("retry({ retries: 3, maxTimeout: 3000 })");

                //fillField({id:'usernamebox'}
                OriginalString = action.Script;
                var newScript = string.Empty;

                if (IsSemanticLocator(target))
                {
                    if (OriginalString.StartsWith("mouseClick("))         //mousceclick(posxy)
                    {
                        newScript = string.Format("{0}", OriginalString); //wait is handle by click codecept
                    }
                    else //click('login');
                    {
                        //newScript = string.Format("{0}.see({1});I.{2};I.wait({3});", prefix2, target, OriginalString, DefaultWait);
                        newScript = string.Format("{0};I.wait({1});", OriginalString, DefaultWait);
                    }
                }
                else
                {
                    newScript = string.Format("{0};I.{1}.{2};I.wait({3})", prefix1, prefix2, OriginalString, DefaultWait);
                }



                Console.WriteLine(newScript);
                action.Script = newScript;
            }

            return(action);
        }