/*This command deselects an already selected value using its text.*/
        public void DeselectedByText(string xpath, string text)
        {
            IWebElement   element       = FindElement(xpath);
            SelectElement selectElement = SelectTheElement(element);

            IList <IWebElement> allSelectedOptions = selectElement.AllSelectedOptions;
            bool indexIsEnebled = false;

            for (int i = 0; i < allSelectedOptions.Count; i++)
            {
                if (allSelectedOptions[i].Text == text)
                {
                    int index = i;
                    indexIsEnebled = allSelectedOptions[index].Enabled;
                    break;
                }
            }

            if (indexIsEnebled)
            {
                selectElement.DeselectByValue(text);
            }
            else
            {
                throw new System.InvalidOperationException($"The option '{text}' is not selected");
            }
        }
Exemple #2
0
        /// <summary>
        /// Function Name :- FnDeSelectByValue
        /// Created By :- Pankaj Kumar
        /// Date of Creation :- 11-Apr-2020
        /// </summary>
        public Boolean FnDeSelectByValue(By elem, string value, string strDescription)
        {
            Boolean blnStatus = true;

            try
            {
                if (FnElementPresent(elem))
                {
                    try
                    {
                        SelectElement objSelect = new SelectElement(driver.FindElement(elem));
                        if (objSelect.Options.Count > 0)
                        {
                            try
                            {
                                objSelect.DeselectByValue(value);
                                Reporter.Pass(strDescription + " : Element is De-Selected By Value : " + value);
                            }
                            catch (Exception e) { blnStatus = false; Reporter.Fail(strDescription + " : Element is not De-Selected By Value : " + value); }
                        }
                    }
                    catch (Exception e) { blnStatus = false; Reporter.Fail(strDescription + " : Element is not De-Selected By Value : " + value); }
                }
                else
                {
                    Reporter.Fail(strDescription + " : Element not displayed.");
                }
            }
            catch (Exception e) { blnStatus = false; Reporter.Fail(strDescription + " : Element is not De-Selected By Value : " + value); }
            return(blnStatus);
        }
Exemple #3
0
 /// <summary>
 /// Deselects a dropdown value based on the "value" attribute.
 /// </summary>
 /// <param name="dropdownElement"></param>
 /// <param name="value"></param>
 public void DeselectDropdownValueByValue(By dropdownElement, string value)
 {
     try
     {
         var select = new SelectElement(driver.FindElement(dropdownElement));
         select.DeselectByValue(value);
     }
     catch (Exception e)
     {
         MyLogger.Log.Error($"Failed to de-select value: {value} from dropdown element: {dropdownElement}. {e.Message}");
         throw e;
     }
 }
        public void TestDeselectOption()
        {
            IWebElement   elem   = driver.FindElement(By.Name("test_framework"));
            SelectElement select = new SelectElement(elem);

            select.SelectByText("RWebSpec");
            select.SelectByText("Selenium");
            select.DeselectByText("RWebSpec");
            select.DeselectByValue("selenium");
            // one more
            // select.deselectByIndex(0);
            Assert.AreEqual(0, select.AllSelectedOptions.Count);
        }
        public void SelectFromDropDow()
        {
            var dropDown          = new SelectElement(element);
            var allSelectedOption = dropDown.AllSelectedOptions;
            var selectedOption    = dropDown.SelectedOption;
            var isMultiple        = dropDown.IsMultiple;
            var listOfAllOption   = dropDown.Options;
            var wrappedElement    = dropDown.WrappedElement;

            dropDown.DeselectAll();
            dropDown.DeselectByIndex(50);
            dropDown.DeselectByText("roma");
            dropDown.DeselectByValue("12345");
            dropDown.SelectByIndex(60);
            dropDown.SelectByText("Roma");
            dropDown.SelectByValue("hgfdsa");
        }
Exemple #6
0
        public void TestMultipleSelectList()
        {
            //Get the List as a Select using it's name attribute
            SelectElement color = new SelectElement(driver.FindElement(By.Name("color")));

            //Verify List support multiple selection
            Assert.IsTrue(color.IsMultiple);

            //Verify List has five options for selection
            Assert.AreEqual(5, color.Options.Count);

            //Select multiple options in the list using visible text
            color.SelectByText("Black");
            color.SelectByText("Red");
            color.SelectByText("Silver");

            //Verify there 3 options selected in the list
            Assert.AreEqual(3, color.AllSelectedOptions.Count);

            //We will verify list has multiple options selected as listed in a array
            var exp_sel_options = new ArrayList(new String[] { "Black", "Red", "Silver" });
            var act_sel_options = new ArrayList();

            foreach (IWebElement option in color.AllSelectedOptions)
            {
                act_sel_options.Add(option.Text);
            }

            //Verify expected array for selected options match with actual options selected
            Assert.AreEqual(exp_sel_options.ToArray(), act_sel_options.ToArray());

            //Deselect an option using visible text
            color.DeselectByText("Silver");
            //Verify selected options count
            Assert.AreEqual(2, color.AllSelectedOptions.Count);

            //Deselect an option using value attribute of the option
            color.DeselectByValue("rd");
            //Verify selected options count
            Assert.AreEqual(1, color.AllSelectedOptions.Count);

            //Deselect an option using index of the option
            color.DeselectByIndex(0);
            //Verify selected options count
            Assert.AreEqual(0, color.AllSelectedOptions.Count);
        }
Exemple #7
0
 //
 // Summary:
 //     Deselect the option having value matching the specified text.
 //
 // Parameters:
 //   value:
 //     The value of the option to deselect.
 //
 // Remarks:
 //     When given "foo" this method will deselect an option like:
 //     <option value="foo">Bar</option>
 public void DeselectByValue(string value)
 {
     try
     {
         SelectElement.DeselectByValue(value);
     }
     catch (StaleElementReferenceException e)
     {
         Logger.Info("Caught exception {0}. Attempting to re-initialize element", e.Message);
         InitializeElement();
         SelectElement.DeselectByValue(value);
     }
     catch (Exception e)
     {
         Logger.Error(e);
         throw;
     }
 }
Exemple #8
0
        /// <summary>
        /// Deselects an &lt;option&gt; element within a &lt;select&gt; dropdown given the text or value.
        ///
        /// Only works with multi-option dropdowns.
        /// </summary>
        /// <param name="value">The visible text or value of the option.</param>
        /// <returns>The current dropdown element.</returns>
        public Element Deselect(string textOrValue)
        {
            if (WebElement.TagName != "select")
            {
                throw new UnexpectedTagNameException($"Element.Select() expects a <select> element but instead got: {WebElement.TagName}");
            }

            var dropdown = new SelectElement(WebElement);

            try
            {
                dropdown.DeselectByText(textOrValue);
            }
            catch (NoSuchElementException)
            {
                dropdown.DeselectByValue(textOrValue);
            }
            return(this);
        }
 protected void SelectElementInMultiselect(By locator, String name)
 {
     try
     {
         SelectElement       s    = new SelectElement(Driver.FindElement(locator));
         IList <IWebElement> list = s.AllSelectedOptions;
         s.SelectByText(name);
         foreach (IWebElement e in list)
         {
             if (e.Text != name)
             {
                 s.DeselectByValue(e.GetAttribute("value"));
             }
         }
     }
     catch (NoSuchElementException)
     {
         throw new NoSuchElementException("Cannot select element - element not found.\n Locator: " + locator.ToString());
     }
 }
Exemple #10
0
        static void Main(string[] args)
        {
            IWebDriver driver = new ChromeDriver();

            driver.Url = "http://www.seleniumeasy.com/test/";
            System.Threading.Thread.Sleep(2000);
            driver.Manage().Window.Maximize();
            Thread.Sleep(2000);
            driver.FindElement(By.XPath("//a[contains(text(),'Input Forms')]")).Click();
            System.Threading.Thread.Sleep(2000);
            IWebElement element1 = driver.FindElement(By.XPath("//ul[@class='dropdown-menu']//a[text()='Select Dropdown List']"));

            System.Threading.Thread.Sleep(2000);
            element1.Click();
            IWebElement   element2 = driver.FindElement(By.XPath("//select[@id='select-demo']"));
            SelectElement ele      = new SelectElement(element2);

            ele.DeselectByValue("Monday");
            driver.Quit();
        }
Exemple #11
0
        /// <summary>
        /// select-multipleの選択と解除
        /// </summary>
        /// <param name="driver"></param>
        private static void EditMultiSelectField(IWebDriver driver)
        {
            // <select multiple="multiple">の選択
            var element       = driver.FindElement(By.Id("id_selected_multiple"));
            var selectElement = new SelectElement(element);

            // 全部を選択
            selectElement.SelectByValue("1");
            selectElement.SelectByValue("2");
            selectElement.SelectByValue("3");

            // 一部を解除
            // 選択と同様、Index, Value, Textの3種類あり
            selectElement.DeselectByValue("2");

            // もしくは、一括で解除
            selectElement.DeselectAll();

            // 再度選択しておく
            selectElement.SelectByValue("2");
        }
Exemple #12
0
            public bool ByValue(params string[] deselValues)
            {
                SelectElement select = new SelectElement(this.element);

                int numberOfValues = deselValues.Count() - 1;

                try
                {
                    for (int i = 0; i <= numberOfValues; i++)
                    {
                        select.DeselectByValue(deselValues[i]);
                    }

                    return(true);
                }
                catch (Exception)
                {
                    //// Normal behaviour
                }

                return(false);
            }
Exemple #13
0
        private void SelectAndDeselect(IWebElement element, Step step)
        {
            SelectElement select = new SelectElement(element);

            switch (step.Parameters[0])
            {
            case "Select By Index":
                var selectIndex = Convert.ToInt32(step.Parameters[1]);
                select.SelectByIndex(selectIndex);
                break;

            case "Select By Text":
                select.SelectByText(step.Parameters[1]);
                break;

            case "Select By Value":
                select.SelectByValue(step.Parameters[1]);
                break;

            case "Deselect All":
                select.DeselectAll();
                break;

            case "Deselect By Index":
                var deselectIndex = Convert.ToInt32(step.Parameters[1]);
                select.DeselectByIndex(deselectIndex);
                break;

            case "Deselect By Text":
                select.DeselectByText(step.Parameters[1]);
                break;

            case "Deselect By Value":
                select.DeselectByValue(step.Parameters[1]);
                break;
            }
        }
        public void SelectRegions(bool[] selectedRegion)
        {
            string        value;
            By            regionElement;
            SelectElement regionList = new SelectElement(Actions.FindElement(_elementDefaultRegion));

            for (int i = 0; i < selectedRegion.Length; i++)
            {
                value         = GetRegionValue(i);
                regionElement = By.CssSelector("option[value=" + value + "]");

                if (selectedRegion[i])
                {
                    if (Actions.IsSelected(regionElement))
                    {
                        Console.WriteLine("Region " + i.ToString() + " is already selected");
                    }
                    else
                    {
                        regionList.SelectByValue(value);
                        Console.WriteLine("Region " + i.ToString() + " selected");
                    }
                }
                else
                {
                    if (Actions.IsSelected(regionElement))
                    {
                        regionList.DeselectByValue(value);
                        Console.WriteLine("Region " + i.ToString() + " deselected");
                    }
                    else
                    {
                        Console.WriteLine("Region " + i.ToString() + " is already deselected");
                    }
                }
            }
        }
Exemple #15
0
 public void DeselectByValue(string value)
 {
     _wrapper.DeselectByValue(value);
 }
 public static void DeselectByValue(this IWebElement webElement, string value)
 {
     var selectElement = new SelectElement(webElement);
     selectElement.DeselectByValue(value);
 }
        public void DeselectByValue(string value)
        {
            SelectElement element = new SelectElement(aWebElement);

            element.DeselectByValue(value);
        }
        //private void ElementsGridViewHelper_MouseEnter(object sender, EventArgs e)
        //{
        //    seleniumAction_SelectionChangeCommitted(null, null);
        //}

        public override void RunCommand(object sender)
        {
            var engine = (Core.Automation.Engine.AutomationEngineInstance)sender;
            //convert to user variable -- https://github.com/saucepleez/taskt/issues/66
            var seleniumSearchParam = v_SeleniumSearchParameter.ConvertToUserVariable(sender);


            var vInstance = v_InstanceName.ConvertToUserVariable(engine);

            var browserObject = engine.GetAppInstance(vInstance);

            var seleniumInstance = (OpenQA.Selenium.IWebDriver)browserObject;

            dynamic element = null;

            if (v_SeleniumElementAction == "Wait For Element To Exist")
            {
                var timeoutText = (from rw in v_WebActionParameterTable.AsEnumerable()
                                   where rw.Field <string>("Parameter Name") == "Timeout (Seconds)"
                                   select rw.Field <string>("Parameter Value")).FirstOrDefault();

                timeoutText = timeoutText.ConvertToUserVariable(sender);

                int timeOut = Convert.ToInt32(timeoutText);

                var timeToEnd = DateTime.Now.AddSeconds(timeOut);

                while (timeToEnd >= DateTime.Now)
                {
                    try
                    {
                        element = FindElement(seleniumInstance, seleniumSearchParam);
                        break;
                    }
                    catch (Exception)
                    {
                        engine.ReportProgress("Element Not Yet Found... " + (timeToEnd - DateTime.Now).Seconds + "s remain");
                        System.Threading.Thread.Sleep(1000);
                    }
                }

                if (element == null)
                {
                    throw new Exception("Element Not Found");
                }

                return;
            }
            else if (seleniumSearchParam != string.Empty)
            {
                element = FindElement(seleniumInstance, seleniumSearchParam);
            }



            switch (v_SeleniumElementAction)
            {
            case "Invoke Click":
                element.Click();
                break;

            case "Left Click":
            case "Right Click":
            case "Middle Click":
            case "Double Left Click":


                int userXAdjust = Convert.ToInt32((from rw in v_WebActionParameterTable.AsEnumerable()
                                                   where rw.Field <string>("Parameter Name") == "X Adjustment"
                                                   select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertToUserVariable(sender));

                int userYAdjust = Convert.ToInt32((from rw in v_WebActionParameterTable.AsEnumerable()
                                                   where rw.Field <string>("Parameter Name") == "Y Adjustment"
                                                   select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertToUserVariable(sender));

                var elementLocation = element.Location;
                SendMouseMoveCommand newMouseMove = new SendMouseMoveCommand();
                var seleniumWindowPosition        = seleniumInstance.Manage().Window.Position;
                newMouseMove.v_XMousePosition = (seleniumWindowPosition.X + elementLocation.X + 30 + userXAdjust).ToString();     // added 30 for offset
                newMouseMove.v_YMousePosition = (seleniumWindowPosition.Y + elementLocation.Y + 130 + userYAdjust).ToString();    //added 130 for offset
                newMouseMove.v_MouseClick     = v_SeleniumElementAction;
                newMouseMove.RunCommand(sender);
                break;

            case "Set Text":

                string textToSet = (from rw in v_WebActionParameterTable.AsEnumerable()
                                    where rw.Field <string>("Parameter Name") == "Text To Set"
                                    select rw.Field <string>("Parameter Value")).FirstOrDefault();


                string clearElement = (from rw in v_WebActionParameterTable.AsEnumerable()
                                       where rw.Field <string>("Parameter Name") == "Clear Element Before Setting Text"
                                       select rw.Field <string>("Parameter Value")).FirstOrDefault();

                string encryptedData = (from rw in v_WebActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Encrypted Text"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault();



                if (clearElement == null)
                {
                    clearElement = "No";
                }

                if (clearElement.ToLower() == "yes")
                {
                    element.Clear();
                }


                if (encryptedData == "Encrypted")
                {
                    textToSet = Core.EncryptionServices.DecryptString(textToSet, "TASKT");
                }

                string[] potentialKeyPresses = textToSet.Split('{', '}');

                Type seleniumKeys = typeof(OpenQA.Selenium.Keys);
                System.Reflection.FieldInfo[] fields = seleniumKeys.GetFields(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);

                //check if chunked string contains a key press command like {ENTER}
                foreach (string chunkedString in potentialKeyPresses)
                {
                    if (chunkedString == "")
                    {
                        continue;
                    }

                    if (fields.Any(f => f.Name == chunkedString))
                    {
                        string keyPress = (string)fields.Where(f => f.Name == chunkedString).FirstOrDefault().GetValue(null);
                        element.SendKeys(keyPress);
                    }
                    else
                    {
                        //convert to user variable - https://github.com/saucepleez/taskt/issues/22
                        var convertedChunk = chunkedString.ConvertToUserVariable(sender);
                        element.SendKeys(convertedChunk);
                    }
                }

                break;

            case "Get Options":

                string applyToVarName = (from rw in v_WebActionParameterTable.AsEnumerable()
                                         where rw.Field <string>("Parameter Name") == "Variable Name"
                                         select rw.Field <string>("Parameter Value")).FirstOrDefault();


                string attribName = (from rw in v_WebActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "Attribute Name"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertToUserVariable(sender);


                var optionsItems = new List <string>();
                var ele          = (IWebElement)element;
                var select       = new SelectElement(ele);
                var options      = select.Options;

                foreach (var option in options)
                {
                    var optionValue = option.GetAttribute(attribName);
                    optionsItems.Add(optionValue);
                }

                var requiredVariable = engine.VariableList.Where(x => x.VariableName == applyToVarName).FirstOrDefault();

                if (requiredVariable == null)
                {
                    engine.VariableList.Add(new Script.ScriptVariable()
                    {
                        VariableName = applyToVarName, CurrentPosition = 0
                    });
                    requiredVariable = engine.VariableList.Where(x => x.VariableName == applyToVarName).FirstOrDefault();
                }

                requiredVariable.VariableValue   = optionsItems;
                requiredVariable.CurrentPosition = 0;


                break;

            case "Select Option":

                string selectionType = (from rw in v_WebActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Selection Type"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault();

                string selectionParam = (from rw in v_WebActionParameterTable.AsEnumerable()
                                         where rw.Field <string>("Parameter Name") == "Selection Parameter"
                                         select rw.Field <string>("Parameter Value")).FirstOrDefault();


                seleniumInstance.SwitchTo().ActiveElement();

                var el = (IWebElement)element;
                var selectionElement = new SelectElement(el);

                switch (selectionType)
                {
                case "Select By Index":
                    selectionElement.SelectByIndex(int.Parse(selectionParam));
                    break;

                case "Select By Text":
                    selectionElement.SelectByText(selectionParam);
                    break;

                case "Select By Value":
                    selectionElement.SelectByValue(selectionParam);
                    break;

                case "Deselect By Index":
                    selectionElement.DeselectByIndex(int.Parse(selectionParam));
                    break;

                case "Deselect By Text":
                    selectionElement.DeselectByText(selectionParam);
                    break;

                case "Deselect By Value":
                    selectionElement.DeselectByValue(selectionParam);
                    break;

                case "Deselect All":
                    selectionElement.DeselectAll();
                    break;

                default:
                    throw new NotImplementedException();
                }

                break;

            case "Get Text":
            case "Get Attribute":
            case "Get Count":

                string VariableName = (from rw in v_WebActionParameterTable.AsEnumerable()
                                       where rw.Field <string>("Parameter Name") == "Variable Name"
                                       select rw.Field <string>("Parameter Value")).FirstOrDefault();

                string attributeName = (from rw in v_WebActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Attribute Name"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertToUserVariable(sender);

                string elementValue;
                if (v_SeleniumElementAction == "Get Text")
                {
                    elementValue = element.Text;
                }
                else if (v_SeleniumElementAction == "Get Count")
                {
                    elementValue = "1";
                    if (element is ReadOnlyCollection <IWebElement> )
                    {
                        elementValue = ((ReadOnlyCollection <IWebElement>)element).Count().ToString();
                    }
                }
                else
                {
                    elementValue = element.GetAttribute(attributeName);
                }

                elementValue.StoreInUserVariable(sender, VariableName);

                break;

            case "Get Matching Elements":
                var variableName = (from rw in v_WebActionParameterTable.AsEnumerable()
                                    where rw.Field <string>("Parameter Name") == "Variable Name"
                                    select rw.Field <string>("Parameter Value")).FirstOrDefault();

                var requiredComplexVariable = engine.VariableList.Where(x => x.VariableName == variableName).FirstOrDefault();

                if (requiredComplexVariable == null)
                {
                    engine.VariableList.Add(new Script.ScriptVariable()
                    {
                        VariableName = variableName, CurrentPosition = 0
                    });
                    requiredComplexVariable = engine.VariableList.Where(x => x.VariableName == variableName).FirstOrDefault();
                }


                //set json settings
                JsonSerializerSettings settings = new JsonSerializerSettings();
                settings.Error = (serializer, err) => {
                    err.ErrorContext.Handled = true;
                };

                settings.Formatting = Formatting.Indented;

                //create json list
                List <string> jsonList = new List <string>();
                foreach (OpenQA.Selenium.IWebElement item in element)
                {
                    var json = Newtonsoft.Json.JsonConvert.SerializeObject(item, settings);
                    jsonList.Add(json);
                }

                requiredComplexVariable.VariableValue   = jsonList;
                requiredComplexVariable.CurrentPosition = 0;

                break;

            case "Clear Element":
                element.Clear();
                break;

            case "Switch to frame":
                if (seleniumSearchParam == "")
                {
                    seleniumInstance.SwitchTo().DefaultContent();
                }
                else
                {
                    seleniumInstance.SwitchTo().Frame(element);
                }
                break;

            default:
                throw new Exception("Element Action was not found");
            }
        }
        public void DropDownMultipleSelectDropDownTest()
        {
            try
            {
                driver.Url = "http://www.uitestpractice.com/Students/Select";       //Url of website

                driver.Manage().Window.Maximize();                                  //Maximize the windows

                driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); // implicit wait

                IWebElement dropdown = driver.FindElement(By.Id("countriesSingle"));

                SelectElement selectElement = new SelectElement(dropdown); //Create select element

                //options properties gets the list of optins belonging to the select tag
                IList <IWebElement> elements = selectElement.Options; //options for multiple drowndown list and store in list

                Console.WriteLine(elements.Count);                    // print the number presents in dropdown list
                Thread.Sleep(3000);


                foreach (var item in elements)
                {
                    Console.WriteLine(item.Text); //print all the test in dropdown list
                }
                Thread.Sleep(3000);

                IWebElement multiDropdown = driver.FindElement(By.Id("countriesMultiple"));
                Thread.Sleep(3000);

                SelectElement selectmultiple = new SelectElement(multiDropdown); //create multiple select downlaod
                Thread.Sleep(3000);

                bool isMultiple = selectmultiple.IsMultiple; //checking selected dropdown is multiple dropdown or simple dropdown
                Thread.Sleep(2000);
                Console.WriteLine(isMultiple);               // return value in true and false
                Thread.Sleep(2000);

                //slect by test works on multiple dropdown list

                selectmultiple.SelectByText("India");
                Thread.Sleep(2000); //in multiple dorpdown list select by test "india"

                selectmultiple.DeselectByText("India");
                Thread.Sleep(2000);             // here selected by test element is deselected by this properties

                selectElement.SelectByIndex(1); // here selected elements by index
                Thread.Sleep(2000);

                selectmultiple.DeselectByIndex(1); //here deslecting by index
                Thread.Sleep(2000);

                selectmultiple.SelectByValue("china"); //value is comming from inspecting element you want to select and take value
                Thread.Sleep(2000);

                selectmultiple.DeselectByValue("china"); //here deselecting the value
                Thread.Sleep(2000);

                //select multiple value in multiple dropdown and print the value you selected
                selectmultiple.SelectByIndex(1);
                selectmultiple.SelectByIndex(2);                                 // selecting 1 n 2 both

                IList <IWebElement> element = selectmultiple.AllSelectedOptions; // here select mulltiple value store in list
                Thread.Sleep(2000);
                Console.WriteLine(element.Count);                                // count the multiple selected item

                foreach (var item in element)                                    // here printing all the selected values
                {
                    Console.WriteLine(item.Text);
                    Thread.Sleep(2000);
                }
                Thread.Sleep(2000);

                selectmultiple.DeselectAll(); // here multiple values is diselected
                Thread.Sleep(2000);
            }
            catch (Exception exception)
            {
                Screenshot.Capture(driver, exception.Message);
                Console.WriteLine(exception.Message);
                Email.SendMailTest.SendEmail(exception.Message.Trim(), exception.StackTrace);
            }
            finally
            {
                driver.Quit();
            }
        }
        /// <summary>
        /// Deselect the &lt;option&gt; element with the specified value.
        /// </summary>
        /// <typeparam name="TResult">The type of block to return.</typeparam>
        /// <param name="value">The value to search for.</param>
        /// <returns>The closest related element of type <typeparamref name="TResult" />.</returns>
        public TResult DeselectByValue <TResult>(string value) where TResult : IBlock
        {
            SelectElement.DeselectByValue(value);

            return(this.FindRelated <TResult>());
        }
Exemple #21
0
        public override void RunCommand(object sender)
        {
            var engine = (AutomationEngineInstance)sender;
            //convert to user variable -- https://github.com/saucepleez/taskt/issues/66
            var     seleniumSearchParam = v_SeleniumSearchParameter.ConvertUserVariableToString(engine);
            var     browserObject       = v_InstanceName.GetAppInstance(engine);
            var     seleniumInstance    = (IWebDriver)browserObject;
            dynamic element             = null;

            if (v_SeleniumElementAction == "Wait For Element To Exist")
            {
                var timeoutText = (from rw in v_WebActionParameterTable.AsEnumerable()
                                   where rw.Field <string>("Parameter Name") == "Timeout (Seconds)"
                                   select rw.Field <string>("Parameter Value")).FirstOrDefault();

                timeoutText = timeoutText.ConvertUserVariableToString(engine);
                int timeOut   = Convert.ToInt32(timeoutText);
                var timeToEnd = DateTime.Now.AddSeconds(timeOut);

                while (timeToEnd >= DateTime.Now)
                {
                    try
                    {
                        element = FindElement(seleniumInstance, seleniumSearchParam);
                        break;
                    }
                    catch (Exception)
                    {
                        engine.ReportProgress("Element Not Yet Found... " + (timeToEnd - DateTime.Now).Seconds + "s remain");
                        Thread.Sleep(1000);
                    }
                }

                if (element == null)
                {
                    throw new Exception("Element Not Found");
                }

                return;
            }
            else if (seleniumSearchParam != string.Empty)
            {
                element = FindElement(seleniumInstance, seleniumSearchParam);
            }

            switch (v_SeleniumElementAction)
            {
            case "Invoke Click":
                int seleniumWindowHeightY = seleniumInstance.Manage().Window.Size.Height;
                int elementPositionY      = element.Location.Y;
                if (elementPositionY > seleniumWindowHeightY)
                {
                    String scroll          = String.Format("window.scroll(0, {0})", elementPositionY);
                    IJavaScriptExecutor js = browserObject as IJavaScriptExecutor;
                    js.ExecuteScript(scroll);
                }
                element.Click();
                break;

            case "Left Click":
            case "Right Click":
            case "Middle Click":
            case "Double Left Click":
                int userXAdjust = Convert.ToInt32((from rw in v_WebActionParameterTable.AsEnumerable()
                                                   where rw.Field <string>("Parameter Name") == "X Adjustment"
                                                   select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine));

                int userYAdjust = Convert.ToInt32((from rw in v_WebActionParameterTable.AsEnumerable()
                                                   where rw.Field <string>("Parameter Name") == "Y Adjustment"
                                                   select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine));

                var elementLocation = element.Location;
                SendMouseMoveCommand newMouseMove = new SendMouseMoveCommand();
                var seleniumWindowPosition        = seleniumInstance.Manage().Window.Position;
                newMouseMove.v_XMousePosition = (seleniumWindowPosition.X + elementLocation.X + 30 + userXAdjust).ToString();     // added 30 for offset
                newMouseMove.v_YMousePosition = (seleniumWindowPosition.Y + elementLocation.Y + 130 + userYAdjust).ToString();    //added 130 for offset
                newMouseMove.v_MouseClick     = v_SeleniumElementAction;
                newMouseMove.RunCommand(sender);
                break;

            case "Set Text":
                string textToSet = (from rw in v_WebActionParameterTable.AsEnumerable()
                                    where rw.Field <string>("Parameter Name") == "Text To Set"
                                    select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine);


                string clearElement = (from rw in v_WebActionParameterTable.AsEnumerable()
                                       where rw.Field <string>("Parameter Name") == "Clear Element Before Setting Text"
                                       select rw.Field <string>("Parameter Value")).FirstOrDefault();

                string encryptedData = (from rw in v_WebActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Encrypted Text"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault();

                if (clearElement == null)
                {
                    clearElement = "No";
                }

                if (clearElement.ToLower() == "yes")
                {
                    element.Clear();
                }

                if (encryptedData == "Encrypted")
                {
                    textToSet = EncryptionServices.DecryptString(textToSet, "TASKT");
                }

                string[] potentialKeyPresses = textToSet.Split('{', '}');

                Type        seleniumKeys = typeof(OpenQA.Selenium.Keys);
                FieldInfo[] fields       = seleniumKeys.GetFields(BindingFlags.Static | BindingFlags.Public);

                //check if chunked string contains a key press command like {ENTER}
                foreach (string chunkedString in potentialKeyPresses)
                {
                    if (chunkedString == "")
                    {
                        continue;
                    }

                    if (fields.Any(f => f.Name == chunkedString))
                    {
                        string keyPress = (string)fields.Where(f => f.Name == chunkedString).FirstOrDefault().GetValue(null);
                        element.SendKeys(keyPress);
                    }
                    else
                    {
                        //convert to user variable - https://github.com/saucepleez/taskt/issues/22
                        var convertedChunk = chunkedString.ConvertUserVariableToString(engine);
                        element.SendKeys(convertedChunk);
                    }
                }
                break;

            case "Set Secure Text":
                var secureString = (from rw in v_WebActionParameterTable.AsEnumerable()
                                    where rw.Field <string>("Parameter Name") == "Secure String Variable"
                                    select rw.Field <string>("Parameter Value")).FirstOrDefault();

                string _clearElement = (from rw in v_WebActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Clear Element Before Setting Text"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault();

                var secureStrVariable = secureString.ConvertUserVariableToObject(engine);

                if (secureStrVariable is SecureString)
                {
                    secureString = ((SecureString)secureStrVariable).ConvertSecureStringToString();
                }
                else
                {
                    throw new ArgumentException("Provided Argument is not a 'Secure String'");
                }

                if (_clearElement == null)
                {
                    _clearElement = "No";
                }

                if (_clearElement.ToLower() == "yes")
                {
                    element.Clear();
                }

                string[] _potentialKeyPresses = secureString.Split('{', '}');

                Type        _seleniumKeys = typeof(OpenQA.Selenium.Keys);
                FieldInfo[] _fields       = _seleniumKeys.GetFields(BindingFlags.Static | BindingFlags.Public);

                //check if chunked string contains a key press command like {ENTER}
                foreach (string chunkedString in _potentialKeyPresses)
                {
                    if (chunkedString == "")
                    {
                        continue;
                    }

                    if (_fields.Any(f => f.Name == chunkedString))
                    {
                        string keyPress = (string)_fields.Where(f => f.Name == chunkedString).FirstOrDefault().GetValue(null);
                        element.SendKeys(keyPress);
                    }
                    else
                    {
                        //convert to user variable - https://github.com/saucepleez/taskt/issues/22
                        var convertedChunk = chunkedString.ConvertUserVariableToString(engine);
                        element.SendKeys(convertedChunk);
                    }
                }
                break;

            case "Get Options":
                string applyToVarName = (from rw in v_WebActionParameterTable.AsEnumerable()
                                         where rw.Field <string>("Parameter Name") == "Variable Name"
                                         select rw.Field <string>("Parameter Value")).FirstOrDefault();


                string attribName = (from rw in v_WebActionParameterTable.AsEnumerable()
                                     where rw.Field <string>("Parameter Name") == "Attribute Name"
                                     select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine);

                var optionsItems = new List <string>();
                var ele          = (IWebElement)element;
                var select       = new SelectElement(ele);
                var options      = select.Options;

                foreach (var option in options)
                {
                    var optionValue = option.GetAttribute(attribName);
                    optionsItems.Add(optionValue);
                }

                optionsItems.StoreInUserVariable(engine, applyToVarName);

                break;

            case "Select Option":
                string selectionType = (from rw in v_WebActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Selection Type"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault();

                string selectionParam = (from rw in v_WebActionParameterTable.AsEnumerable()
                                         where rw.Field <string>("Parameter Name") == "Selection Parameter"
                                         select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine);

                seleniumInstance.SwitchTo().ActiveElement();

                var el = (IWebElement)element;
                var selectionElement = new SelectElement(el);

                switch (selectionType)
                {
                case "Select By Index":
                    selectionElement.SelectByIndex(int.Parse(selectionParam));
                    break;

                case "Select By Text":
                    selectionElement.SelectByText(selectionParam);
                    break;

                case "Select By Value":
                    selectionElement.SelectByValue(selectionParam);
                    break;

                case "Deselect By Index":
                    selectionElement.DeselectByIndex(int.Parse(selectionParam));
                    break;

                case "Deselect By Text":
                    selectionElement.DeselectByText(selectionParam);
                    break;

                case "Deselect By Value":
                    selectionElement.DeselectByValue(selectionParam);
                    break;

                case "Deselect All":
                    selectionElement.DeselectAll();
                    break;

                default:
                    throw new NotImplementedException();
                }
                break;

            case "Get Text":
            case "Get Attribute":
            case "Get Count":
                string VariableName = (from rw in v_WebActionParameterTable.AsEnumerable()
                                       where rw.Field <string>("Parameter Name") == "Variable Name"
                                       select rw.Field <string>("Parameter Value")).FirstOrDefault();

                string attributeName = (from rw in v_WebActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Attribute Name"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault().ConvertUserVariableToString(engine);

                string elementValue;
                if (v_SeleniumElementAction == "Get Text")
                {
                    elementValue = element.Text;
                }
                else if (v_SeleniumElementAction == "Get Count")
                {
                    elementValue = "1";
                    if (element is ReadOnlyCollection <IWebElement> )
                    {
                        elementValue = ((ReadOnlyCollection <IWebElement>)element).Count().ToString();
                    }
                }
                else
                {
                    elementValue = element.GetAttribute(attributeName);
                }

                elementValue.StoreInUserVariable(engine, VariableName);
                break;

            case "Get Matching Element(s)":
                var variableName = (from rw in v_WebActionParameterTable.AsEnumerable()
                                    where rw.Field <string>("Parameter Name") == "Variable Name"
                                    select rw.Field <string>("Parameter Value")).FirstOrDefault();

                if (!(element is IWebElement))
                {
                    //create element list
                    List <IWebElement> elementList = new List <IWebElement>();
                    foreach (IWebElement item in element)
                    {
                        elementList.Add(item);
                    }
                    elementList.StoreInUserVariable(engine, variableName);
                }
                else
                {
                    ((IWebElement)element).StoreInUserVariable(engine, variableName);
                }
                break;

            case "Get Table":
                var DTVariableName = (from rw in v_WebActionParameterTable.AsEnumerable()
                                      where rw.Field <string>("Parameter Name") == "Variable Name"
                                      select rw.Field <string>("Parameter Value")).FirstOrDefault();

                // Get HTML (Source) of the Element
                string       tableHTML = element.GetAttribute("innerHTML").ToString();
                HtmlDocument doc       = new HtmlDocument();

                //Load Source (String) as HTML Document
                doc.LoadHtml(tableHTML);

                //Get Header Tags
                var       headers = doc.DocumentNode.SelectNodes("//tr/th");
                DataTable DT      = new DataTable();

                //If headers found
                if (headers != null && headers.Count != 0)
                {
                    // add columns from th (headers)
                    foreach (HtmlNode header in headers)
                    {
                        DT.Columns.Add(Regex.Replace(header.InnerText, @"\t|\n|\r", "").Trim());
                    }
                }
                else
                {
                    var columnsCount = doc.DocumentNode.SelectSingleNode("//tr[1]").ChildNodes.Where(node => node.Name == "td").Count();
                    DT.Columns.AddRange((Enumerable.Range(1, columnsCount).Select(dc => new DataColumn())).ToArray());
                }

                // select rows with td elements and load each row (containing <td> tags) into DataTable
                foreach (var row in doc.DocumentNode.SelectNodes("//tr[td]"))
                {
                    DT.Rows.Add(row.SelectNodes("td").Select(td => Regex.Replace(td.InnerText, @"\t|\n|\r", "").Trim()).ToArray());
                }

                DT.StoreInUserVariable(engine, DTVariableName);
                break;

            case "Clear Element":
                element.Clear();
                break;

            case "Switch to Frame":
                if (seleniumSearchParam == "")
                {
                    seleniumInstance.SwitchTo().DefaultContent();
                }
                else
                {
                    seleniumInstance.SwitchTo().Frame(element);
                }
                break;

            default:
                throw new Exception("Element Action was not found");
            }
        }
Exemple #22
0
        public async override Task RunCommand(object sender)
        {
            var engine = (IAutomationEngineInstance)sender;

            var vTimeout = (int)await v_Timeout.EvaluateCode(engine);

            var seleniumSearchParamRows = (from rw in v_SeleniumSearchParameters.AsEnumerable()
                                           where rw.Field <string>("Enabled") == "True" &&
                                           rw.Field <string>("Parameter Value").ToString() != ""
                                           select rw.ItemArray.Cast <string>().ToArray()).ToList();

            var     browserObject    = ((OBAppInstance)await v_InstanceName.EvaluateCode(engine)).Value;
            var     seleniumInstance = (IWebDriver)browserObject;
            dynamic element          = await CommandsHelper.FindElement(engine, seleniumInstance, seleniumSearchParamRows, v_SeleniumSearchOption, vTimeout);

            if (element == null && v_SeleniumElementAction != "Element Exists")
            {
                throw new ElementNotVisibleException("Unable to find element within the provided time limit");
            }

            if (v_SeleniumElementAction.Contains("Click"))
            {
                int seleniumWindowHeightY = seleniumInstance.Manage().Window.Size.Height;
                int elementPositionY      = ((IWebElement)element).Location.Y;
                if (elementPositionY > seleniumWindowHeightY)
                {
                    string scroll          = string.Format("window.scroll(0, {0})", elementPositionY);
                    IJavaScriptExecutor js = browserObject as IJavaScriptExecutor;
                    js.ExecuteScript(scroll);
                }
            }
            Actions actions = new Actions(seleniumInstance);

            switch (v_SeleniumElementAction)
            {
            case "Invoke Click":
                ((IWebElement)element).Click();
                break;

            case "Left Click":
                actions.Click((IWebElement)element).Perform();
                break;

            case "Right Click":
                actions.ContextClick((IWebElement)element).Perform();
                break;

            case "Middle Click":
                string userXAdjustString = (from rw in v_WebActionParameterTable.AsEnumerable()
                                            where rw.Field <string>("Parameter Name") == "X Adjustment"
                                            select rw.Field <string>("Parameter Value")).FirstOrDefault();
                int userXAdjust = (int)await userXAdjustString.EvaluateCode(engine);

                string userYAdjustString = (from rw in v_WebActionParameterTable.AsEnumerable()
                                            where rw.Field <string>("Parameter Name") == "Y Adjustment"
                                            select rw.Field <string>("Parameter Value")).FirstOrDefault();
                int userYAdjust = (int)await userYAdjustString.EvaluateCode(engine);

                var elementLocation        = ((IWebElement)element).Location;
                var seleniumWindowPosition = seleniumInstance.Manage().Window.Position;
                User32Functions.SendMouseMove(seleniumWindowPosition.X + elementLocation.X + userXAdjust, seleniumWindowPosition.Y + elementLocation.Y + userYAdjust,
                                              v_SeleniumElementAction);

                break;

            case "Double Left Click":
                actions.DoubleClick((IWebElement)element).Perform();
                break;

            case "Hover Over Element":
                string hoverTime = (from rw in v_WebActionParameterTable.AsEnumerable()
                                    where rw.Field <string>("Parameter Name") == "Hover Time (Seconds)"
                                    select rw.Field <string>("Parameter Value")).FirstOrDefault();
                int hoverTimeInt = (int)await hoverTime.EvaluateCode(engine) * 1000;

                actions.MoveToElement((IWebElement)element).Perform();
                Thread.Sleep(hoverTimeInt);
                break;

            case "Set Text":
                string textToSetString = (from rw in v_WebActionParameterTable.AsEnumerable()
                                          where rw.Field <string>("Parameter Name") == "Text To Set"
                                          select rw.Field <string>("Parameter Value")).FirstOrDefault();
                string textToSet = (string)await textToSetString.EvaluateCode(engine);

                string clearElement = (from rw in v_WebActionParameterTable.AsEnumerable()
                                       where rw.Field <string>("Parameter Name") == "Clear Element Before Setting Text"
                                       select rw.Field <string>("Parameter Value")).FirstOrDefault();

                if (clearElement == null)
                {
                    clearElement = "No";
                }

                if (clearElement.ToLower() == "yes")
                {
                    ((IWebElement)element).Clear();
                }

                string[] potentialKeyPresses = textToSet.Split('[', ']');

                Type        seleniumKeys = typeof(OpenQA.Selenium.Keys);
                FieldInfo[] fields       = seleniumKeys.GetFields(BindingFlags.Static | BindingFlags.Public);

                //check if chunked string contains a key press command like {ENTER}
                foreach (string chunkedString in potentialKeyPresses)
                {
                    if (chunkedString == "")
                    {
                        continue;
                    }

                    if (fields.Any(f => f.Name.ToLower() == chunkedString.ToLower()) && textToSet.Contains($"[{chunkedString}]"))
                    {
                        string keyPress = (string)fields.Where(f => f.Name.ToLower() == chunkedString.ToLower()).FirstOrDefault().GetValue(null);
                        textToSet = textToSet.Replace($"[{chunkedString}]", keyPress);
                    }
                }

                ((IWebElement)element).SendKeys(textToSet);
                break;

            case "Set Secure Text":
                var secureString = (from rw in v_WebActionParameterTable.AsEnumerable()
                                    where rw.Field <string>("Parameter Name") == "Secure String Variable"
                                    select rw.Field <string>("Parameter Value")).FirstOrDefault();

                string _clearElement = (from rw in v_WebActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Clear Element Before Setting Text"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault();

                var secureStrVariable = (SecureString)await secureString.EvaluateCode(engine);

                secureString = secureStrVariable.ConvertSecureStringToString();

                if (_clearElement == null)
                {
                    _clearElement = "No";
                }

                if (_clearElement.ToLower() == "yes")
                {
                    ((IWebElement)element).Clear();
                }

                string[] _potentialKeyPresses = secureString.Split('[', ']');

                Type        _seleniumKeys   = typeof(OpenQA.Selenium.Keys);
                FieldInfo[] _fields         = _seleniumKeys.GetFields(BindingFlags.Static | BindingFlags.Public);
                string      _finalTextToSet = "";

                //check if chunked string contains a key press command like {ENTER}
                foreach (string chunkedString in _potentialKeyPresses)
                {
                    if (chunkedString == "")
                    {
                        continue;
                    }

                    if (_fields.Any(f => f.Name.ToLower() == chunkedString.ToLower()) && secureString.Contains("[" + chunkedString + "]"))
                    {
                        string keyPress = (string)_fields.Where(f => f.Name.ToLower() == chunkedString.ToLower()).FirstOrDefault().GetValue(null);
                        _finalTextToSet += keyPress;
                    }
                    else
                    {
                        _finalTextToSet += chunkedString;
                    }
                }
                ((IWebElement)element).SendKeys(_finalTextToSet);
                break;

            case "Get Options":
                string applyToVarName = (from rw in v_WebActionParameterTable.AsEnumerable()
                                         where rw.Field <string>("Parameter Name") == "Variable Name"
                                         select rw.Field <string>("Parameter Value")).FirstOrDefault();


                string attribNameString = (from rw in v_WebActionParameterTable.AsEnumerable()
                                           where rw.Field <string>("Parameter Name") == "Attribute Name"
                                           select rw.Field <string>("Parameter Value")).FirstOrDefault();
                string attribName = (string)await attribNameString.EvaluateCode(engine);

                var optionsItems = new List <string>();
                var ele          = (IWebElement)element;
                var select       = new SelectElement(ele);
                var options      = select.Options;

                foreach (var option in options)
                {
                    var optionValue = option.GetAttribute(attribName);
                    optionsItems.Add(optionValue);
                }

                optionsItems.SetVariableValue(engine, applyToVarName);

                break;

            case "Select Option":
                string selectionType = (from rw in v_WebActionParameterTable.AsEnumerable()
                                        where rw.Field <string>("Parameter Name") == "Selection Type"
                                        select rw.Field <string>("Parameter Value")).FirstOrDefault();

                string selectionParamString = (from rw in v_WebActionParameterTable.AsEnumerable()
                                               where rw.Field <string>("Parameter Name") == "Selection Parameter"
                                               select rw.Field <string>("Parameter Value")).FirstOrDefault();
                string selectionParam = (string)await selectionParamString.EvaluateCode(engine);

                seleniumInstance.SwitchTo().ActiveElement();

                var el = (IWebElement)element;
                var selectionElement = new SelectElement(el);

                switch (selectionType)
                {
                case "Select By Index":
                    selectionElement.SelectByIndex(int.Parse(selectionParam));
                    break;

                case "Select By Text":
                    selectionElement.SelectByText(selectionParam);
                    break;

                case "Select By Value":
                    selectionElement.SelectByValue(selectionParam);
                    break;

                case "Deselect By Index":
                    selectionElement.DeselectByIndex(int.Parse(selectionParam));
                    break;

                case "Deselect By Text":
                    selectionElement.DeselectByText(selectionParam);
                    break;

                case "Deselect By Value":
                    selectionElement.DeselectByValue(selectionParam);
                    break;

                case "Deselect All":
                    selectionElement.DeselectAll();
                    break;

                default:
                    throw new NotImplementedException();
                }
                break;

            case "Get Text":
            case "Get Attribute":
            case "Get Count":
                string VariableName = (from rw in v_WebActionParameterTable.AsEnumerable()
                                       where rw.Field <string>("Parameter Name") == "Variable Name"
                                       select rw.Field <string>("Parameter Value")).FirstOrDefault();

                string attributeNameString = (from rw in v_WebActionParameterTable.AsEnumerable()
                                              where rw.Field <string>("Parameter Name") == "Attribute Name"
                                              select rw.Field <string>("Parameter Value")).FirstOrDefault();
                string attributeName = (string)await attributeNameString.EvaluateCode(engine);

                string elementValue;
                if (v_SeleniumElementAction == "Get Text")
                {
                    elementValue = element.Text;
                }
                else if (v_SeleniumElementAction == "Get Count")
                {
                    elementValue = "1";
                    if (element is ReadOnlyCollection <IWebElement> )
                    {
                        elementValue = ((ReadOnlyCollection <IWebElement>)element).Count().ToString();
                    }
                }
                else
                {
                    elementValue = ((IWebElement)element).GetAttribute(attributeName);
                }

                elementValue.SetVariableValue(engine, VariableName);
                break;

            case "Get Matching Element(s)":
                var variableName = (from rw in v_WebActionParameterTable.AsEnumerable()
                                    where rw.Field <string>("Parameter Name") == "Variable Name"
                                    select rw.Field <string>("Parameter Value")).FirstOrDefault();

                if (!(element is IWebElement))
                {
                    //create element list
                    List <IWebElement> elementList = new List <IWebElement>();
                    foreach (IWebElement item in element)
                    {
                        elementList.Add(item);
                    }
                    elementList.SetVariableValue(engine, variableName);
                }
                else
                {
                    ((IWebElement)element).SetVariableValue(engine, variableName);
                }
                break;

            case "Get Table":
                var DTVariableName = (from rw in v_WebActionParameterTable.AsEnumerable()
                                      where rw.Field <string>("Parameter Name") == "Variable Name"
                                      select rw.Field <string>("Parameter Value")).FirstOrDefault();

                // Get HTML (Source) of the Element
                string       tableHTML = ((IWebElement)element).GetAttribute("innerHTML").ToString();
                HtmlDocument doc       = new HtmlDocument();

                //Load Source (String) as HTML Document
                doc.LoadHtml(tableHTML);

                //Get Header Tags
                var       headers = doc.DocumentNode.SelectNodes("//tr/th");
                DataTable DT      = new DataTable();

                //If headers found
                if (headers != null && headers.Count != 0)
                {
                    // add columns from th (headers)
                    foreach (HtmlNode header in headers)
                    {
                        DT.Columns.Add(Regex.Replace(header.InnerText, @"\t|\n|\r", "").Trim());
                    }
                }
                else
                {
                    var columnsCount = doc.DocumentNode.SelectSingleNode("//tr[1]").ChildNodes.Where(node => node.Name == "td").Count();
                    DT.Columns.AddRange((Enumerable.Range(1, columnsCount).Select(dc => new DataColumn())).ToArray());
                }

                // select rows with td elements and load each row (containing <td> tags) into DataTable
                foreach (var row in doc.DocumentNode.SelectNodes("//tr[td]"))
                {
                    DT.Rows.Add(row.SelectNodes("td").Select(td => Regex.Replace(td.InnerText, @"\t|\n|\r", "").Trim()).ToArray());
                }

                DT.SetVariableValue(engine, DTVariableName);
                break;

            case "Clear Element":
                ((IWebElement)element).Clear();
                break;

            case "Switch to Frame":
                if (seleniumSearchParamRows.Count == 0)
                {
                    seleniumInstance.SwitchTo().DefaultContent();
                }
                else
                {
                    seleniumInstance.SwitchTo().Frame((IWebElement)element);
                }
                break;

            case "Wait For Element To Exist":
                break;

            case "Element Exists":
                string existsBoolVariableName = (from rw in v_WebActionParameterTable.AsEnumerable()
                                                 where rw.Field <string>("Parameter Name") == "Variable Name"
                                                 select rw.Field <string>("Parameter Value")).FirstOrDefault();

                if (element == null)
                {
                    false.SetVariableValue(engine, existsBoolVariableName);
                }
                else
                {
                    true.SetVariableValue(engine, existsBoolVariableName);
                }

                break;

            default:
                throw new Exception("Element Action was not found");
            }
        }