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;
});
}