@@ -32,72 +32,87 @@ public LocalBrowserFactory(IActionRetrier actionRetrier, IBrowserProfile browser
3232 {
3333 }
3434
35- protected override WebDriver Driver
35+ protected override WebDriver Driver => DriverContext . Driver ;
36+
37+ protected override DriverContext DriverContext
3638 {
3739 get
3840 {
3941 var commandTimeout = TimeoutConfiguration . Command ;
4042 var browserName = BrowserProfile . BrowserName ;
4143 var driverSettings = BrowserProfile . DriverSettings ;
42- WebDriver driver ;
44+ DriverContext driverCtx ;
4345 switch ( browserName )
4446 {
4547 case BrowserName . Chrome :
4648 case BrowserName . Yandex :
47- driver = GetDriver < ChromeDriver > ( ( ) => ChromeDriverService . CreateDefaultService ( ) ,
49+ driverCtx = GetDriverContext < ChromeDriver > ( ( ) => ChromeDriverService . CreateDefaultService ( ) ,
4850 ( ChromeOptions ) driverSettings . DriverOptions , commandTimeout ) ;
4951 break ;
5052 case BrowserName . Firefox :
5153 Func < DriverService > geckoServiceProvider = ( ) =>
5254 {
5355 var geckoService = FirefoxDriverService . CreateDefaultService ( ) ;
54- geckoService . Host = ( ( FirefoxSettings ) driverSettings ) . IsGeckoServiceHostDefaultEnabled ? HostAddressDefault : geckoService . Host ;
56+ geckoService . Host = ( ( FirefoxSettings ) driverSettings ) . IsGeckoServiceHostDefaultEnabled
57+ ? HostAddressDefault
58+ : geckoService . Host ;
5559 return geckoService ;
5660 } ;
5761
58- driver = GetDriver < FirefoxDriver > ( geckoServiceProvider , ( FirefoxOptions ) driverSettings . DriverOptions , commandTimeout ) ;
62+ driverCtx = GetDriverContext < FirefoxDriver > ( geckoServiceProvider , ( FirefoxOptions ) driverSettings . DriverOptions , commandTimeout ) ;
5963 break ;
6064 case BrowserName . IExplorer :
61- driver = GetDriver < InternetExplorerDriver > ( ( ) => InternetExplorerDriverService . CreateDefaultService ( ) ,
65+ driverCtx = GetDriverContext < InternetExplorerDriver > ( ( ) => InternetExplorerDriverService . CreateDefaultService ( ) ,
6266 ( InternetExplorerOptions ) driverSettings . DriverOptions , commandTimeout ) ;
6367 break ;
6468 case BrowserName . Edge :
65- driver = GetDriver < EdgeDriver > ( ( ) => EdgeDriverService . CreateDefaultService ( ) ,
69+ driverCtx = GetDriverContext < EdgeDriver > ( ( ) => EdgeDriverService . CreateDefaultService ( ) ,
6670 ( EdgeOptions ) driverSettings . DriverOptions , commandTimeout ) ;
6771 break ;
6872 case BrowserName . Opera :
6973 var config = new OperaConfig ( ) ;
70- var operaSettings = ( OperaSettings ) driverSettings ;
74+ var operaSettings = ( OperaSettings ) driverSettings ;
7175 var driverPath = new DriverManager ( ) . SetUpDriver ( config , operaSettings . WebDriverVersion , operaSettings . SystemArchitecture ) ;
72- driver = GetDriver < ChromeDriver > ( ( ) => ChromeDriverService . CreateDefaultService ( Path . GetDirectoryName ( driverPath ) , config . GetBinaryName ( ) ) ,
76+ driverCtx = GetDriverContext < ChromeDriver > ( ( ) => ChromeDriverService . CreateDefaultService ( Path . GetDirectoryName ( driverPath ) , config . GetBinaryName ( ) ) ,
7377 ( ChromeOptions ) driverSettings . DriverOptions , commandTimeout ) ;
7478 break ;
7579 case BrowserName . Safari :
76- driver = GetDriver < SafariDriver > ( ( ) => SafariDriverService . CreateDefaultService ( ) ,
80+ driverCtx = GetDriverContext < SafariDriver > ( ( ) => SafariDriverService . CreateDefaultService ( ) ,
7781 ( SafariOptions ) driverSettings . DriverOptions , commandTimeout ) ;
7882 break ;
7983 default :
8084 throw new NotSupportedException ( $ "Browser [{ browserName } ] is not supported.") ;
8185 }
82- return driver ;
86+
87+ return driverCtx ;
8388 }
8489 }
8590
86- private WebDriver GetDriver < T > ( Func < DriverService > driverServiceProvider , DriverOptions driverOptions , TimeSpan commandTimeout ) where T : WebDriver
91+ private DriverContext GetDriverContext < T > ( Func < DriverService > driverServiceProvider , DriverOptions driverOptions , TimeSpan commandTimeout ) where T : WebDriver
8792 {
8893 var currentBrowserVersionRegex = new Regex ( CurrentBrowserVersionPattern , RegexOptions . None , TimeoutConfiguration . Condition ) ;
8994 try
9095 {
91- return ( T ) Activator . CreateInstance ( typeof ( T ) , driverServiceProvider . Invoke ( ) , driverOptions , commandTimeout ) ;
96+ var context = CreateWebDriverInstance < T > ( driverServiceProvider , driverOptions , commandTimeout ) ;
97+ return context ;
9298 }
9399 catch ( TargetInvocationException exception )
94100 when ( exception . InnerException != null && currentBrowserVersionRegex . IsMatch ( exception . InnerException . Message ) )
95101 {
96102 Logger . Instance . Debug ( exception . InnerException . Message , exception ) ;
97103 var currentVersion = currentBrowserVersionRegex . Match ( exception . InnerException . Message ) . Groups [ 1 ] . Value ;
98104 Environment . SetEnvironmentVariable ( DriverVersionVariableName , currentVersion ) ;
99- return ( T ) Activator . CreateInstance ( typeof ( T ) , driverServiceProvider . Invoke ( ) , driverOptions , commandTimeout ) ;
105+ var context = CreateWebDriverInstance < T > ( driverServiceProvider , driverOptions , commandTimeout ) ;
106+ return context ;
100107 }
101108 }
109+
110+ private static DriverContext CreateWebDriverInstance < T > ( Func < DriverService > driverServiceProvider , DriverOptions driverOptions , TimeSpan commandTimeout ) where T : WebDriver
111+ {
112+ var driverService = driverServiceProvider . Invoke ( ) ;
113+ var driver = ( T ) Activator . CreateInstance ( typeof ( T ) , driverService , driverOptions , commandTimeout ) ;
114+ var context = new DriverContext ( driver , driverService ) ;
115+ return context ;
116+ }
102117 }
103118}
0 commit comments