public BrowserCommandResult SetValue()

in Microsoft.Dynamics365.UIAutomation.Api/XrmPage.cs [1188:1286]


        public BrowserCommandResult<bool> SetValue(LookupItem control)
        {
            return this.Execute(GetOptions($"Set Lookup Value: {control.Name}"), driver =>
            {
                if (driver.HasElement(By.Id(control.Name)))
                {
                    var fieldContainer = driver.WaitUntilAvailable(By.Id(control.Name));

                    if (fieldContainer.Text != "" && control.Value != null)
                        SelectLookup(control, true, false);

                    driver.WaitUntilVisible(By.Id(control.Name));

                    fieldContainer = driver.ClickWhenAvailable(By.Id(control.Name));

                    if (fieldContainer.FindElement(By.ClassName(Elements.CssClass[Reference.SetValue.LookupRenderClass])) == null)
                        throw new InvalidOperationException($"Field: {control.Name} is not lookup");

                    var lookupSearchIcon = driver.WaitUntilAvailable(By.XPath(Elements.Xpath[Reference.Entity.GetLookupSearchIcon].Replace("[NAME]", control.Name)));

                    if (Browser.Options.BrowserType != BrowserType.Firefox)
                    {
                        var lookupIcon = fieldContainer.FindElement(By.ClassName("Lookup_RenderButton_td"));
                        lookupSearchIcon = driver.WaitUntilAvailable(By.XPath(Elements.Xpath[Reference.Entity.GetLookupSearchIcon].Replace("[NAME]", control.Name)));
                        lookupIcon.Hover(driver);
                        lookupIcon.Click(true);

                        /*
                        lookupSearchIcon.Hover(driver, true);
                        lookupSearchIcon.Click(true);

                        var lookupSearchIconImage = driver.FindElement(By.TagName("img"));
                        lookupSearchIconImage.Hover(driver, true);

                        Actions clickAction = new Actions(driver).SendKeys(Keys.Enter);
                        clickAction.Build().Perform();
                        */
                    }
                    else
                    {
                        var lookupIcon = fieldContainer.FindElement(By.ClassName("Lookup_RenderButton_td"));
                        lookupSearchIcon = driver.WaitUntilAvailable(By.XPath(Elements.Xpath[Reference.Entity.GetLookupSearchIcon].Replace("[NAME]", control.Name)));
                        lookupIcon.Hover(driver);
                        lookupIcon.Click(true);
                    }

                    var dialogName = $"Dialog_{control.Name}_IMenu";
                    var dialog = driver.WaitUntilAvailable(By.Id(dialogName));

                    var dialogItems = OpenDialog(dialog).Value;

                    if (dialogItems.Any())
                    {
                        var lookupMenuItem = dialogItems.Last();
                        lookupMenuItem.Element.Click();
                    }

                    if (control.Value != null)
                    {
                        SwitchToDialog();

                        driver.WaitUntilAvailable(By.XPath(Elements.Xpath[Reference.Grid.FindCriteria]));
                        driver.FindElement(By.XPath(Elements.Xpath[Reference.Grid.FindCriteria])).Clear();
                        driver.FindElement(By.XPath(Elements.Xpath[Reference.Grid.FindCriteria])).SendKeys(control.Value);
                        driver.ClickWhenAvailable(By.XPath(Elements.Xpath[Reference.Grid.FindCriteriaImg]));

                        var itemsTable = driver.WaitUntilAvailable(By.XPath(Elements.Xpath[Reference.Grid.GridBodyTable]));

                        if (itemsTable.GetAttribute("totalrecordcount") == "0")
                        {
                            throw new InvalidOperationException($"No records are available in this view for the Search'{control.Value}'");
                        }
                        var tbody = itemsTable.FindElement(By.TagName("tbody"));
                        var items = tbody.FindElements(By.TagName("tr"));

                        foreach (var item in items)
                        {
                            var primary = item.FindElements(By.TagName("td"))[1];
                            if (primary.Text.Contains(control.Value))
                            {
                                var checkbox = item.FindElements(By.TagName("td"))[0];

                                if (item.GetAttribute("selected") != "true")
                                    checkbox.Click();
                                break;
                            }
                        }

                        driver.ClickWhenAvailable(By.XPath(Elements.Xpath[Reference.LookUp.Begin]));

                        SwitchToContent();

                    }
                    else
                        throw new InvalidOperationException($"Field: {control.Name} Does not exist");
                }
                return true;
            });
        }