Description of RecordedCodeSequence.
Наследование: IRecordedCodeSequence
Пример #1
0
        internal static IRecordedCodeSequence RecordWebItem(
            TranscriptCmdletBase cmdlet,
            IRecordedCodeSequence codeSequence,
            IWebElement resultWebElement,
            RecordedWebElement elementItem)
        {
            if (null == codeSequence)
            {
                codeSequence = new RecordedCodeSequence();
            }
            if (null == resultWebElement)
            {
                return(codeSequence);
            }

            try {
                // the previous code sequence should be added to the collection
                // any new web element must start with new code line
                if (0 < codeSequence.Items.Count)
                {
                    codeSequence.ReadyToProduceCode = true;

                    StoreCodeSequenceInCollection(
                        cmdlet,
                        RecordingCollection,
                        codeSequence);
                    codeSequence = new RecordedCodeSequence();
                }

                elementItem = new RecordedWebElement();
                elementItem.UserData.Add("Displayed", resultWebElement.Displayed);
                elementItem.UserData.Add("Enabled", resultWebElement.Enabled);
                elementItem.UserData.Add("Location", resultWebElement.Location);
                elementItem.UserData.Add("Selected", resultWebElement.Selected);
                elementItem.UserData.Add("Size", resultWebElement.Size);
                elementItem.UserData.Add("TagName", resultWebElement.TagName);
                elementItem.UserData.Add("Text", resultWebElement.Text);
                elementItem.UserData.Add("code", CodeGenGetElement);

                // temporarily or not
                //elementItem.Id = resultWebElement.GetAttribute("id");
                //elementItem.Name = resultWebElement.GetAttribute("name");
                //elementItem.ClassName = resultWebElement.GetAttribute("class");

                // CSS

                // XPath // 20121031 - not here !!!

                elementItem.Final = false;
                //elementItem.ItemType = RecordingTypes.Element;
                elementItem.Root = true;             // ??
                codeSequence.Items.Add(elementItem); // 20121031
            }
            catch (Exception eElementItem) {
                Console.WriteLine("not a fake item exception: " + eElementItem.Message);
            }

            return(codeSequence);
        }
Пример #2
0
        internal static IRecordedCodeSequence RecordCodeSequence(
            TranscriptCmdletBase cmdlet,
            List <IRecordedCodeSequence> recordingCollection,
            object resultElement,
            IRecordedCodeSequence codeSequence)
        {
            RecordedWebElement elementItem = null;
            RecordedAction     actionItem  = null;
            RecordedData       dataItem    = null;

            var resultWebElement =
                resultElement as IWebElement;
            //RecordedData resultDataCollection =
            //    resultElement as RecordedData;
            var resultDataCollection =
                resultElement as ReadOnlyCollection <object>;

            if (null == codeSequence)
            {
                codeSequence = new RecordedCodeSequence();
            }

            if (null == resultElement)
            {
                return(codeSequence);
            }
//Console.WriteLine(@"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ resultElement.GetType().Name = " + resultElement.GetType().Name);
            if (null != resultWebElement)
            {
                if (IsNotFakeWebElement(resultWebElement))
                {
                    codeSequence =
                        RecordWebItem(cmdlet, codeSequence, resultWebElement, elementItem);
                }
                else     // if (Recorder.isNotFakeWebElement(resultWebElement)) {

                {
                    codeSequence =
                        RecordActionItem(cmdlet, codeSequence, resultWebElement, actionItem);
                } // else
            }

            if (null != resultDataCollection)
            {
                Console.WriteLine(@"////////////////////////////////////////////////////////// null != resultDataCollection " + resultDataCollection.GetType().Name);
                codeSequence =
                    RecordDataItem(cmdlet, codeSequence, resultDataCollection, dataItem);
            }

            cmdlet.WriteVerbose(cmdlet, "RecordCodeSequence");

            return(codeSequence);
        }
Пример #3
0
 public void RecordWebItem_Null()
 {
     IRecordedCodeSequence result = null;
     IRecordedCodeSequence codeSequence = new RecordedCodeSequence();
     IRecordedCodeSequence expectedResult = codeSequence;
     IWebElement element = null;
     result = 
         generateWebItem(
             codeSequence,
             element,
             (new RecordedWebElement()));
     Assert.AreEqual(expectedResult, result);
 }
Пример #4
0
        internal static IRecordedCodeSequence RecordDataItem(
            TranscriptCmdletBase cmdlet,
            IRecordedCodeSequence codeSequence,
            ReadOnlyCollection <object> resultDataCollection,
            RecordedData dataItem)
        {
            if (null == codeSequence)
            {
                codeSequence = new RecordedCodeSequence();
            }

            //if (null == resultDataCollection || 0 == resultDataCollection.UserData.Count) {
            if (null == resultDataCollection || 0 == resultDataCollection.Count)
            {
                return(codeSequence);
            }

            dataItem = new RecordedData();

//int dictionariesCounter = 0;

            var keyKey   = string.Empty;
            var keyValue = string.Empty;

            //codeSequence.Items.Add(resultDataCollection);
            foreach (Dictionary <string, object> data in resultDataCollection)
            {
                try {
                    keyKey = data["key"].ToString();
                } catch {}
                try {
                    if (string.Empty != keyKey)
                    {
                        dataItem.UserData.Add(keyKey, data["value"]);
                    }

                    keyKey   = string.Empty;
                    keyValue = string.Empty;
                } catch {}
            }

            codeSequence.Items.Add(dataItem);

            if (codeSequence.ContainsDataItem())
            {
                codeSequence.ReadyToProduceCode = true;
            }

            return(codeSequence);
        }
 public void CheckCodeSequenceNovelty_RecordingCollection_Null_CodeSequence_Empty()
 {
     bool result = false;
     bool expectedResult = false;
     TranscriptCmdletBase cmdlet = new TranscriptCmdletBase();
     Recorder.RecordingCollection = null;
     IRecordedCodeSequence codeSequence = new RecordedCodeSequence();
     result = 
         Recorder.CheckCodeSequenceNovelty(
             cmdlet,
             Recorder.RecordingCollection,
             codeSequence);
     Assert.AreEqual(expectedResult, result);
 }
Пример #6
0
        public void RecordDataItem_DataCollection_Null()
        {
            IRecordedCodeSequence result = null;
            IRecordedCodeSequence codeSequence = new RecordedCodeSequence();

            ReadOnlyCollection<object> dataCollection = null;
            IRecordedCodeSequence expectedResult = codeSequence;
            result = 
                generateDataItem(
                    codeSequence,
                    dataCollection,
                    (new RecordedData()));
            Assert.AreEqual(expectedResult, result);
        }
        public void RecordCodeSequency_Non_Empty_CodeSequence_RecordedAction()
        {
            IRecordedCodeSequence codeSequence =
                new RecordedCodeSequence();
            codeSequence.Items.Add((new RecordedAction()));
            generateSequence(
                (new TranscriptCmdletBase()),
                (new System.Collections.Generic.List<IRecordedCodeSequence>()),
                codeSequence,
                (new FakeWebElement("recclicked", string.Empty)),
                null);

            Assert.AreEqual(
                Recorder.codeGenElementClick,
                ((RecordedAction)Recorder.recordingCollection[Recorder.recordingCollection.Count - 1].Items[codeSequence.Items.Count - 1]).UserData["code"]);  // ?
        }
        public void Collection_Null()
        {
            System.Collections.Generic.List<IRecordedCodeSequence> recordings = null;
            IRecordedCodeSequence codeSequence = new RecordedCodeSequence();
            
            Recorder.StoreCodeSequenceInCollection(
                (new TranscriptCmdletBase()),
                recordings,
                codeSequence);
            

            //Assert.AreEqual(expectedResult, result.Items.Count);
//            Assert.AreEqual(
//                expectedResult,
//                ((RecordedData)Recorder.recordingCollection[Recorder.recordingCollection.Count - 1].Items[
//                    Recorder.recordingCollection[Recorder.recordingCollection.Count - 1].Items.Count - 1]).UserData["code"]);
            Assert.Fail("not implemented");
        }
Пример #9
0
        internal static IRecordedCodeSequence RecordWebItem(
            TranscriptCmdletBase cmdlet,
            IRecordedCodeSequence codeSequence, 
            IWebElement resultWebElement, 
            RecordedWebElement elementItem)
        {
            
            if (null == codeSequence) {
                codeSequence = new RecordedCodeSequence();
            }
            if (null == resultWebElement) {
                return codeSequence;
            }
            
            try {
                
                // the previous code sequence should be added to the collection
                // any new web element must start with new code line
                if (0 < codeSequence.Items.Count) {
                    
                    codeSequence.ReadyToProduceCode = true;
                    
                    Recorder.StoreCodeSequenceInCollection(
                        cmdlet,
                        recordingCollection,
                        codeSequence);
                    codeSequence = new RecordedCodeSequence();
                }

                elementItem = new RecordedWebElement();
                elementItem.UserData.Add("Displayed", resultWebElement.Displayed);
                elementItem.UserData.Add("Enabled", resultWebElement.Enabled);
                elementItem.UserData.Add("Location", resultWebElement.Location);
                elementItem.UserData.Add("Selected", resultWebElement.Selected);
                elementItem.UserData.Add("Size", resultWebElement.Size);
                elementItem.UserData.Add("TagName", resultWebElement.TagName);
                elementItem.UserData.Add("Text", resultWebElement.Text);
                elementItem.UserData.Add("code", codeGenGetElement);
                    
                    // temporarily or not
                    //elementItem.Id = resultWebElement.GetAttribute("id");
                    //elementItem.Name = resultWebElement.GetAttribute("name");
                    //elementItem.ClassName = resultWebElement.GetAttribute("class");
                    
                    // CSS
                    
                    // XPath // 20121031 - not here !!!

                elementItem.Final = false;
                    //elementItem.ItemType = RecordingTypes.Element;
                elementItem.Root = true; // ??
                codeSequence.Items.Add(elementItem); // 20121031

            }
            catch (Exception eElementItem) {
Console.WriteLine("not a fake item exception: " + eElementItem.Message);
            }
            
            return codeSequence;
        }
Пример #10
0
        internal static IRecordedCodeSequence RecordActionItem(
            TranscriptCmdletBase cmdlet, 
            IRecordedCodeSequence codeSequence, 
            IWebElement resultWebElement, 
            RecordedAction actionItem)
        {
            if (null == codeSequence) {
                codeSequence = new RecordedCodeSequence();
            }
            if (null == resultWebElement) {
                return codeSequence;
            }
            
            actionItem = new RecordedAction();
            string elementId = string.Empty;
            string elementName = string.Empty;
            string elementClass = string.Empty;
            string elementTagName = string.Empty;
            string elementText = string.Empty;
            
            try {
            
                switch (resultWebElement.TagName) {
                    case Recorder.constAuxElementClicked:
                        actionItem.UserData.Add("code", codeGenElementClick);
                        break;
                        
#region temporaly commented
//                            case Recorder.constAuxElementData:
//                                try { elementId = resultWebElement.GetAttribute("id"); } catch {}
//                                try { elementName = resultWebElement.GetAttribute("name"); } catch {}
//                                try { elementClass = resultWebElement.GetAttribute("class"); } catch {}
//                                try { elementTagName = resultWebElement.TagName; } catch {}
//                                try { elementText = resultWebElement.Text; } catch {}
//                                if (string.Empty != elementId && "null" != elementId) {
//                                    actionItem.UserData.Add("code", codeGenIdParameter + elementId + "'");
//                                    actionItem.UserData.Add("comment1", codeGenNameComment + elementName + "'");
//                                    actionItem.UserData.Add("comment2", codeGenClassComment + elementClass + "'");
//                                    actionItem.UserData.Add("comment3", codeGenTagParameter + elementTagName + "'");
////    Console.WriteLine("\"code\" added 2");
//                                } else if (string.Empty != elementName && "null" != elementName) {
//                                    actionItem.UserData.Add("code", codeGenNameParameter + elementName + "'");
//                                    actionItem.UserData.Add("comment1", codeGenClassComment + elementClass + "'");
//                                    actionItem.UserData.Add("comment2", codeGenTagParameter + elementTagName + "'");
////    Console.WriteLine("\"code\" added 3");
//                                } else if (string.Empty != elementClass && "null" != elementClass) {
//                                    actionItem.UserData.Add("code", codeGenClassParameter + elementClass + "'");
//                                    actionItem.UserData.Add("comment1", codeGenTagParameter + elementTagName + "'");
////    Console.WriteLine("\"code\" added 4");
//                                } else if (string.Empty != elementTagName && "null" != elementTagName) {
//                                    actionItem.UserData.Add("code", codeGenTagParameter + elementTagName + "'");
//                                }
//                                break;
//                    case Recorder.constAuxElementSelected:
//                        actionItem.UserData.Add(@"code", @" | Invoke-SeWebElementClick");
//                        break;
#endregion temporaly commented

                    case Recorder.constAuxElementTypedIn:
                        string typedInData = string.Empty;
                        if (null != (typedInData = resultWebElement.GetAttribute("text"))) {
                            
                            // ??
                            
                        } else if (null != (typedInData = resultWebElement.GetAttribute("value"))) {
                            
                            // ??
                        }
                        actionItem.UserData.Add("code", @" | Set-SeWebElementKeys '" + typedInData + "'");
                        break;
                    case Recorder.constAuxElementSelected:
                        // TBD
                        break;
                    case Recorder.constAuxElementData:
                        // nothing to do
                        break;
                }
            }
            catch (Exception eActionItem) {
Console.WriteLine("a fake item exception: " + eActionItem.Message);
            }
            
            // ??
            actionItem.Final = true;
            //
            
            if (codeSequence.ContainsDataItem()) {
                codeSequence.ReadyToProduceCode = true;
            }

            try {
                if (0 == codeSequence.Items.Count) {

                    codeSequence.Items.Add(actionItem);
                } else if (null == (codeSequence.Items[codeSequence.Items.Count - 1] as IRecordedActionItem)) {

                    codeSequence.Items.Add(actionItem);
                } else if (null != ((IRecordedActionItem)codeSequence.Items[codeSequence.Items.Count - 1]).UserData) {
                    if (actionItem.UserData["code"] !=
                        ((IRecordedActionItem)codeSequence.Items[codeSequence.Items.Count - 1]).UserData["code"]) {

                        codeSequence.Items.Add(actionItem);
                    }
                }
            }
            catch (Exception eEliminatingDuplication) {

                codeSequence.Items.Add(actionItem); // ??
            }

            return codeSequence;
        }
Пример #11
0
        public static void RecordActions(TranscriptCmdletBase cmdlet, IJSRecorder jsRecorder, RecorderLanguages languageCode) //, bool waitForElement)
        {
            System.DateTime startTime = System.DateTime.Now;

            recordingCollection = 
                new System.Collections.Generic.List<IRecordedCodeSequence>();
            IRecordedCodeSequence codeSequence =
                new RecordedCodeSequence();
            string codeString = string.Empty;

            ReadOnlyCollection<string> currentWindowHandles =
                //CurrentData.CurrentWebDriver.WindowHandles;
                new ReadOnlyCollection<string>((new System.Collections.Generic.List<string>()));

            if (null != CurrentData.CurrentWebDriver &&
                null != CurrentData.CurrentWebDriver.WindowHandles) {

                currentWindowHandles = CurrentData.CurrentWebDriver.WindowHandles;
            }

            do {

                jsRecorder.MakeJSInjection(cmdlet);

                try {

                    var scriptResults = jsRecorder.GetRecordedResults();
                        
                    if (null != scriptResults) { // && scriptResults is object[] && 0 < ((object[])scriptResults).Length) {
                        foreach (var singleResult in scriptResults) {

                            codeSequence =
                                Recorder.RecordCodeSequence(
                                    cmdlet,
                                    recordingCollection,
                                    singleResult,
                                    codeSequence);

                            if (Recorder.CodeSequenceCompleted) {

                                Recorder.NotifyCodeGathered();
                                
                                codeString =
                                    Recorder.ConvertCodeSequenceToCode(
                                        codeSequence,
                                        selectLanguage(languageCode),
                                        codeString);
Console.WriteLine("codeString:");
Console.WriteLine(codeString);
                                Recorder.CodeSequenceCompleted = false;
                            }
                            
                            if (null != (singleResult as IWebElement)) {

                                IWebElement resultElement = 
                                    singleResult as IWebElement;

                                if (Recorder.isNotFakeWebElement(resultElement)) {
                                    cmdlet.WriteVerbose(cmdlet, "element is not a fake");

                                    if (cmdlet.PassThru) {

                                        cmdlet.WriteVerbose(cmdlet, "outputting the object");
                                        cmdlet.WriteObject(cmdlet, resultElement);
                                        
                                    } else if (Preferences.Highlight) {

                                        cmdlet.WriteVerbose(cmdlet, "highlighting the object");
                                        SeHelper.Highlight(resultElement);
                                        
                                    }
                                } 
                            } 
#region commented 20101031
//                            else if (null != (singleResult as ReadOnlyCollection<object>)){
////Console.WriteLine("0010: singleResult type is " + singleResult.GetType().Name);
//                                RecordedData recData = new RecordedData();
//                                ReadOnlyCollection<object> elementData = singleResult as ReadOnlyCollection<object>;
////Console.WriteLine("0012: Count = " + elementData.Count.ToString());
//
////try { Console.WriteLine("000001: " + elementData); } catch {}
////try { cmdlet.WriteObject(cmdlet, "000002: " + elementData); } catch {}
////try { Console.WriteLine("000003: " + elementData[0]); } catch {}
////try { cmdlet.WriteObject("000004: " + elementData[0]); } catch {}
////if (0 < elementData.Count) {
////    foreach (var item1 in elementData) {
////        cmdlet.WriteObject(cmdlet, item1.GetType().Name);
////        cmdlet.WriteObject(cmdlet, item1);
////    }
////}
//
////                                Dictionary<string, object> elementData2 = singleResult as Dictionary<string, object>;
////if (null != elementData2) {
////    Console.WriteLine("0012-2: Count = " + elementData2.Keys.Count.ToString());
////                                foreach (KeyValuePair<string, object> elementDataItem in elementData) {
////    Console.WriteLine("elementDataItem[elementDataItem.Keys[]] = " + elementDataItem.Key + "\t" + elementDataItem.Value.ToString());
////                                }
////}
////                                foreach (var elementDataItem in elementData) {
////Console.WriteLine("0015");
////                                        //recData.UserData.Add(elementData.
////                                    Console.WriteLine(elementDataItem);
////                                }
//                                //}
//                            } 
#endregion commented 20101031
                            else {

                                cmdlet.WriteObject(cmdlet, "singleResult is not IWebElement");
                                cmdlet.WriteObject(cmdlet, "else: " + singleResult);
                                //cmdlet.WriteObject(cmdlet, singleResult);
                                
                                
                            }
                        } // foreach (var singleResult in scriptResults) {
                    } // if (null != scriptResults) {
                }
                catch (Exception eRec) {
                    Console.WriteLine(eRec.Message);
                }
                
#region commented - the previous version
//                ReadOnlyCollection<IWebElement> scriptResult = null;
//                //System.Collections.ArrayList scriptResultOther = null;
//                object[] scriptResultOther = null;
//                
//                try {
//                    var scriptResultUndefined = 
//                        ((IJavaScriptExecutor)CurrentData.CurrentWebDriver).ExecuteScript(
//                            JSRecorder.constRecorderGetElement,
//                            (new string[] { string.Empty } ));
////                        (ReadOnlyCollection<IWebElement>)((IJavaScriptExecutor)CurrentData.CurrentWebDriver).ExecuteScript(
////                            JSRecorder.constRecorderGetElement,
////                            (new string[] { string.Empty } ));
//                    
//                    scriptResult = scriptResultUndefined as ReadOnlyCollection<IWebElement>;
//                    scriptResultOther = scriptResultUndefined as object[];
//                    
//                    if (null == scriptResult && null == scriptResultOther ) {
//                        cmdlet.WriteVerbose(cmdlet, "scriptResult == null");
//                    } else {
//                        cmdlet.WriteVerbose(cmdlet, "scriptResult != null");
//                        if (null != scriptResult && 0 == scriptResult.Count) {
//                            cmdlet.WriteVerbose(cmdlet, "scriptResult.Count == 0");
//                        } else if (null != scriptResultOther && 0 == scriptResultOther.Length) {
//                            cmdlet.WriteVerbose(cmdlet, "scriptResultOther.Count == 0");
//                        } else {
//                            cmdlet.WriteVerbose(cmdlet, "scriptResult.Count == " + scriptResult.Count.ToString());
//                            
//                            foreach (IWebElement resultElement in scriptResult) {
//                                codeSequence =
//                                    Recorder.RecordCodeSequence(
//                                        cmdlet,
//                                        recordingCollection,
//                                        resultElement,
//                                        codeSequence);
//
//                                if (Recorder.isNotFakeWebElement(resultElement)) {
//                                    cmdlet.WriteVerbose(cmdlet, "element is not a fake");
//
//                                    if (cmdlet.PassThru) {
//                                        
//                                        cmdlet.WriteVerbose(cmdlet, "outputting the object");
//                                        cmdlet.WriteObject(cmdlet, resultElement);
//                                        
//                                    } else if (Preferences.Highlight) {
//                                        
//                                        cmdlet.WriteVerbose(cmdlet, "highlighting the object");
//                                        SeHelper.Highlight(resultElement);
//                                        
//                                    }
//                                } 
//                            }
//                            
//                            // 20121012
//                            scriptResult = null; // ??
//                        }
//                    }
//                }
//                catch (Exception eRecording) {
//Console.WriteLine("eRecording: " + eRecording.Message);
//                    if (eRecording.Message.Contains("Element does not exist in cache")) {
//                        CurrentData.CurrentWebDriver.Navigate().Refresh();
//                    }
//                }
//                //
//                //
//                //
//                //
#endregion commented - the previous version
                
                cmdlet.WriteVerbose(cmdlet, "startTime = " + startTime.ToString());
                
                if ((System.DateTime.Now - startTime).TotalSeconds > 
                    (cmdlet.Timeout / 1000) &&
                    cmdlet.Wait) {
                    cmdlet.WriteVerbose(cmdlet, "Time spent: " + (System.DateTime.Now - startTime).TotalSeconds + " seconds");
                    
                    cmdlet.Wait = false;
                }
                
                Recorder.SleepAndRunScriptBlocks(cmdlet);
                
                /*
                if (Preferences.TranscriptCleanRecordedDuringSleep) {
                    SeHelper.CleanRecordedDuringSleep(cmdlet);
                }
                */
               
               goToNewlyOpenedWindowhandle(currentWindowHandles);
               

            } while (cmdlet.Wait);
            
            //SeHelper.ExitRecording(cmdlet);
            
            // store the last code sequence
            Recorder.StoreCodeSequenceInCollection(
                cmdlet,
                Recorder.recordingCollection,
                codeSequence);
            
        }
Пример #12
0
        internal static IRecordedCodeSequence RecordCodeSequence(
            TranscriptCmdletBase cmdlet,
            System.Collections.Generic.List<IRecordedCodeSequence> recordingCollection,
            object resultElement,
            IRecordedCodeSequence codeSequence)
        {
            RecordedWebElement elementItem = null;
            RecordedAction actionItem = null;
            RecordedData dataItem = null;
            
            IWebElement resultWebElement =
                resultElement as IWebElement;
            //RecordedData resultDataCollection =
            //    resultElement as RecordedData;
            ReadOnlyCollection<object> resultDataCollection =
                resultElement as ReadOnlyCollection<object>;
            
            if (null == codeSequence) {
                
                codeSequence = new RecordedCodeSequence();
            }
            
            if (null == resultElement) {
                
                return codeSequence;
            }
//Console.WriteLine(@"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ resultElement.GetType().Name = " + resultElement.GetType().Name);
            if (null != resultWebElement) {

                if (Recorder.isNotFakeWebElement(resultWebElement)) {

                    codeSequence =
                        Recorder.RecordWebItem(cmdlet, codeSequence, resultWebElement, elementItem);
    
                } else { // if (Recorder.isNotFakeWebElement(resultWebElement)) {

                    codeSequence =
                        Recorder.RecordActionItem(cmdlet, codeSequence, resultWebElement, actionItem);
    
                } // else
                
                
            }

            if (null != resultDataCollection) {
Console.WriteLine(@"////////////////////////////////////////////////////////// null != resultDataCollection " + resultDataCollection.GetType().Name);
                codeSequence =
                    Recorder.RecordDataItem(cmdlet, codeSequence, resultDataCollection, dataItem);
            }

            cmdlet.WriteVerbose(cmdlet, "RecordCodeSequence");

            return codeSequence;
        }
 public void CheckCodeSequenceNovelty_CodeSequence_Duplicated()
 {
     bool result = false;
     bool expectedResult = false;
     TranscriptCmdletBase cmdlet = new TranscriptCmdletBase();
     Recorder.RecordingCollection =
         new System.Collections.Generic.List<IRecordedCodeSequence>();
     IRecordedCodeSequence codeSequence = new RecordedCodeSequence();
     RecordedWebElement webElement = new RecordedWebElement();
     webElement.TagName = "button";
     codeSequence.Items.Add(webElement);
     RecordedAction action = new RecordedAction();
     action.UserData.Add("code", Recorder.CodeGenElementClick);
     codeSequence.Items.Add(action);
     
     Recorder.RecordingCollection.Add(codeSequence);
     
     // a new code sequence
     codeSequence = new RecordedCodeSequence();
     webElement = new RecordedWebElement();
     webElement.TagName = "button";
     codeSequence.Items.Add(webElement);
     action = new RecordedAction();
     action.UserData.Add("code", Recorder.CodeGenElementClick);
     codeSequence.Items.Add(action);
     
     result = 
         Recorder.CheckCodeSequenceNovelty(
             cmdlet,
             Recorder.RecordingCollection,
             codeSequence);
     Assert.AreEqual(expectedResult, result);
 }
Пример #14
0
        internal static IRecordedCodeSequence RecordActionItem(
            TranscriptCmdletBase cmdlet,
            IRecordedCodeSequence codeSequence,
            IWebElement resultWebElement,
            RecordedAction actionItem)
        {
            if (null == codeSequence)
            {
                codeSequence = new RecordedCodeSequence();
            }
            if (null == resultWebElement)
            {
                return(codeSequence);
            }

            actionItem = new RecordedAction();
            var elementId      = string.Empty;
            var elementName    = string.Empty;
            var elementClass   = string.Empty;
            var elementTagName = string.Empty;
            var elementText    = string.Empty;

            try {
                switch (resultWebElement.TagName)
                {
                case ConstAuxElementClicked:
                    actionItem.UserData.Add("code", CodeGenElementClick);
                    break;

                    #region temporaly commented
//                            case Recorder.constAuxElementData:
//                                try { elementId = resultWebElement.GetAttribute("id"); } catch {}
//                                try { elementName = resultWebElement.GetAttribute("name"); } catch {}
//                                try { elementClass = resultWebElement.GetAttribute("class"); } catch {}
//                                try { elementTagName = resultWebElement.TagName; } catch {}
//                                try { elementText = resultWebElement.Text; } catch {}
//                                if (string.Empty != elementId && "null" != elementId) {
//                                    actionItem.UserData.Add("code", codeGenIdParameter + elementId + "'");
//                                    actionItem.UserData.Add("comment1", codeGenNameComment + elementName + "'");
//                                    actionItem.UserData.Add("comment2", codeGenClassComment + elementClass + "'");
//                                    actionItem.UserData.Add("comment3", codeGenTagParameter + elementTagName + "'");
////    Console.WriteLine("\"code\" added 2");
//                                } else if (string.Empty != elementName && "null" != elementName) {
//                                    actionItem.UserData.Add("code", codeGenNameParameter + elementName + "'");
//                                    actionItem.UserData.Add("comment1", codeGenClassComment + elementClass + "'");
//                                    actionItem.UserData.Add("comment2", codeGenTagParameter + elementTagName + "'");
////    Console.WriteLine("\"code\" added 3");
//                                } else if (string.Empty != elementClass && "null" != elementClass) {
//                                    actionItem.UserData.Add("code", codeGenClassParameter + elementClass + "'");
//                                    actionItem.UserData.Add("comment1", codeGenTagParameter + elementTagName + "'");
////    Console.WriteLine("\"code\" added 4");
//                                } else if (string.Empty != elementTagName && "null" != elementTagName) {
//                                    actionItem.UserData.Add("code", codeGenTagParameter + elementTagName + "'");
//                                }
//                                break;
//                    case Recorder.constAuxElementSelected:
//                        actionItem.UserData.Add(@"code", @" | Invoke-SeWebElementClick");
//                        break;
                    #endregion temporaly commented

                case ConstAuxElementTypedIn:
                    var typedInData = string.Empty;
                    if (null != (typedInData = resultWebElement.GetAttribute("text")))
                    {
                        // ??
                    }
                    else if (null != (typedInData = resultWebElement.GetAttribute("value")))
                    {
                        // ??
                    }
                    actionItem.UserData.Add("code", @" | Set-SeWebElementKeys '" + typedInData + "'");
                    break;

                case ConstAuxElementSelected:
                    // TBD
                    break;

                case ConstAuxElementData:
                    // nothing to do
                    break;
                }
            }
            catch (Exception eActionItem) {
                Console.WriteLine("a fake item exception: " + eActionItem.Message);
            }

            // ??
            actionItem.Final = true;
            //

            if (codeSequence.ContainsDataItem())
            {
                codeSequence.ReadyToProduceCode = true;
            }

            try {
                if (0 == codeSequence.Items.Count)
                {
                    codeSequence.Items.Add(actionItem);
                }
                else if (null == (codeSequence.Items[codeSequence.Items.Count - 1] as IRecordedActionItem))
                {
                    codeSequence.Items.Add(actionItem);
                }
                else if (null != ((IRecordedActionItem)codeSequence.Items[codeSequence.Items.Count - 1]).UserData)
                {
                    if (actionItem.UserData["code"] !=
                        ((IRecordedActionItem)codeSequence.Items[codeSequence.Items.Count - 1]).UserData["code"])
                    {
                        codeSequence.Items.Add(actionItem);
                    }
                }
            }
            catch (Exception eEliminatingDuplication) {
                codeSequence.Items.Add(actionItem); // ??
            }

            return(codeSequence);
        }
 public void CheckCodeSequenceNovelty_RecordingCollection_Empty_CodeSequence_Non_Empty()
 {
     bool result = false;
     bool expectedResult = true;
     TranscriptCmdletBase cmdlet = new TranscriptCmdletBase();
     Recorder.RecordingCollection =
         new System.Collections.Generic.List<IRecordedCodeSequence>();
     IRecordedCodeSequence codeSequence = new RecordedCodeSequence();
     codeSequence.Items.Add((new RecordedAction()));
     result = 
         Recorder.CheckCodeSequenceNovelty(
             cmdlet,
             Recorder.RecordingCollection,
             codeSequence);
     Assert.AreEqual(expectedResult, result);
 }
Пример #16
0
 public void RecordDataItem_DataCollection_Not_Empty()
 {
     IRecordedCodeSequence result = null;
     IRecordedCodeSequence codeSequence = new RecordedCodeSequence();
     
     System.Collections.Generic.List<object> list = 
         new System.Collections.Generic.List<object>();
     Dictionary<string, object> dict1 = new Dictionary<string, object>();
     dict1.Add("key1", "data1");
     list.Add(dict1);
     Dictionary<string, object> dict2 = new Dictionary<string, object>();
     dict2.Add("key2", "data2");
     list.Add(dict2);
     ReadOnlyCollection<object> dataCollection =
         new ReadOnlyCollection<object>(list);
     
     result = 
         generateDataItem(
             codeSequence,
             dataCollection,
             (new RecordedData()));
 }
Пример #17
0
        public static void RecordActions(TranscriptCmdletBase cmdlet, IJsRecorder jsRecorder, RecorderLanguages languageCode) //, bool waitForElement)
        {
            var startTime = DateTime.Now;

            RecordingCollection =
                new List <IRecordedCodeSequence>();
            IRecordedCodeSequence codeSequence =
                new RecordedCodeSequence();
            var codeString = string.Empty;

            var currentWindowHandles =
                //CurrentData.CurrentWebDriver.WindowHandles;
                new ReadOnlyCollection <string>((new List <string>()));

            if (null != CurrentData.CurrentWebDriver &&
                null != CurrentData.CurrentWebDriver.WindowHandles)
            {
                currentWindowHandles = CurrentData.CurrentWebDriver.WindowHandles;
            }

            do
            {
                jsRecorder.MakeJsInjection(cmdlet);

                try {
                    var scriptResults = jsRecorder.GetRecordedResults();

                    if (null != scriptResults)   // && scriptResults is object[] && 0 < ((object[])scriptResults).Length) {
                    {
                        foreach (var singleResult in scriptResults)
                        {
                            codeSequence =
                                RecordCodeSequence(
                                    cmdlet,
                                    RecordingCollection,
                                    singleResult,
                                    codeSequence);

                            if (CodeSequenceCompleted)
                            {
                                NotifyCodeGathered();

                                codeString =
                                    ConvertCodeSequenceToCode(
                                        codeSequence,
                                        SelectLanguage(languageCode),
                                        codeString);
                                Console.WriteLine("codeString:");
                                Console.WriteLine(codeString);
                                CodeSequenceCompleted = false;
                            }

                            if (null != (singleResult as IWebElement))
                            {
                                var resultElement =
                                    singleResult as IWebElement;

                                if (IsNotFakeWebElement(resultElement))
                                {
                                    cmdlet.WriteVerbose(cmdlet, "element is not a fake");

                                    if (cmdlet.PassThru)
                                    {
                                        cmdlet.WriteVerbose(cmdlet, "outputting the object");
                                        cmdlet.WriteObject(cmdlet, resultElement);
                                    }
                                    else if (Preferences.Highlight)
                                    {
                                        cmdlet.WriteVerbose(cmdlet, "highlighting the object");
                                        SeHelper.Highlight(resultElement);
                                    }
                                }
                            }
                            #region commented 20101031
//                            else if (null != (singleResult as ReadOnlyCollection<object>)){
////Console.WriteLine("0010: singleResult type is " + singleResult.GetType().Name);
//                                RecordedData recData = new RecordedData();
//                                ReadOnlyCollection<object> elementData = singleResult as ReadOnlyCollection<object>;
////Console.WriteLine("0012: Count = " + elementData.Count.ToString());
//
////try { Console.WriteLine("000001: " + elementData); } catch {}
////try { cmdlet.WriteObject(cmdlet, "000002: " + elementData); } catch {}
////try { Console.WriteLine("000003: " + elementData[0]); } catch {}
////try { cmdlet.WriteObject("000004: " + elementData[0]); } catch {}
////if (0 < elementData.Count) {
////    foreach (var item1 in elementData) {
////        cmdlet.WriteObject(cmdlet, item1.GetType().Name);
////        cmdlet.WriteObject(cmdlet, item1);
////    }
////}
//
////                                Dictionary<string, object> elementData2 = singleResult as Dictionary<string, object>;
////if (null != elementData2) {
////    Console.WriteLine("0012-2: Count = " + elementData2.Keys.Count.ToString());
////                                foreach (KeyValuePair<string, object> elementDataItem in elementData) {
////    Console.WriteLine("elementDataItem[elementDataItem.Keys[]] = " + elementDataItem.Key + "\t" + elementDataItem.Value.ToString());
////                                }
////}
////                                foreach (var elementDataItem in elementData) {
////Console.WriteLine("0015");
////                                        //recData.UserData.Add(elementData.
////                                    Console.WriteLine(elementDataItem);
////                                }
//                                //}
//                            }
                            #endregion commented 20101031
                            else
                            {
                                cmdlet.WriteObject(cmdlet, "singleResult is not IWebElement");
                                cmdlet.WriteObject(cmdlet, "else: " + singleResult);
                                //cmdlet.WriteObject(cmdlet, singleResult);
                            }
                        } // foreach (var singleResult in scriptResults) {
                    }     // if (null != scriptResults) {
                }
                catch (Exception eRec) {
                    Console.WriteLine(eRec.Message);
                }

                #region commented - the previous version
//                ReadOnlyCollection<IWebElement> scriptResult = null;
//                //System.Collections.ArrayList scriptResultOther = null;
//                object[] scriptResultOther = null;
//
//                try {
//                    var scriptResultUndefined =
//                        ((IJavaScriptExecutor)CurrentData.CurrentWebDriver).ExecuteScript(
//                            JSRecorder.constRecorderGetElement,
//                            (new string[] { string.Empty } ));
////                        (ReadOnlyCollection<IWebElement>)((IJavaScriptExecutor)CurrentData.CurrentWebDriver).ExecuteScript(
////                            JSRecorder.constRecorderGetElement,
////                            (new string[] { string.Empty } ));
//
//                    scriptResult = scriptResultUndefined as ReadOnlyCollection<IWebElement>;
//                    scriptResultOther = scriptResultUndefined as object[];
//
//                    if (null == scriptResult && null == scriptResultOther ) {
//                        cmdlet.WriteVerbose(cmdlet, "scriptResult == null");
//                    } else {
//                        cmdlet.WriteVerbose(cmdlet, "scriptResult != null");
//                        if (null != scriptResult && 0 == scriptResult.Count) {
//                            cmdlet.WriteVerbose(cmdlet, "scriptResult.Count == 0");
//                        } else if (null != scriptResultOther && 0 == scriptResultOther.Length) {
//                            cmdlet.WriteVerbose(cmdlet, "scriptResultOther.Count == 0");
//                        } else {
//                            cmdlet.WriteVerbose(cmdlet, "scriptResult.Count == " + scriptResult.Count.ToString());
//
//                            foreach (IWebElement resultElement in scriptResult) {
//                                codeSequence =
//                                    Recorder.RecordCodeSequence(
//                                        cmdlet,
//                                        recordingCollection,
//                                        resultElement,
//                                        codeSequence);
//
//                                if (Recorder.isNotFakeWebElement(resultElement)) {
//                                    cmdlet.WriteVerbose(cmdlet, "element is not a fake");
//
//                                    if (cmdlet.PassThru) {
//
//                                        cmdlet.WriteVerbose(cmdlet, "outputting the object");
//                                        cmdlet.WriteObject(cmdlet, resultElement);
//
//                                    } else if (Preferences.Highlight) {
//
//                                        cmdlet.WriteVerbose(cmdlet, "highlighting the object");
//                                        SeHelper.Highlight(resultElement);
//
//                                    }
//                                }
//                            }
//
//                            // 20121012
//                            scriptResult = null; // ??
//                        }
//                    }
//                }
//                catch (Exception eRecording) {
//Console.WriteLine("eRecording: " + eRecording.Message);
//                    if (eRecording.Message.Contains("Element does not exist in cache")) {
//                        CurrentData.CurrentWebDriver.Navigate().Refresh();
//                    }
//                }
//                //
//                //
//                //
//                //
                #endregion commented - the previous version

                cmdlet.WriteVerbose(cmdlet, "startTime = " + startTime.ToString());

                if ((DateTime.Now - startTime).TotalSeconds >
                    (cmdlet.Timeout / 1000) &&
                    cmdlet.Wait)
                {
                    cmdlet.WriteVerbose(cmdlet, "Time spent: " + (DateTime.Now - startTime).TotalSeconds + " seconds");

                    cmdlet.Wait = false;
                }

                SleepAndRunScriptBlocks(cmdlet);

                /*
                 * if (Preferences.TranscriptCleanRecordedDuringSleep) {
                 *  SeHelper.CleanRecordedDuringSleep(cmdlet);
                 * }
                 */

                GoToNewlyOpenedWindowhandle(currentWindowHandles);
            } while (cmdlet.Wait);

            //SeHelper.ExitRecording(cmdlet);

            // store the last code sequence
            StoreCodeSequenceInCollection(
                cmdlet,
                RecordingCollection,
                codeSequence);
        }
Пример #18
0
        internal static IRecordedCodeSequence RecordDataItem(
            TranscriptCmdletBase cmdlet,
            IRecordedCodeSequence codeSequence, 
            ReadOnlyCollection<object> resultDataCollection,
            RecordedData dataItem)
        {
            
            if (null == codeSequence) {
                codeSequence = new RecordedCodeSequence();
            }
            
            //if (null == resultDataCollection || 0 == resultDataCollection.UserData.Count) {
            if (null == resultDataCollection || 0 == resultDataCollection.Count) {
                return codeSequence;
            }
            
            dataItem = new RecordedData();

//int dictionariesCounter = 0;

            string keyKey = string.Empty;
            string keyValue = string.Empty;
            //codeSequence.Items.Add(resultDataCollection);
            foreach (Dictionary<string, object> data in resultDataCollection) {
                try {
                    keyKey = data["key"].ToString();
                } catch {}
                try {
                    if (string.Empty != keyKey) {
                        
                        dataItem.UserData.Add(keyKey, data["value"]);
                        
                    }
                    
                    keyKey = string.Empty;
                    keyValue = string.Empty;
                    
                } catch {}
            }
                
            codeSequence.Items.Add(dataItem);
            
            if (codeSequence.ContainsDataItem()) {
                codeSequence.ReadyToProduceCode = true;
            }

            return codeSequence;
        }
Пример #19
0
        public void RecordDataItem_DataCollection_Empty()
        {
            IRecordedCodeSequence result = null;
            IRecordedCodeSequence codeSequence = new RecordedCodeSequence();

            System.Collections.Generic.List<object> list = 
                new System.Collections.Generic.List<object>();
            ReadOnlyCollection<object> dataCollection =
                new ReadOnlyCollection<object>(list);
            
            IRecordedCodeSequence expectedResult = codeSequence;
            result = 
                generateDataItem(
                    codeSequence,
                    dataCollection,
                    (new RecordedData()));
            Assert.AreEqual(expectedResult, result);
        }
 public void RecordedCodeSequence_Constructor()
 {
     RecordedCodeSequence codeSequence = new RecordedCodeSequence();
     //NUnit.Framework.Assert.NotNull(codeSequence.Items);
     Assert.IsNotNull(codeSequence.Items);
 }
 public void CodeSequence_with_the_same_RecordedAction()
 {
     IRecordedCodeSequence result = null;
     string expectedResult = Recorder.codeGenElementClick;
     IRecordedCodeSequence codeSequence = new RecordedCodeSequence();
     IWebElement alreadyHere = new FakeWebElement(Recorder.constAuxElementClicked, "aaa");
     IWebElement element = new FakeWebElement(Recorder.constAuxElementClicked, "aaa");
     result = 
         generateActionItem(
             codeSequence,
             element,
             (new RecordedAction()));
     Assert.AreEqual(
         expectedResult, 
         ((IRecordedActionItem)result.Items[result.Items.Count - 1]).UserData["code"]);
 }