public void CreateFactoryFromConfig_can_pass_non_option_parameters_through(IConfigurationReader configReader,
                                                                                   IReadsEnvironmentVariables env,
                                                                                   [NoAutoProperties] WebDriverFactoryConfigurationSection config,
                                                                                   IDictionary <string, object> caps,
                                                                                   IGetsBrowserFlags flagsProvider,
                                                                                   string scenarioName)
        {
            // Arrange
            var envVars = new Dictionary <string, string>();

            Mock.Get(configReader)
            .Setup(x => x.ReadSection <WebDriverFactoryConfigurationSection>())
            .Returns(config);
            Mock.Get(env)
            .Setup(x => x.GetEnvironmentVariables())
            .Returns(envVars);

            config.WebDriverFactoryAssemblyQualifiedType = typeof(DummyBrowserFactory).AssemblyQualifiedName;

            var sut = new WebDriverFactorySource(configurationReader: configReader,
                                                 environmentReader: env);

            // Act
            var factory = sut.CreateFactoryFromConfig();
            var result  = GetProxiedFactory(factory);

            factory.CreateWebDriver(caps, flagsProvider, scenarioName);

            // Assert
            Assert.That(result.CapturedName, Is.EqualTo(scenarioName));
            Assert.That(result.CapturedCapabilities, Is.SameAs(caps));
            Assert.That(result.CapturedFlagsProvider, Is.SameAs(flagsProvider));
        }
Beispiel #2
0
        /// <summary>
        /// Creates a new remote web driver proxy wrapping the given driver, then returns that proxy.
        /// </summary>
        /// <remarks>
        /// <para>
        /// The wrapping of a web driver with a proxy allows us to extend its functionality.
        /// </para>
        /// </remarks>
        /// <returns>The proxied web driver.</returns>
        /// <param name="driver">A remote web driver.</param>
        /// <param name="flagsProvider">A service which provides browser flags.</param>
        /// <param name="desiredCapabilities">A collection of the desired capabilities for the web driver.</param>
        protected virtual IWebDriver WrapWithProxy(RemoteWebDriver driver,
                                                   IGetsBrowserFlags flagsProvider,
                                                   ICapabilities desiredCapabilities = null)
        {
            var proxyFactory = GetProxyFactory();

            return(proxyFactory.WrapWithProxy(driver, flagsProvider, desiredCapabilities));
        }
Beispiel #3
0
        /// <summary>
        /// Gets the browser flags from a service.
        /// </summary>
        /// <returns>The flags.</returns>
        /// <param name="driver">The web driver.</param>
        /// <param name="flagsProvider">A flags provider service.</param>
        /// <param name="desiredCapabilities">The desired capabilities.</param>
        protected virtual IReadOnlyCollection <string> GetFlags(IHasCapabilities driver,
                                                                IGetsBrowserFlags flagsProvider,
                                                                ICapabilities desiredCapabilities)
        {
            var identification = identificationFactory.GetIdentification(driver, desiredCapabilities);

            return(flagsProvider?.GetFlags(identification));
        }
Beispiel #4
0
        /// <summary>
        /// Creates and returns a web driver instance.
        /// </summary>
        /// <returns>The web driver.</returns>
        /// <param name="requestedCapabilities">A collection of requested web driver capabilities.</param>
        /// <param name="options">A factory options instance.</param>
        /// <param name="flagsProvider">A service which derives a collection of browser flags for the created web driver.</param>
        /// <param name="scenarioName">The name for the current test scenario.</param>
        public override IWebDriver CreateWebDriver(IDictionary <string, object> requestedCapabilities,
                                                   LocalChromeOptions options,
                                                   IGetsBrowserFlags flagsProvider,
                                                   string scenarioName)
        {
            var webDriver = GetWebDriver(requestedCapabilities, options);

            return(WrapWithProxy(webDriver, flagsProvider));
        }
Beispiel #5
0
        /// <summary>
        /// Creates and returns a web driver instance.
        /// </summary>
        /// <returns>The web driver.</returns>
        /// <param name="requestedCapabilities">A collection of requested web driver capabilities.</param>
        /// <param name="options">A factory options instance.</param>
        /// <param name="flagsProvider">A service which derives a collection of browser flags for the created web driver.</param>
        /// <param name="scenarioName">The name for the current test scenario.</param>
        public override IWebDriver CreateWebDriver(IDictionary <string, object> requestedCapabilities,
                                                   RemoteDriverOptions options,
                                                   IGetsBrowserFlags flagsProvider,
                                                   string scenarioName)
        {
            var desiredCapabilities = GetDesiredCapabilities(requestedCapabilities, options);
            var webDriver           = GetWebDriver(desiredCapabilities, options);

            return(WrapWithProxy(webDriver, flagsProvider, desiredCapabilities));
        }
        public void CreateProvider_passes_flags_provider_to_proxied_factory([Frozen] ICreatesWebDriverFromOptions proxied,
                                                                            OptionsCachingDriverFactoryProxy sut,
                                                                            IGetsBrowserFlags flagsProvider)
        {
            // Act
            sut.CreateWebDriver(flagsProvider: flagsProvider);

            // Assert
            Mock.Get(proxied)
            .Verify(x => x.CreateWebDriver(It.IsAny <object>(), It.IsAny <IDictionary <string, object> >(), flagsProvider, It.IsAny <string>()), Times.Once);
        }
            public override IWebDriver CreateWebDriver(IDictionary <string, object> requestedCapabilities,
                                                       DummyBrowserOptions options,
                                                       IGetsBrowserFlags flagsProvider,
                                                       string scenarioName)
            {
                CapturedCapabilities  = requestedCapabilities;
                CapturedOptions       = options;
                CapturedFlagsProvider = flagsProvider;
                CapturedName          = scenarioName;

                return(Mock.Of <IWebDriver>());
            }
Beispiel #8
0
        /// <summary>
        /// Wraps the given web driver in a proxy and returns that proxy.
        /// </summary>
        /// <returns>The web driver proxy.</returns>
        /// <param name="driver">The web driver to wrap.</param>
        /// <param name="flagsProvider">A service which provides web browser flags.</param>
        /// <param name="desiredCapabilities">A collection of the originally-requested browser capabilities.</param>
        public IWebDriver WrapWithProxy(RemoteWebDriver driver,
                                        IGetsBrowserFlags flagsProvider,
                                        ICapabilities desiredCapabilities)
        {
            if (driver == null)
            {
                throw new ArgumentNullException(nameof(driver));
            }

            var flags = GetFlags(driver, flagsProvider, desiredCapabilities);

            return(GetProxy(driver, flags, desiredCapabilities?.Version));
        }
Beispiel #9
0
        /// <summary>
        /// Creates and returns a web driver instance.
        /// </summary>
        /// <returns>The web driver.</returns>
        /// <param name="requestedCapabilities">A collection of requested web driver capabilities.</param>
        /// <param name="options">A factory options instance.</param>
        /// <param name="flagsProvider">A service which derives a collection of browser flags for the created web driver.</param>
        /// <param name="scenarioName">The name for the current test scenario.</param>
        public override IWebDriver CreateWebDriver(IDictionary <string, object> requestedCapabilities,
                                                   RemoteDriverOptions options,
                                                   IGetsBrowserFlags flagsProvider,
                                                   string scenarioName)
        {
            var requestedCaps = requestedCapabilities ?? new Dictionary <string, object>();

            if (scenarioName != null)
            {
                requestedCaps[ScenarioNameCapabilityName] = scenarioName;
            }

            return(base.CreateWebDriver(requestedCaps, options, flagsProvider, scenarioName));
        }
        public void CreateFactoryFromConfig_can_derive_and_cache_options_correctly(IConfigurationReader configReader,
                                                                                   IReadsEnvironmentVariables env,
                                                                                   [NoAutoProperties] WebDriverFactoryConfigurationSection config,
                                                                                   IDictionary <string, object> caps,
                                                                                   IGetsBrowserFlags flagsProvider,
                                                                                   string scenarioName)
        {
            // Arrange
            var envVars = new Dictionary <string, string>();

            Mock.Get(configReader)
            .Setup(x => x.ReadSection <WebDriverFactoryConfigurationSection>())
            .Returns(config);
            Mock.Get(env)
            .Setup(x => x.GetEnvironmentVariables())
            .Returns(envVars);

            envVars.Add("Env_AnotherDummyNumber", "20");
            envVars.Add("Env_DummyString", "Ohai");
            envVars.Add("Invalid_DummyNumber", "8");

            config.WebDriverFactoryAssemblyQualifiedType = typeof(DummyBrowserFactory).AssemblyQualifiedName;
            config.EnvironmentVariableSupportEnabled     = true;
            config.EnvironmentVariablePrefix             = "Env_";
            config.FactoryOptions.Add(new FactoryOption {
                Name = "DummyString", Value = "Should be overridden"
            });
            config.FactoryOptions.Add(new FactoryOption {
                Name = "DummyNumber", Value = "5"
            });

            var sut = new WebDriverFactorySource(configurationReader: configReader,
                                                 environmentReader: env);

            // Act
            var factory = sut.CreateFactoryFromConfig();
            var result  = GetProxiedFactory(factory);

            factory.CreateWebDriver(caps, flagsProvider, scenarioName);

            // Assert
            Assert.That(result.CapturedOptions.DummyString, Is.EqualTo("Ohai"));
            Assert.That(result.CapturedOptions.DummyNumber, Is.EqualTo(5));
            Assert.That(result.CapturedOptions.AnotherDummyNumber, Is.EqualTo(20));
        }
Beispiel #11
0
 /// <summary>
 /// Creates and returns a web driver instance.
 /// </summary>
 /// <returns>The web driver.</returns>
 /// <param name="requestedCapabilities">A collection of requested web driver capabilities.</param>
 /// <param name="options">A factory options instance.</param>
 /// <param name="flagsProvider">A service which derives a collection of browser flags for the created web driver.</param>
 /// <param name="scenarioName">The name for the current test scenario.</param>
 public abstract IWebDriver CreateWebDriver(IDictionary <string, object> requestedCapabilities,
                                            TOptions options,
                                            IGetsBrowserFlags flagsProvider,
                                            string scenarioName);
Beispiel #12
0
 IWebDriver ICreatesWebDriverFromOptions.CreateWebDriver(object options,
                                                         IDictionary <string, object> requestedCapabilities,
                                                         IGetsBrowserFlags flagsProvider,
                                                         string scenarioName)
 => CreateWebDriver(requestedCapabilities, (TOptions)options, flagsProvider, scenarioName);
Beispiel #13
0
 IWebDriver ICreatesWebDriver.CreateWebDriver(IDictionary <string, object> requestedCapabilities,
                                              IGetsBrowserFlags flagsProvider,
                                              string scenarioName)
 => CreateWebDriver(requestedCapabilities, null, flagsProvider, scenarioName);
 public IWebDriver CreateWebDriver(IDictionary <string, object> requestedCapabilities = null,
                                   IGetsBrowserFlags flagsProvider = null,
                                   string scenarioName             = null)
 {
     throw new NotImplementedException();
 }
Beispiel #15
0
 /// <summary>
 /// Creates and returns a web driver instance.
 /// </summary>
 /// <returns>The web driver.</returns>
 /// <param name="requestedCapabilities">An optional collection of requested web driver capabilities.</param>
 /// <param name="flagsProvider">An optional service which derives a collection of browser flags for the created web driver.</param>
 /// <param name="scenarioName">An optional name for the current test scenario.</param>
 public IWebDriver CreateWebDriver(IDictionary <string, object> requestedCapabilities = null,
                                   IGetsBrowserFlags flagsProvider = null,
                                   string scenarioName             = null)
 => proxiedFactory.CreateWebDriver(options, requestedCapabilities, flagsProvider, scenarioName);