コード例 #1
0
        private static ElementStrategy CreateStrategyForKeyedElement(string guid, bool orderIsRelevant)
        {
            var result = ElementStrategy.CreateForKeyedElement(guid, orderIsRelevant);

            result.ContextDescriptorGenerator = ContextGen;
            return(result);
        }
コード例 #2
0
        private static ElementStrategy CreateStrategyForElementKeyedByGuidInList()
        {
            var result = ElementStrategy.CreateForKeyedElementInList(SharedConstants.GuidStr);

            result.ContextDescriptorGenerator = ContextGen;
            return(result);
        }
コード例 #3
0
        public static void CheckElementDisplayed(ElementStrategy findBy, string strElementIdentifier, string strElementDetails)
        {
            var attempts = 0;

            while (attempts < NumberOfAttemtps)
            {
                try
                {
                    var objElement =
                        Resources.Driver.GetElement(findBy, strElementIdentifier);
                    objElement.WaitForElementVisible();
                    bool isPresent = objElement.IsDisplayed();
                    Resources.Report.Log(Resources.Test, Resources.Report.GetLogStatus(isPresent),
                                         String.Format(PageTitle + ": Verifying element '{0}' is displayed.", strElementDetails));
                    Assert.IsTrue(isPresent);
                    break;
                }
                catch (StaleElementReferenceException)
                {
                }
                catch (Exception)
                {
                }
                attempts++;
            }
        }
コード例 #4
0
        private static ElementStrategy CreateSingletonElementStrategy()
        {
            var result = ElementStrategy.CreateSingletonElement();

            result.ContextDescriptorGenerator = ContextGen;
            return(result);
        }
コード例 #5
0
 public SeleniumWebElement(IWebDriver wd, IWebElement element, ElementStrategy strategy, string identifier)
 {
     this.strategy   = strategy;
     this.identifier = identifier;
     this.driver     = wd;
     this.element    = element;
 }
コード例 #6
0
ファイル: XmlListMergerTests.cs プロジェクト: sillsdev/chorus
 protected override void AddMergeStrategies(XmlMerger m)
 {
     m.MergeStrategies.ElementStrategies.Add("a", ElementStrategy.CreateForKeyedElementInList("key"));
     m.MergeStrategies.ElementStrategies.Add("b", ElementStrategy.CreateForKeyedElementInList("key"));
     m.MergeStrategies.ElementStrategies.Add("c", ElementStrategy.CreateForKeyedElementInList("key"));
     m.MergeStrategies.ElementStrategies.Add("d", ElementStrategy.CreateForKeyedElementInList("key"));
 }
コード例 #7
0
        public static void CheckElementText(ElementStrategy findBy, string strElementIdentifier, string strElementDetails,
                                            string strTextToCheck)
        {
            var attempts = 0;

            while (attempts < NumberOfAttemtps)
            {
                try
                {
                    var objElement =
                        Resources.Driver.GetElement(findBy, strElementIdentifier);
                    objElement.WaitForElementVisible();
                    var strElementText = objElement.GetText();
                    objElement.WaitForTextChanged(strTextToCheck);
                    bool isEqual = strElementText.Contains(strTextToCheck);
                    Resources.Report.Log(Resources.Test, Resources.Report.GetLogStatus(isEqual),
                                         String.Format(PageTitle + ": Verifying text value of element '{0}' is displayed as '{1}'",
                                                       strElementDetails, strTextToCheck));
                    Assert.IsTrue(isEqual);
                    break;
                }
                catch (StaleElementReferenceException)
                {
                }
                catch (Exception)
                {
                }
                attempts++;
            }
        }
コード例 #8
0
        private static void SetupElementStrategies(XmlMerger merger)
        {
            merger.MergeStrategies.ElementToMergeStrategyKeyMapper = new BloomElementToStrategyKeyMapper();

            merger.MergeStrategies.SetStrategy("html", ElementStrategy.CreateSingletonElement());
            merger.MergeStrategies.SetStrategy("head", ElementStrategy.CreateSingletonElement());
            merger.MergeStrategies.SetStrategy("body", ElementStrategy.CreateSingletonElement());

            merger.MergeStrategies.SetStrategy("DataDiv", new ElementStrategy(true)
            {
                IsAtomic           = false,
                OrderIsRelevant    = false,
                MergePartnerFinder = new FindByKeyAttribute("id"),                 //yes, it's a singleton of sorts, but by the id, not the tag
            });

            merger.MergeStrategies.SetStrategy("BookDataItem", new ElementStrategy(true)
            {
                IsAtomic           = true,
                OrderIsRelevant    = false,
                MergePartnerFinder = new FindByMultipleKeyAttributes(new List <string>(new string[] { "data-book", "lang" }))
            });

            merger.MergeStrategies.SetStrategy("PageDiv", new ElementStrategy(true)
            {
                IsAtomic           = true,                                                                                               //we're not trying to merge inside pages
                MergePartnerFinder = new FindByKeyAttribute("id"),
            });
        }
コード例 #9
0
        public void SetTextWithJs(ElementStrategy parentControlFindByMethod, string parentControlFindByMethodInput, ElementStrategy findByMethod, string findByMethodInput, string textToSet)
        {
            IWebElement         webElement         = null;
            IJavaScriptExecutor javaScriptExecutor = this.driver as IJavaScriptExecutor;

            webElement = (parentControlFindByMethod != ElementStrategy.NA ? this.FindControl(parentControlFindByMethod, parentControlFindByMethodInput, findByMethod, findByMethodInput) : this.FindControl(findByMethod, findByMethodInput));
            javaScriptExecutor.ExecuteScript("arguments[0].textContent = arguments[1];", new object[] { webElement, textToSet });
        }
コード例 #10
0
 public void TestSetup()
 {
     _mergeStrategies = new MergeStrategies();
     _mergeStrategies.ElementStrategies.Add("a", ElementStrategy.CreateSingletonElement());
     _mergeStrategies.ElementStrategies.Add("b", ElementStrategy.CreateSingletonElement());
     _mergeStrategies.ElementStrategies.Add("c", ElementStrategy.CreateSingletonElement());
     _mergeStrategies.ElementStrategies.Add("d", ElementStrategy.CreateSingletonElement());
 }
コード例 #11
0
        private void SetupElementStrategies()
        {
            _annotationMerger.MergeStrategies.SetStrategy("annotation", ElementStrategy.CreateForKeyedElement("guid", false));
            var messageStrategy = ElementStrategy.CreateForKeyedElement("guid", false);

            messageStrategy.IsImmutable = true;
            _annotationMerger.MergeStrategies.SetStrategy("message", messageStrategy);
        }
コード例 #12
0
        public IReadOnlyCollection <IWebElement> FindControls(ElementStrategy parentControlFindByMethod, string parentControlFindByMethodInput, ElementStrategy findByMethod, string findByMethodInput)
        {
            IReadOnlyCollection <IWebElement> webElements = null;
            IWebElement webElement = this.FindControl(parentControlFindByMethod, parentControlFindByMethodInput);

            try
            {
                switch (findByMethod)
                {
                case ElementStrategy.XPATH:
                {
                    webElements = webElement.FindElements(By.XPath(findByMethodInput));
                    break;
                }

                case ElementStrategy.ID:
                {
                    webElements = webElement.FindElements(By.Id(findByMethodInput));
                    break;
                }

                case ElementStrategy.NAME:
                case ElementStrategy.LINK:
                case ElementStrategy.PLINK:
                {
                    break;
                }

                case ElementStrategy.CLASS:
                {
                    webElements = webElement.FindElements(By.ClassName(findByMethodInput));
                    break;
                }

                case ElementStrategy.TAG:
                {
                    webElements = webElement.FindElements(By.TagName(findByMethodInput));
                    break;
                }

                case ElementStrategy.NA:
                {
                    webElements = webElement.FindElements(By.Name(findByMethodInput));
                    break;
                }

                default:
                {
                    goto case ElementStrategy.PLINK;
                }
                }
            }
            catch (NoSuchElementException noSuchElementException)
            {
                Console.WriteLine(noSuchElementException.Message);
            }
            return(webElements);
        }
コード例 #13
0
        private static void AddTranslationStrategy(MergeStrategies mergeStrategies)
        {
            var strategy = new ElementStrategy(false)
            {
                MergePartnerFinder = new OptionalKeyAttrFinder("type", new FormMatchingFinder())
            };

            mergeStrategies.SetStrategy("translation", strategy);
        }
コード例 #14
0
        /// <summary>
        /// Return the ElementStrategy instance for the given <param name="element"/>, or a default instance set up like this:
        /// ElementStrategy def = new ElementStrategy(true);//review: this says the default is to consider order relevant
        /// def.MergePartnerFinder = new FindByEqualityOfTree();
        /// </summary>
        public ElementStrategy GetElementStrategy(XmlNode element)
        {
            var def = new ElementStrategy(true)
            {
                MergePartnerFinder = new FindByEqualityOfTree()
            };

            return(def);
        }
コード例 #15
0
        public void CanSetToTrue()
        {
            var elementStrategy = new ElementStrategy(false)
            {
                IsAtomic = true
            };

            Assert.IsTrue(elementStrategy.IsAtomic);
        }
コード例 #16
0
        public void Run_WeEditedTextElementInsideSingleton_ListenerGetsTextEditReport()
        {
            string ours     = @"<a><b>new</b></a>";
            string ancestor = @"<a><b>old</b></a>";

            XmlMerger merger = new XmlMerger(new NullMergeSituation());

            merger.MergeStrategies.SetStrategy("b", ElementStrategy.CreateSingletonElement());
            TestCompare <XmlTextChangedReport>(merger, ours, ancestor, "//a");
        }
コード例 #17
0
        internal static ElementStrategy AddKeyedElementType(MergeStrategies mergeStrategies, string name, string attribute, bool orderOfTheseIsRelevant)
        {
            var strategy = new ElementStrategy(orderOfTheseIsRelevant)
            {
                MergePartnerFinder = new FindByKeyAttribute(attribute)
            };

            mergeStrategies.SetStrategy(name, strategy);
            return(strategy);
        }
コード例 #18
0
        private static ElementStrategy CreateSingletonElementType(bool orderOfTheseIsRelevant)
        {
            var strategy = new ElementStrategy(orderOfTheseIsRelevant)
            {
                MergePartnerFinder         = SameNameFinder,
                ContextDescriptorGenerator = ContextGen
            };

            return(strategy);
        }
コード例 #19
0
        public List <IElement> GetElements(ElementStrategy strategy, string identifier)
        {
            List <IElement> xpElements = new List <IElement>();

            foreach (IWebElement webElement in this.driver.FindElements(Strategy.GetBy(strategy, identifier)))
            {
                xpElements.Add(new SeleniumWebElement(this.driver, webElement, strategy, identifier));
            }
            return(xpElements);
        }
コード例 #20
0
        private static void AddExampleSentenceStrategy(MergeStrategies mergeStrategies)
        {
            var strategy = new ElementStrategy(false)
            {
                MergePartnerFinder = new OptionalKeyAttrFinder("source", new FormMatchingFinder())
            };

            strategy.AttributesToIgnoreForMerging.Add("dateModified");
            mergeStrategies.SetStrategy("example", strategy);
        }
コード例 #21
0
        /* Called <pronunciation> in lift file.
         * private static void AddPhoneticStrategy(MergeStrategies mergeStrategies)
         * {
         *      var strategy = new ElementStrategy(false)
         *                                      {
         *                                              MergePartnerFinder = new FormMatchingFinder()
         *                                      };
         *      strategy.AttributesToIgnoreForMerging.Add("dateModified");
         *      mergeStrategies.SetStrategy("phonetic", strategy);
         * }*/

        private static void AddPronunciationStrategy(MergeStrategies mergeStrategies)
        {
            var strategy = new ElementStrategy(false)
            {
                MergePartnerFinder = new FormMatchingFinder()
            };

            strategy.AttributesToIgnoreForMerging.Add("dateModified");
            mergeStrategies.SetStrategy("pronunciation", strategy);
        }
コード例 #22
0
        internal static ElementStrategy AddSingletonElementType(MergeStrategies mergeStrategies, string name)
        {
            var strategy = new ElementStrategy(false)
            {
                MergePartnerFinder = new FindFirstElementWithSameName()
            };

            mergeStrategies.SetStrategy(name, strategy);
            return(strategy);
        }
コード例 #23
0
        /// <summary>
        /// Bootstrap a merger for the new-styled (nested) files.
        /// </summary>
        /// <remarks>
        /// 1. A generic 'header' element will be handled, although it may not appear in the file.
        /// 2. All classes will be included.
        /// 3. Merge strategies for class properties (regular or custom) will have keys of "classname+propname" to make them unique, system-wide.
        /// </remarks>
        private static void BootstrapSystem(MetadataCache metadataCache, XmlMerger merger)
        {
            merger.MergeStrategies.ElementToMergeStrategyKeyMapper = new FieldWorksElementToMergeStrategyKeyMapper();

            var sharedElementStrategies = new Dictionary <string, ElementStrategy>();

            CreateSharedElementStrategies(sharedElementStrategies);

            var strategiesForMerger = merger.MergeStrategies;

            ContextGen.MergeStrategies = strategiesForMerger;

            foreach (var sharedKvp in sharedElementStrategies)
            {
                strategiesForMerger.SetStrategy(sharedKvp.Key, sharedKvp.Value);
            }

            var customPropDefnStrat = new ElementStrategy(false)
            {
                MergePartnerFinder = new FindByMultipleKeyAttributes(new List <string> {
                    SharedConstants.Name, SharedConstants.Class
                }),
                ContextDescriptorGenerator = new FieldWorksCustomPropertyContextGenerator(),
                IsAtomic         = true,
                NumberOfChildren = NumberOfChildrenAllowed.Zero
            };

            strategiesForMerger.SetStrategy(SharedConstants.CustomField, customPropDefnStrat);

            var headerStrategy = CreateSingletonElementType(false);

            headerStrategy.ContextDescriptorGenerator = ContextGen;
            strategiesForMerger.SetStrategy(SharedConstants.Header, headerStrategy);

            // There are two abstract class names used: CmAnnotation and DsChart.
            // Chorus knows how to find the matching element for these, as they use <CmAnnotation class='concreteClassname'.
            // So, add a keyed strategy for each of them.
            var keyedStrat = ElementStrategy.CreateForKeyedElement(SharedConstants.GuidStr, false);

            keyedStrat.AttributesToIgnoreForMerging.Add(SharedConstants.Class);
            keyedStrat.AttributesToIgnoreForMerging.Add(SharedConstants.GuidStr);
            strategiesForMerger.SetStrategy(SharedConstants.CmAnnotation, keyedStrat);

            keyedStrat = ElementStrategy.CreateForKeyedElement(SharedConstants.GuidStr, false);
            keyedStrat.AttributesToIgnoreForMerging.Add(SharedConstants.Class);
            keyedStrat.AttributesToIgnoreForMerging.Add(SharedConstants.GuidStr);
            strategiesForMerger.SetStrategy(SharedConstants.DsChart, keyedStrat);

            foreach (var classInfo in metadataCache.AllConcreteClasses)
            {
                MakeClassStrategy(strategiesForMerger, classInfo, ContextGen);
                AddPropertyStrategiesForClass(strategiesForMerger, classInfo);
            }
        }
コード例 #24
0
        internal static void AddElementStrategies(MergeStrategies mergeStrategies)
        {
            // Document root.
            mergeStrategies.SetStrategy("LayoutInventory", ElementStrategy.CreateSingletonElement());

            #region 'layoutType' and children.
            mergeStrategies.SetStrategy("layoutType", ElementStrategy.CreateSingletonElement());

            var elStrat = new ElementStrategy(false)
            {
                MergePartnerFinder = new FindByMultipleKeyAttributes(new List <string> {
                    "class", "layout"
                }),
                NumberOfChildren           = NumberOfChildrenAllowed.Zero,
                IsAtomic                   = true,
                ContextDescriptorGenerator = new FieldWorkCustomLayoutContextGenerator()
            };
            mergeStrategies.SetStrategy("configure", elStrat);
            #endregion 'layoutType' and children.

            #region 'layout' and children.
            elStrat = new ElementStrategy(false)
            {
                MergePartnerFinder = new FindByMultipleKeyAttributes(new List <string> {
                    "class", "type", "name"
                }),
                ContextDescriptorGenerator = new FieldWorkCustomLayoutContextGenerator()
            };
            mergeStrategies.SetStrategy("layout", elStrat);

            elStrat = new ElementStrategy(true)
            {
                MergePartnerFinder = new FindByKeyAttributeInList("ref"),
                IsAtomic           = true
            };
            mergeStrategies.SetStrategy("part", elStrat);

            elStrat = new ElementStrategy(true)
            {
                //MergePartnerFinder = new FindByMultipleKeyAttributes(new List<string> { "class", "fieldType", "restrictions" }),
                MergePartnerFinder = new FindByKeyAttributeInList("combinedkey"),
                IsAtomic           = true
            };
            mergeStrategies.SetStrategy("generate", elStrat);

            elStrat = new ElementStrategy(true)
            {
                MergePartnerFinder = new FindByKeyAttributeInList("name"),
                IsAtomic           = true,
                NumberOfChildren   = NumberOfChildrenAllowed.Zero
            };
            mergeStrategies.SetStrategy("sublayout", elStrat);
            #endregion 'layout' and children.
        }
コード例 #25
0
        private static void AddKeyedElementType(IDictionary <string, ElementStrategy> sharedElementStrategies, string elementName, IFindNodeToMerge findBykeyAttribute, bool orderOfTheseIsRelevant, bool isAtomic)
        {
            var strategy = new ElementStrategy(orderOfTheseIsRelevant)
            {
                MergePartnerFinder         = findBykeyAttribute,
                ContextDescriptorGenerator = ContextGen,
                IsAtomic = isAtomic
            };

            sharedElementStrategies.Add(elementName, strategy);
        }
コード例 #26
0
        /// <summary>
        /// Gets the collection of element merge strategies.
        /// </summary>
        public MergeStrategies GetStrategies()
        {
            var merger = new XmlMerger(new MergeSituation(null, null, null, null, null, MergeOrder.ConflictHandlingModeChoices.WeWin));
            var def    = new ElementStrategy(true)
            {
                MergePartnerFinder = new FindByEqualityOfTree()
            };

            merger.MergeStrategies.SetStrategy("def", def);
            return(merger.MergeStrategies);
        }
コード例 #27
0
        public void Run_WeEditedTextElementInsideOneOfTWoKeyedElements_ListenerGetsTextEditReport()
        {
            // Gets report from MergeTextNodesMethod
            string ours     = @"<a><b id='foo'>new</b>   <b id='gaa'>same</b></a>";
            string ancestor = @"<a><b id='foo'>old</b>   <b id='gaa'>same</b></a>";

            XmlMerger merger = new XmlMerger(new NullMergeSituation());

            merger.MergeStrategies.SetStrategy("b", ElementStrategy.CreateForKeyedElement("id", false));
            TestCompare <XmlTextChangedReport>(merger, ours, ancestor, "//a");
        }
コード例 #28
0
        public static void EnterTextWithJs(ElementStrategy ElementStrategy, string identifier, string valueToEnter)
        {
            switch (ElementStrategy)
            {
            case ElementStrategy.ID:
                Resources.Driver.RunJavaScript("$('#" + identifier + "').val('" + valueToEnter + "')", Resources.Driver.GetCurrentWindowHandle());
                break;

            case ElementStrategy.XPATH:
                Resources.Driver.RunJavaScript("$x('#" + identifier + "').val('" + valueToEnter + "')", Resources.Driver.GetCurrentWindowHandle());
                break;
            }
        }
コード例 #29
0
        private static XmlMerger GetMerger(MergeSituation mergeSituation, out ListenerForUnitTests listener)
        {
            var elementStrategy = new ElementStrategy(false)
            {
                IsAtomic = true
            };
            var merger = new XmlMerger(mergeSituation);

            merger.MergeStrategies.SetStrategy("topatomic", elementStrategy);
            listener             = new ListenerForUnitTests();
            merger.EventListener = listener;
            return(merger);
        }
コード例 #30
0
        private static XmlMerger GetMerger(out ListenerForUnitTests listener, bool isAtomic)
        {
            var elementStrategy = new ElementStrategy(false)
            {
                IsAtomic = isAtomic
            };
            var merger = new XmlMerger(new NullMergeSituation());

            merger.MergeStrategies.SetStrategy("topatomic", elementStrategy);
            listener             = new ListenerForUnitTests();
            merger.EventListener = listener;
            return(merger);
        }