Пример #1
0
        public Connection(
            ILoggerFactory loggerFactory,
            TransportTaskScheduler scheduler,
            string driversLocationPath  = null,
            string driverExecutablePath = null,
            string browsersPath         = null)
        {
            if (!string.IsNullOrEmpty(driverExecutablePath) && !string.IsNullOrEmpty(driversLocationPath))
            {
                throw new ArgumentException("Passing a driver executable path and a driver location path is not allowed");
            }

            if (!string.IsNullOrEmpty(browsersPath))
            {
                Environment.SetEnvironmentVariable(BrowsersPathEnvironmentVariable, Path.GetFullPath(browsersPath));
            }

            _loggerFactory = loggerFactory;
            _logger        = _loggerFactory?.CreateLogger <Connection>();
            var debugLogger = _loggerFactory?.CreateLogger <Playwright>();

            _rootObject = new ChannelOwnerBase(null, this, string.Empty);

            _playwrightServerProcess = GetProcess(driversLocationPath, driverExecutablePath);
            _playwrightServerProcess.StartInfo.Arguments = "--run";
            _playwrightServerProcess.Start();
            _playwrightServerProcess.Exited += (sender, e) => Close("Process exited");
            _transport = new StdIOTransport(_playwrightServerProcess, scheduler);
            _transport.MessageReceived += Transport_MessageReceived;
            _transport.LogReceived     += (s, e) => debugLogger?.LogInformation(e.Message);
            _transport.TransportClosed += (sender, e) => Close(e.CloseReason);
        }
 public SlowMoTransport(IConnectionTransport transport, int delay)
 {
     _delay    = delay;
     _delegate = transport;
     _delegate.MessageReceived += Delegate_MessageReceived;
     _delegate.Closed          += Delegate_Closed;
 }
        public FirefoxConnection(IConnectionTransport transport)
        {
            _transport = transport;
            _transport.MessageReceived += Transport_MessageReceived;
            _transport.Closed          += Transport_Closed;

            _asyncSessions = new AsyncDictionaryHelper <string, FirefoxSession>(_sessions, "Session {0} not found");
        }
        public ChromiumConnection(IConnectionTransport transport)
        {
            _transport = transport;
            _transport.MessageReceived += Transport_MessageReceived;
            _transport.Closed          += Transport_Closed;
            RootSession = new ChromiumSession(this, TargetType.Browser, string.Empty);
            _sessions.TryAdd(string.Empty, RootSession);

            _asyncSessions = new AsyncDictionaryHelper <string, ChromiumSession>(_sessions, "Session {0} not found");
        }
        public PlaywrightConnection(ILoggerFactory loggerFactory, TransportTaskScheduler scheduler)
        {
            _rootScript = CreateScope(string.Empty);

            _playwrightServerProcess = GetProcess();
            _playwrightServerProcess.Start();
            _transport = new StdIOTransport(_playwrightServerProcess, scheduler);
            _transport.MessageReceived += TransportOnMessageReceived;
            _loggerFactory              = loggerFactory;
        }
Пример #6
0
        internal Connection(string url, int delay, IConnectionTransport transport)
        {
            Url       = url;
            Delay     = delay;
            Transport = transport;

            Transport.MessageReceived += Transport_MessageReceived;
            Transport.Closed          += Transport_Closed;
            _callbacks     = new ConcurrentDictionary <int, MessageTask>();
            _sessions      = new ConcurrentDictionary <string, CDPSession>();
            _asyncSessions = new AsyncDictionaryHelper <string, CDPSession>(_sessions, "Session {0} not found");
        }
Пример #7
0
        internal Connection(string url, int delay, IConnectionTransport transport, ILoggerFactory loggerFactory = null)
        {
            LoggerFactory = loggerFactory ?? new LoggerFactory();
            Url           = url;
            Delay         = delay;
            Transport     = transport;

            _logger = LoggerFactory.CreateLogger <Connection>();

            Transport.MessageReceived += Transport_MessageReceived;
            Transport.Closed          += Transport_Closed;
            _callbacks = new ConcurrentDictionary <int, MessageTask>();
            _sessions  = new ConcurrentDictionary <string, CDPSession>();
        }
Пример #8
0
        internal Connection(string url, int delay, bool enqueueAsyncMessages, IConnectionTransport transport, ILoggerFactory loggerFactory = null)
        {
            LoggerFactory = loggerFactory ?? new LoggerFactory();
            Url           = url;
            Delay         = delay;
            Transport     = transport;

            _logger = LoggerFactory.CreateLogger <Connection>();

            Transport.MessageReceived += Transport_MessageReceived;
            Transport.Closed          += Transport_Closed;
            _callbacks     = new ConcurrentDictionary <int, MessageTask>();
            _sessions      = new ConcurrentDictionary <string, CDPSession>();
            MessageQueue   = new AsyncMessageQueue(enqueueAsyncMessages, _logger);
            _asyncSessions = new AsyncDictionaryHelper <string, CDPSession>(_sessions, "Session {0} not found");
        }
Пример #9
0
        public static async Task <IConnectionTransport> CreateTransportAsync(ConnectOptions options)
        {
            if (!string.IsNullOrEmpty(options.BrowserWSEndpoint) && options.TransportFactory != null)
            {
                throw new ArgumentException("Exactly one of BrowserWSEndpoint or TransportFactory must be passed to connect");
            }

            IConnectionTransport transport = null;

            if (options.TransportFactory != null)
            {
                transport = await options.TransportFactory(new Uri(options.BrowserWSEndpoint), options).ConfigureAwait(false);
            }
            else if (!string.IsNullOrEmpty(options.BrowserWSEndpoint))
            {
#pragma warning disable CA2000 // Call dispose, this is a false alarm.
                transport = await WebSocketTransport.CreateAsync(options).ConfigureAwait(false);

#pragma warning restore CA2000
            }

            return(SlowMoTransport.Wrap(transport, options.SlowMo));
        }
Пример #10
0
 internal static IConnectionTransport Wrap(IConnectionTransport transport, int delay) => delay > 0 ? new SlowMoTransport(transport, delay) : transport;
Пример #11
0
 public Connection(IConnectionTransport transport)
 {
     transport.MessageReceived += TransportOnMessageReceived;
 }