public BrowserCommandResult SelectLookup()

in Microsoft.Dynamics365.UIAutomation.Api/XrmPage.cs [639:729]


        public BrowserCommandResult<bool> SelectLookup(LookupItem field, bool clearFieldValue = true, bool openLookupPage = true)
        {
            return this.Execute(GetOptions($"Select Lookup for: {field.Name}"), driver =>
            {
                if (driver.HasElement(By.Id(field.Name)))
                {
                    var fieldContainer = driver.WaitUntilAvailable(By.XPath(Elements.Xpath[Reference.Entity.FieldContainer].Replace("[NAME]", field.Name)));

                    if (fieldContainer.Text != "" && clearFieldValue)
                    {
                        if (Browser.Options.BrowserType != BrowserType.Firefox)
                        {
                            fieldContainer.Hover(driver, true);
                            fieldContainer.Click(true);

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

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

                            Actions clickAction = new Actions(driver).SendKeys(Keys.Enter);
                            clickAction.Build().Perform();
                        }
                        else if (Browser.Options.BrowserType == BrowserType.Firefox)
                        {
                            fieldContainer.Hover(driver, true);
                            var lookupIcon = fieldContainer.FindElement(By.Id("[NAME]_lookupSearchIconDiv".Replace("[NAME]", field.Name)));
                            lookupIcon.Hover(driver, true);
                            lookupIcon.Click(true);
                        }

                        var lookupMenuName = $"Dialog_{field.Name}_IMenu";
                        var lookupMenu = driver.WaitUntilAvailable(By.Id(lookupMenuName));

                        var lookupMenuItems = OpenDialog(lookupMenu).Value;

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

                        driver.WaitUntilAvailable(By.Id("InlineDialog"), new TimeSpan(0, 0, 5));
                        SwitchToDialog();
                        driver.WaitUntilAvailable(By.XPath(Elements.Xpath[Reference.LookUp.Remove]));
                        driver.ClickWhenAvailable(By.XPath(Elements.Xpath[Reference.LookUp.Remove]));

                        SwitchToContent();

                        driver.WaitForPageToLoad();
                        driver.WaitUntilClickable(By.XPath(Elements.Xpath[Reference.Entity.Form]),
                                                    TimeSpan.FromSeconds(30),
                                                    "CRM Record is Unavailable or not finished loading. Timeout Exceeded"
                                                    );
                    }
                    else if (fieldContainer.Text != "" && !clearFieldValue)
                    {
                        fieldContainer.Click();
                        return true;
                    }

                    if (!openLookupPage)
                        return true;

                    var input = driver.ClickWhenAvailable(By.Id(field.Name));

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

                    input.FindElement(By.ClassName(Elements.CssClass[Reference.SetValue.LookupRenderClass])).Click();

                    Browser.ThinkTime(1000);
                    var dialogName = $"Dialog_{field.Name}_IMenu";
                    var dialog = driver.WaitUntilAvailable(By.Id(dialogName));

                    var dialogItems = OpenDialog(dialog).Value;

                    if (dialogItems.Any())
                    {
                        var dialogItem = dialogItems.Last();
                        dialogItem.Element.Click();
                    }
                }
                else
                    throw new InvalidOperationException($"Field: {field.Name} Does not exist");

                return true;

            });
        }