@@ -32,72 +32,87 @@ public LocalBrowserFactory(IActionRetrier actionRetrier, IBrowserProfile browser
32
32
{
33
33
}
34
34
35
- protected override WebDriver Driver
35
+ protected override WebDriver Driver => DriverContext . Driver ;
36
+
37
+ protected override DriverContext DriverContext
36
38
{
37
39
get
38
40
{
39
41
var commandTimeout = TimeoutConfiguration . Command ;
40
42
var browserName = BrowserProfile . BrowserName ;
41
43
var driverSettings = BrowserProfile . DriverSettings ;
42
- WebDriver driver ;
44
+ DriverContext driverCtx ;
43
45
switch ( browserName )
44
46
{
45
47
case BrowserName . Chrome :
46
48
case BrowserName . Yandex :
47
- driver = GetDriver < ChromeDriver > ( ( ) => ChromeDriverService . CreateDefaultService ( ) ,
49
+ driverCtx = GetDriverContext < ChromeDriver > ( ( ) => ChromeDriverService . CreateDefaultService ( ) ,
48
50
( ChromeOptions ) driverSettings . DriverOptions , commandTimeout ) ;
49
51
break ;
50
52
case BrowserName . Firefox :
51
53
Func < DriverService > geckoServiceProvider = ( ) =>
52
54
{
53
55
var geckoService = FirefoxDriverService . CreateDefaultService ( ) ;
54
- geckoService . Host = ( ( FirefoxSettings ) driverSettings ) . IsGeckoServiceHostDefaultEnabled ? HostAddressDefault : geckoService . Host ;
56
+ geckoService . Host = ( ( FirefoxSettings ) driverSettings ) . IsGeckoServiceHostDefaultEnabled
57
+ ? HostAddressDefault
58
+ : geckoService . Host ;
55
59
return geckoService ;
56
60
} ;
57
61
58
- driver = GetDriver < FirefoxDriver > ( geckoServiceProvider , ( FirefoxOptions ) driverSettings . DriverOptions , commandTimeout ) ;
62
+ driverCtx = GetDriverContext < FirefoxDriver > ( geckoServiceProvider , ( FirefoxOptions ) driverSettings . DriverOptions , commandTimeout ) ;
59
63
break ;
60
64
case BrowserName . IExplorer :
61
- driver = GetDriver < InternetExplorerDriver > ( ( ) => InternetExplorerDriverService . CreateDefaultService ( ) ,
65
+ driverCtx = GetDriverContext < InternetExplorerDriver > ( ( ) => InternetExplorerDriverService . CreateDefaultService ( ) ,
62
66
( InternetExplorerOptions ) driverSettings . DriverOptions , commandTimeout ) ;
63
67
break ;
64
68
case BrowserName . Edge :
65
- driver = GetDriver < EdgeDriver > ( ( ) => EdgeDriverService . CreateDefaultService ( ) ,
69
+ driverCtx = GetDriverContext < EdgeDriver > ( ( ) => EdgeDriverService . CreateDefaultService ( ) ,
66
70
( EdgeOptions ) driverSettings . DriverOptions , commandTimeout ) ;
67
71
break ;
68
72
case BrowserName . Opera :
69
73
var config = new OperaConfig ( ) ;
70
- var operaSettings = ( OperaSettings ) driverSettings ;
74
+ var operaSettings = ( OperaSettings ) driverSettings ;
71
75
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 ( ) ) ,
73
77
( ChromeOptions ) driverSettings . DriverOptions , commandTimeout ) ;
74
78
break ;
75
79
case BrowserName . Safari :
76
- driver = GetDriver < SafariDriver > ( ( ) => SafariDriverService . CreateDefaultService ( ) ,
80
+ driverCtx = GetDriverContext < SafariDriver > ( ( ) => SafariDriverService . CreateDefaultService ( ) ,
77
81
( SafariOptions ) driverSettings . DriverOptions , commandTimeout ) ;
78
82
break ;
79
83
default :
80
84
throw new NotSupportedException ( $ "Browser [{ browserName } ] is not supported.") ;
81
85
}
82
- return driver ;
86
+
87
+ return driverCtx ;
83
88
}
84
89
}
85
90
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
87
92
{
88
93
var currentBrowserVersionRegex = new Regex ( CurrentBrowserVersionPattern , RegexOptions . None , TimeoutConfiguration . Condition ) ;
89
94
try
90
95
{
91
- return ( T ) Activator . CreateInstance ( typeof ( T ) , driverServiceProvider . Invoke ( ) , driverOptions , commandTimeout ) ;
96
+ var context = CreateWebDriverInstance < T > ( driverServiceProvider , driverOptions , commandTimeout ) ;
97
+ return context ;
92
98
}
93
99
catch ( TargetInvocationException exception )
94
100
when ( exception . InnerException != null && currentBrowserVersionRegex . IsMatch ( exception . InnerException . Message ) )
95
101
{
96
102
Logger . Instance . Debug ( exception . InnerException . Message , exception ) ;
97
103
var currentVersion = currentBrowserVersionRegex . Match ( exception . InnerException . Message ) . Groups [ 1 ] . Value ;
98
104
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 ;
100
107
}
101
108
}
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
+ }
102
117
}
103
118
}
0 commit comments