public WebElementWithReferenceViewModel(WebElementReference webElementReference) : base(webElementReference) { ReferenceBreadString = webElementReference.TreePathToReferencedElement; HasLocator = webElementReference.Locator != null; ReferencedWebElement = WebElementsViewModelsHelper.CreateModelFromInfo(webElementReference.ReferencedElement); ReferencedWebElement.Parent = this; if (ReferencedWebElement is CombinedWebElementInfoViewModel cmb) { if (cmb.Elements != null) { Elements = new ObservableCollection <WebElementInfoViewModel>(); foreach (var c in cmb.Elements) { Elements.Add(c); c.Parent = this; } } } }
public static WebElementInfo CreateInfoFromModel(WebElementInfoViewModel model, CombinedWebElementInfo parent = null) { WebElementInfo info = null; switch (model) { case WebElementWithReferenceViewModel wr: { var innerInfo = CreateInfoFromModel(wr.ReferencedWebElement); switch (wr.ElementType) { case WebElementTypes.Frame: var f = new FrameWebElementInfo(); f.TreePathToInnerElement = wr.ReferenceBreadString; innerInfo.Parent = f; f.InnerElement = innerInfo; info = f; break; case WebElementTypes.Reference: var r = new WebElementReference(); r.TreePathToReferencedElement = wr.ReferenceBreadString; innerInfo.Parent = r; r.ReferencedElement = innerInfo; info = r; break; default: throw new Exception($"Unexpected WebElementWithReferenceViewModel ElementType: {wr.ElementType}"); } } break; case CombinedWebElementInfoViewModel combinedModel: { CombinedWebElementInfo combined = null; switch (combinedModel.ElementType) { case WebElementTypes.Context: combined = new WebContextInfo(); break; case WebElementTypes.DropDown: combined = new DropDownElementInfo(); break; case WebElementTypes.RadioGroup: combined = new RadioGroupElementInfo(); break; case WebElementTypes.Directory: combined = new WebElementsDirectory(); break; case WebElementTypes.Control: combined = new CombinedWebElementInfo(); break; case WebElementTypes.Page: { var wpModel = model as WebPageInfoViewModel; var wpInfo = new WebPageInfo(); wpInfo.DefaultUrl = wpModel.DefaultUrl; wpInfo.UrlRegexString = wpModel.UrlRegexString; combined = wpInfo; } break; default: throw new Exception($"Unexpected combinedModel.ElementType: {combinedModel.ElementType}"); } info = combined; combined.Elements = combinedModel.Elements ?.Select(em => CreateInfoFromModel(em, combined)) .ToList(); } break; default: info = new WebElementInfo(); break; } info.Name = model.Name; info.Description = model.Description; info.InnerKey = model.InnerKey; info.Tags = model.Tags?.ToList(); info.Locator = model.Locator?.GetLocatorInfo(); info.IsKey = model.IsKey; info.Parent = parent; return(info); }