/// <summary> /// Gets the value of a Composite control. /// </summary> /// <param name="control">The Composite control values you want to set.</param> /// <example>xrmBrowser.Entity.GetValue(new CompositeControl() { Id = "fullname", Fields = fields });</example> public BrowserCommandResult <string> GetValue(CompositeControl control) { return(this.Execute($"Get Conposite Control Value: {control.Id}", driver => { string text = string.Empty; driver.WaitUntilVisible(By.Id(control.Id)); driver.ClickWhenAvailable(By.Id(control.Id)); if (driver.HasElement(By.Id(control.Id + Elements.ElementId[Reference.SetValue.FlyOut]))) { var compcntrl = driver.FindElement(By.Id(control.Id + Elements.ElementId[Reference.SetValue.FlyOut])); foreach (var field in control.Fields) { compcntrl.FindElement(By.Id(Elements.ElementId[Reference.SetValue.CompositionLinkControl] + field.Id)).Click(); var result = compcntrl.FindElements(By.TagName("input")) .ToList() .FirstOrDefault(i => i.GetAttribute("id").Contains(field.Id)); text += result.GetAttribute("value"); } compcntrl.FindElement(By.Id(control.Id + Elements.ElementId[Reference.SetValue.Confirm])).Click(); } else { throw new InvalidOperationException($"Composite Control: {control.Id} Does not exist"); } return text; })); }
/// <summary> /// Placeholder /// </summary> /// <param name="control">The Composite control values you want to clear.</param> /// <example>xrmBrowser.QuickCreate.ClearValue(new CompositeControl {Id = "fullname"});</example> public BrowserCommandResult <bool> ClearValue(CompositeControl control) { return(this.Execute(GetOptions($"Clear QuickCreate ConpositeControl Value: {control.Id}"), driver => { driver.WaitUntilVisible(By.Id(control.Id)); if (!driver.HasElement(By.Id(control.Id))) { return false; } driver.ClickWhenAvailable(By.Id(control.Id)); if (driver.HasElement(By.Id(control.Id + Elements.ElementId[Reference.SetValue.FlyOut]))) { var compcntrl = driver.FindElement(By.Id(control.Id + Elements.ElementId[Reference.SetValue.FlyOut])); foreach (var field in control.Fields) { compcntrl.FindElement(By.Id(control.Id + Elements.ElementId[Reference.SetValue.CompositionLinkControl] + field.Id)).Click(true); var result = compcntrl.FindElements(By.TagName("input")) .ToList() .FirstOrDefault(i => i.GetAttribute("id").Contains(field.Id)); result?.Clear(); result?.SendKeys(Keys.Tab); if (compcntrl.IsVisible(By.Id(control.Id + Elements.ElementId[Reference.SetValue.CompositionLinkControl] + field.Id + "_warnSpan"))) { throw new InvalidOperationException($"The field {field.Id} has displayed a warning and cannot be cleared."); } } compcntrl.FindElement(By.Id(control.Id + Elements.ElementId[Reference.SetValue.Confirm])).Click(); } else { throw new InvalidOperationException($"Composite Control: {control.Id} Does not exist"); } return true; })); }
/// <summary> /// Sets the value of a Composite control on a QuickCreate form. /// </summary> /// <param name="control">The Composite control values you want to set.</param> public BrowserCommandResult <bool> SetValue(CompositeControl control) { return(this.Execute(GetOptions($"Set QuickCreate ConpositeControl Value: {control.Id}"), driver => { driver.WaitUntilVisible(By.Id(control.Id)); if (!driver.HasElement(By.Id(control.Id))) { return false; } driver.ClickWhenAvailable(By.Id(control.Id)); if (driver.HasElement(By.Id(control.Id + Elements.ElementId[Reference.SetValue.FlyOut]))) { var compcntrl = driver.FindElement(By.Id(control.Id + Elements.ElementId[Reference.SetValue.FlyOut])); foreach (var field in control.Fields) { compcntrl.FindElement(By.Id(control.Id + Elements.ElementId[Reference.SetValue.CompositionLinkControl] + field.Id)).Click(); var result = compcntrl.FindElements(By.TagName("input")) .ToList() .FirstOrDefault(i => i.GetAttribute("id").Contains(field.Id)); //BugFix - Setvalue -The value is getting erased even after setting the value ,might be due to recent CSS changes. driver.ExecuteScript("document.getElementById('" + result?.GetAttribute("id") + "').value = ''"); result?.SendKeys(field.Value); } compcntrl.FindElement(By.Id(control.Id + Elements.ElementId[Reference.SetValue.Confirm])).Click(); } else { throw new InvalidOperationException($"Unable to locate CompositeControl field '{control.Name}' on the QuickCreate form. Please verify the CompositeControl field exists and try again."); } return true; })); }
/// <summary> /// Sets the value of a Composite control. /// </summary> /// <param name="control">The Composite control values you want to set.</param> public new BrowserCommandResult <bool> SetValue(CompositeControl control) { return(this.Execute(GetOptions($"Set Conposite Control Value: {control.Id}"), driver => { if (!driver.HasElement(By.Id(control.Id))) { return false; } driver.ClickWhenAvailable(By.Id(control.Id)); if (driver.HasElement(By.Id(control.Id + Elements.ElementId[Reference.SetValue.FlyOut]))) { var compcntrl = driver.FindElement(By.Id(control.Id + Elements.ElementId[Reference.SetValue.FlyOut])); foreach (var field in control.Fields) { compcntrl.FindElement(By.Id(Elements.ElementId[Reference.SetValue.CompositionLinkControl] + field.Id)).Click(); var result = compcntrl.FindElements(By.TagName("input")) .ToList() .FirstOrDefault(i => i.GetAttribute("id").Contains(field.Id)); result?.SendKeys(field.Value); } compcntrl.FindElement(By.Id(control.Id + Elements.ElementId[Reference.SetValue.Confirm])).Click(); } else { throw new InvalidOperationException($"Composite Control: {control.Id} Does not exist"); } return true; })); }