예제 #1
0
        public DriverFixture()
        {
            _host = new WebHostBuilder()
                    .UseKestrelAnyLocalPort()
                    .ConfigureServices(services =>
            {
                services.AddRouting();
            })
                    .Configure(ConfigureApp)
                    .Build();

            Parallel.Invoke(
                () => _host.Start(),
                () => FirefoxDriver = new RemoteWebDriver(new FirefoxOptions().Headless()));

            _elementNaming = new ElementNaming();
            _config        = new PageTestingConfig();
            _baseUrl       = _host.Services
                             .GetService <IServer>()
                             .Features.Get <IServerAddressesFeature>()
                             .Addresses.First();

            var loggerFactory = LoggerConfigurations.CreateLoggerFactory(cfg =>
            {
                cfg.MinimumLevel.Override("Miru.PageTesting", LogEventLevel.Debug);
            });

            _logger = loggerFactory.CreateLogger <MiruNavigator>();
        }
예제 #2
0
 public ChromeNavigator(
     WebDriverWait wait,
     ElementNaming naming,
     Func <IWebElement> element,
     RemoteWebDriver driver,
     ILogger <MiruNavigator> logger,
     Func <PageExceptionContext, Exception> exceptionFunc = null) : base(wait, naming, element, driver, logger, exceptionFunc)
 {
 }
예제 #3
0
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            if (For != null)
            {
                var url = ViewContext.HttpContext.RequestServices.GetService <UrlLookup>();

                output.Attributes.SetAttribute("href", url.For(For));

                if (output.Attributes.ContainsName("id") == false)
                {
                    output.Attributes.SetAttribute("id", ElementNaming.Link(For));
                }
            }
        }
예제 #4
0
        public MiruNavigator(
            WebDriverWait wait,
            ElementNaming naming,
            Func <IWebElement> element,
            RemoteWebDriver driver,
            ILogger <MiruNavigator> logger,
            Func <PageExceptionContext, Exception> exceptionFunc = null)
        {
            Wait    = wait;
            Naming  = naming;
            Driver  = driver;
            Element = element;
            Logger  = logger;

            ExceptionHandle = exceptionFunc ?? DefaultExceptionFunc;
        }
예제 #5
0
        protected string GetId()
        {
            var modelType = GetModelType();

            if (modelType == ModelType.For)
            {
                return(For.Name);
            }

            if (modelType == ModelType.Model)
            {
                return(ElementNaming.Id(ViewContext.ViewData.Model));
            }

            throw new InvalidOperationException("Modeless view or partial not supported yet");
        }
예제 #6
0
        private static StringBuilder BuildValidationMessageTags(MiruValidationException validationException)
        {
            var html = new StringBuilder();

            foreach (var error in validationException.Errors)
            {
                var inputId = ElementNaming.BuildId(error.PropertyName);
                var validationMessageTagId = $"{inputId}-validation";

                var validationMessageTag =
                    new ValidationMessageTag(validationMessageTagId, inputId, error.ErrorMessage);

                var turboStreamTag = new TurboStreamTag("replace", validationMessageTagId)
                                     .AppendIntoTemplate(validationMessageTag);

                html.AppendLine(turboStreamTag.ToString());
            }

            return(html);
        }
예제 #7
0
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            var model = For.Model as IEnumerable;

            if (model == null)
            {
                throw new ArgumentException("Attribute 'for' has to be a IEnumerable");
            }

            if (model.GetEnumerator().MoveNext())
            {
                var modelType = For.Metadata.ContainerType ?? For.ModelExplorer.Container.ModelType;

                output.TagName = "table";
                output.Attributes.Add("id", ElementNaming.Id(modelType));
            }
            else
            {
                output.SuppressOutput();
            }
        }
예제 #8
0
 public ElementNamingTest()
 {
     _naming = new ElementNaming();
 }