14
14
15
15
goog . provide ( 'webdriver.Builder' ) ;
16
16
17
+ goog . require ( 'goog.Uri' ) ;
17
18
goog . require ( 'goog.userAgent' ) ;
18
- goog . require ( 'webdriver.AbstractBuilder ' ) ;
19
+ goog . require ( 'webdriver.Capabilities ' ) ;
19
20
goog . require ( 'webdriver.FirefoxDomExecutor' ) ;
20
21
goog . require ( 'webdriver.WebDriver' ) ;
21
22
goog . require ( 'webdriver.http.CorsClient' ) ;
22
23
goog . require ( 'webdriver.http.Executor' ) ;
23
24
goog . require ( 'webdriver.http.XhrClient' ) ;
24
- goog . require ( 'webdriver.process' ) ;
25
25
26
26
27
27
28
28
/**
29
+ * Creates new {@code webdriver.WebDriver} clients for use in a browser
30
+ * environment. Upon instantiation, each Builder will configure itself based
31
+ * on the following query parameters:
32
+ * <dl>
33
+ * <dt>wdurl
34
+ * <dd>Defines the WebDriver server to send commands to. If this is a
35
+ * relative URL, the builder will use the standard WebDriver wire
36
+ * protocol and a {@link webdriver.http.XhrClient}. Otherwise, it will
37
+ * use a {@link webdriver.http.CorsClient}; this only works when
38
+ * connecting to an instance of the Java Selenium server. The server URL
39
+ * may be changed using {@code #usingServer}.
40
+ *
41
+ * <dt>wdsid
42
+ * <dd>Defines the session to connect to. If omitted, will request a new
43
+ * session from the server.
44
+ * </dl>
45
+ *
46
+ * @param {Window= } opt_window The window to extract query parameters from.
29
47
* @constructor
30
- * @extends {webdriver.AbstractBuilder }
48
+ * @final
49
+ * @struct
31
50
*/
32
- webdriver . Builder = function ( ) {
33
- goog . base ( this ) ;
34
-
35
- /**
36
- * ID of an existing WebDriver session that new clients should use.
37
- * Initialized from the value of the
38
- * {@link webdriver.AbstractBuilder.SESSION_ID_ENV} environment variable, but
39
- * may be overridden using
40
- * {@link webdriver.AbstractBuilder#usingSession}.
41
- * @private {string}
42
- */
51
+ webdriver . Builder = function ( opt_window ) {
52
+ var win = opt_window || window ;
53
+ var data = new goog . Uri ( win . location ) . getQueryData ( ) ;
54
+
55
+ /** @private {string} */
56
+ this . serverUrl_ =
57
+ /** @type {string } */ ( data . get ( webdriver . Builder . SERVER_URL_PARAM ,
58
+ webdriver . Builder . DEFAULT_SERVER_URL ) ) ;
59
+
60
+ /** @private {string} */
43
61
this . sessionId_ =
44
- webdriver . process . getEnv ( webdriver . Builder . SESSION_ID_ENV ) ;
62
+ /** @type {string } */ ( data . get ( webdriver . Builder . SESSION_ID_PARAM ) ) ;
63
+
64
+ /** @private {!webdriver.Capabilities} */
65
+ this . capabilities_ = new webdriver . Capabilities ( ) ;
45
66
} ;
46
- goog . inherits ( webdriver . Builder , webdriver . AbstractBuilder ) ;
47
67
48
68
49
69
/**
50
- * Environment variable that defines the session ID of an existing WebDriver
51
- * session to use when creating clients. If set, all new Builder instances will
52
- * default to creating clients that use this session. To create a new session,
53
- * use {@code #useExistingSession(boolean)}. The use of this environment
54
- * variable requires that {@link webdriver.AbstractBuilder.SERVER_URL_ENV} also
55
- * be set.
70
+ * Query parameter that defines which session to connect to.
71
+ * @type {string }
72
+ * @const
73
+ */
74
+ webdriver . Builder . SESSION_ID_PARAM = 'wdsid' ;
75
+
76
+
77
+ /**
78
+ * Query parameter that defines the URL of the remote server to connect to.
79
+ * @type {string }
80
+ * @const
81
+ */
82
+ webdriver . Builder . SERVER_URL_PARAM = 'wdurl' ;
83
+
84
+
85
+ /**
86
+ * The default server URL to use.
56
87
* @type {string }
57
88
* @const
58
- * @see webdriver.process.getEnv
59
89
*/
60
- webdriver . Builder . SESSION_ID_ENV = 'wdsid' ;
90
+ webdriver . Builder . DEFAULT_SERVER_URL = 'http://localhost:4444/wd/hub' ;
91
+
92
+
93
+ /**
94
+ * Configures which WebDriver server should be used for new sessions.
95
+ * @param {string } url URL of the server to use.
96
+ * @return {!webdriver.Builder } This Builder instance for chain calling.
97
+ */
98
+ webdriver . Builder . prototype . usingServer = function ( url ) {
99
+ this . serverUrl_ = url ;
100
+ return this ;
101
+ } ;
102
+
103
+
104
+ /**
105
+ * @return {string } The URL of the WebDriver server this instance is configured
106
+ * to use.
107
+ */
108
+ webdriver . Builder . prototype . getServerUrl = function ( ) {
109
+ return this . serverUrl_ ;
110
+ } ;
61
111
62
112
63
113
/**
64
114
* Configures the builder to create a client that will use an existing WebDriver
65
115
* session.
66
116
* @param {string } id The existing session ID to use.
67
- * @return {!webdriver.AbstractBuilder } This Builder instance for chain calling.
117
+ * @return {!webdriver.Builder } This Builder instance for chain calling.
68
118
*/
69
119
webdriver . Builder . prototype . usingSession = function ( id ) {
70
120
this . sessionId_ = id ;
@@ -82,7 +132,22 @@ webdriver.Builder.prototype.getSession = function() {
82
132
83
133
84
134
/**
85
- * @override
135
+ * Sets the desired capabilities when requesting a new session. This will
136
+ * overwrite any previously set desired capabilities.
137
+ * @param {!(Object|webdriver.Capabilities) } capabilities The desired
138
+ * capabilities for a new session.
139
+ * @return {!webdriver.Builder } This Builder instance for chain calling.
140
+ */
141
+ webdriver . Builder . prototype . withCapabilities = function ( capabilities ) {
142
+ this . capabilities_ = new webdriver . Capabilities ( capabilities ) ;
143
+ return this ;
144
+ } ;
145
+
146
+
147
+ /**
148
+ * Builds a new {@link webdriver.WebDriver} instance using this builder's
149
+ * current configuration.
150
+ * @return {!webdriver.WebDriver } A new WebDriver client.
86
151
*/
87
152
webdriver . Builder . prototype . build = function ( ) {
88
153
if ( goog . userAgent . GECKO && document . readyState != 'complete' ) {
@@ -93,10 +158,9 @@ webdriver.Builder.prototype.build = function() {
93
158
94
159
if ( webdriver . FirefoxDomExecutor . isAvailable ( ) ) {
95
160
executor = new webdriver . FirefoxDomExecutor ( ) ;
96
- return webdriver . WebDriver . createSession ( executor , this . getCapabilities ( ) ) ;
161
+ return webdriver . WebDriver . createSession ( executor , this . capabilities_ ) ;
97
162
} else {
98
- var url = this . getServerUrl ( ) ||
99
- webdriver . AbstractBuilder . DEFAULT_SERVER_URL ;
163
+ var url = this . serverUrl_ ;
100
164
var client ;
101
165
if ( url [ 0 ] == '/' ) {
102
166
var origin = window . location . origin ||
@@ -107,8 +171,8 @@ webdriver.Builder.prototype.build = function() {
107
171
}
108
172
executor = new webdriver . http . Executor ( client ) ;
109
173
110
- if ( this . getSession ( ) ) {
111
- return webdriver . WebDriver . attachToSession ( executor , this . getSession ( ) ) ;
174
+ if ( this . sessionId_ ) {
175
+ return webdriver . WebDriver . attachToSession ( executor , this . sessionId_ ) ;
112
176
} else {
113
177
throw new Error ( 'Unable to create a new client for this browser. The ' +
114
178
'WebDriver session ID has not been defined.' ) ;
0 commit comments