/*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"); } }
/// <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); }
/// <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"); }
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); }
// // 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; } }
/// <summary> /// Deselects an <option> element within a <select> 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()); } }
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(); }
/// <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"); }
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); }
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"); } } } }
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 <option> 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>()); }
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"); } }
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"); } }