예제 #1
0
        public static void WaitReload(this IEntityButtonContainer container, Action action)
        {
            var ticks = container.TestTicks() !.Value;

            action();
            container.Element.GetDriver().Wait(() => container.TestTicks().Let(t => t != null && t != ticks));
        }
예제 #2
0
        public static void WaitReload(this IEntityButtonContainer container, Action action)
        {
            var ticks = container.TestTicks().Value;

            action();
            container.Selenium.Wait(() => container.TestTicks().Let(t => t != null && t != ticks));
        }
예제 #3
0
        public static FrameModalProxy <T> ConstructFrom <F, T>(this IEntityButtonContainer <F> container, ConstructSymbol <T> .From <F> symbol)
            where T : Entity
            where F : Entity
        {
            var element = container.OperationClickCapture(symbol);

            return(new FrameModalProxy <T>(element).WaitLoaded());
        }
예제 #4
0
        public static NormalPage <T> ConstructFromNormalPageSaved <F, T>(this IEntityButtonContainer <F> container, ConstructSymbol <T> .From <F> symbol)
            where T : Entity
            where F : Entity
        {
            container.OperationClick(symbol);

            return(new NormalPage <T>(container.Selenium, null).WaitLoaded());
        }
예제 #5
0
        public static NormalPage <T> OperationNormalPageNew <T>(this IEntityButtonContainer container, IOperationSymbolContainer symbol)
            where T : Entity
        {
            container.ButtonClick(symbol.Symbol.KeyWeb());

            container.Selenium.Wait(() => { try { return(container.RuntimeInfo().IsNew); } catch { return(false); } });

            return(new NormalPage <T>(container.Selenium, null));
        }
예제 #6
0
        public static FramePageProxy <T> ConstructFromNormalPage <F, T>(this IEntityButtonContainer <F> container, ConstructSymbol <T> .From <F> symbol)
            where T : Entity
            where F : Entity
        {
            container.OperationClick(symbol);

            container.Element.GetDriver().Wait(() => { try { return(container.EntityInfo().IsNew); } catch { return(false); } });

            return(new FramePageProxy <T>(container.Element.GetDriver()));
        }
예제 #7
0
        public static NormalPage <T> ConstructFromNormalPageNew <F, T>(this IEntityButtonContainer <F> container, ConstructSymbol <T> .From <F> symbol)
            where T : Entity
            where F : Entity
        {
            container.OperationClick(symbol);

            container.Selenium.Wait(() => { try { return(container.RuntimeInfo().IsNew); } catch { return(false); } });

            return(new NormalPage <T>(container.Selenium, null));
        }
예제 #8
0
 public static long?RefreshCount(this IEntityButtonContainer container)
 {
     try
     {
         return(container.Element.TryFindElement(By.CssSelector("div.sf-main-control[data-refresh-count]"))?.GetAttribute("data-refresh-count").ToLong());
     }
     catch
     {
         return(null);
     }
 }
예제 #9
0
        public static PopupControl <T> OperationPopup <T>(this IEntityButtonContainer container, IOperationSymbolContainer symbol, string prefix = "New")
            where T : ModifiableEntity
        {
            container.ButtonClick(symbol.Symbol.KeyWeb());

            var popup = new PopupControl <T>(container.Selenium, prefix);

            container.Selenium.WaitElementPresent(popup.PopupLocator);

            return(popup);
        }
예제 #10
0
 public static long?TestTicks(this IEntityButtonContainer container)
 {
     try
     {
         return(container.Element.TryFindElement(By.CssSelector("div.sf-main-control[data-test-ticks]"))?.GetAttribute("data-test-ticks").ToLong());
     }
     catch
     {
         return(null);
     }
 }
예제 #11
0
 public static long?TestTicks(this IEntityButtonContainer container)
 {
     try
     {
         return(((string)container.Selenium.ExecuteScript("return $ && $('#" + container.PrefixUnderscore() + "divMainControl').attr('data-test-ticks')")).ToLong());
     }
     catch
     {
         return(null);
     }
 }
예제 #12
0
    public static void WaitReload(this IEntityButtonContainer container, Action action)
    {
        var oldCount = container.RefreshCount() !.Value;

        action();
        container.Element.GetDriver().Wait(() =>
        {
            var newCount = container.RefreshCount();
            return(newCount != null && newCount != oldCount);
        });
    }
예제 #13
0
        public static PopupControl <T> ConstructFromPopup <F, T>(this IEntityButtonContainer <F> container, ConstructSymbol <T> .From <F> symbol, string prefix = "New")
            where T : Entity
            where F : Entity
        {
            container.OperationClick(symbol);

            var popup = new PopupControl <T>(container.Selenium, prefix);

            container.Selenium.WaitElementPresent(popup.PopupLocator);

            return(popup);
        }
예제 #14
0
 public static void ExecuteAjax <T>(this IEntityButtonContainer <T> container, ExecuteSymbol <T> symbol, bool consumeAlert = false)
     where T : Entity
 {
     container.WaitReload(() =>
     {
         container.OperationClick(symbol);
         if (consumeAlert)
         {
             container.Selenium.ConsumeAlert();
         }
     });
 }
예제 #15
0
        public static WebElementLocator OperationButton(this IEntityButtonContainer container, OperationSymbol symbol, string?groupId = null)
        {
            if (groupId != null)
            {
                var groupButton = container.Element.WaitElementVisible(By.Id(groupId));
                if (groupButton.GetAttribute("aria-expanded") != "true")
                {
                    groupButton.Click();
                }

                return(container.ContainerElement().WithLocator(By.CssSelector($"a[data-operation='{symbol.Key}']")));
            }

            return(container.ContainerElement().WithLocator(By.CssSelector($"button[data-operation='{symbol.Key}']")));
        }
예제 #16
0
        public static void Execute <T>(this IEntityButtonContainer <T> container, ExecuteSymbol <T> symbol, bool consumeAlert = false, bool checkValidationErrors = true)
            where T : Entity
        {
            container.WaitReload(() =>
            {
                container.OperationClick(symbol);
                if (consumeAlert)
                {
                    container.Element.GetDriver().CloseMessageModal(MessageModalButton.Yes);
                }
            });

            var vs = container as IValidationSummaryContainer;

            if (checkValidationErrors && vs != null)
            {
                AssertNoErrors(vs);
            }
        }
예제 #17
0
 public static void OperationClick <T>(this IEntityButtonContainer <T> container, IEntityOperationSymbolContainer <T> symbol)
     where T : Entity
 {
     container.ButtonClick(symbol.Symbol.KeyWeb());
 }
예제 #18
0
        public static void ButtonClick(this IEntityButtonContainer container, string idButton)
        {
            var button = container.Selenium.FindElement(container.ButtonLocator(idButton));

            button.ButtonClick();
        }
예제 #19
0
 public static bool OperationDisabled <T>(this IEntityButtonContainer <T> container, IEntityOperationSymbolContainer <T> symbol)
     where T : Entity
 {
     return(container.ButtonDisabled(symbol.Symbol.KeyWeb()));
 }
예제 #20
0
        public static bool ButtonDisabled(this IEntityButtonContainer container, string idButton)
        {
            By locator = container.ButtonLocator(idButton);

            return(container.Selenium.IsElementPresent(locator.CombineCss("[disabled]")));
        }
예제 #21
0
 public static By OperationLocator <T>(this IEntityButtonContainer <T> container, IEntityOperationSymbolContainer <T> symbol)
     where T : Entity
 {
     return(container.ButtonLocator(symbol.Symbol.KeyWeb()));
 }
예제 #22
0
 public static By ButtonLocator(this IEntityButtonContainer container, string buttonId)
 {
     return(container.ContainerLocator().CombineCss(" #" + "_".CombineIfNotEmpty(container.Prefix, buttonId)));
 }
예제 #23
0
 public static IWebElement OperationClickCapture <T>(this IEntityButtonContainer <T> container, IEntityOperationSymbolContainer <T> symbol)
     where T : Entity
 {
     return(container.OperationClickCapture(symbol.Symbol));
 }
예제 #24
0
 public static bool OperationDisabled(this IEntityButtonContainer container, OperationSymbol symbol)
 {
     return(container.OperationButton(symbol).Find().GetAttribute("disabled") != null);
 }
예제 #25
0
 public static bool HasChanges(this IEntityButtonContainer container)
 {
     return(container.Selenium.IsElementPresent(By.CssSelector("#{0}divMainControl.sf-changed".FormatWith(container.PrefixUnderscore()))));
 }
예제 #26
0
 public static WebElementLocator OperationButton <T>(this IEntityButtonContainer <T> container, IEntityOperationSymbolContainer <T> symbol)
     where T : Entity
 {
     return(container.OperationButton(symbol.Symbol));
 }
예제 #27
0
 public static void OperationClick(this IEntityButtonContainer container, OperationSymbol symbol)
 {
     container.OperationButton(symbol).Find().ButtonClick();
 }
예제 #28
0
 public static IWebElement OperationClickCapture(this IEntityButtonContainer container, OperationSymbol symbol)
 {
     return(container.OperationButton(symbol).Find().CaptureOnClick());
 }
예제 #29
0
 public static WebElementLocator OperationButton(this IEntityButtonContainer container, OperationSymbol symbol)
 {
     return(container.ContainerElement().WithLocator(By.CssSelector($"button[data-operation='{symbol.Key}']")));
 }
예제 #30
0
 public static Lite <T> GetLite <T>(this IEntityButtonContainer <T> container) where T : Entity
 {
     return((Lite <T>)container.RuntimeInfo().ToLite());
 }