Exemple #1
0
        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);
        }