@@ -14,9 +14,13 @@ import {Logger} from '../logger';
14
14
15
15
import { DriverProvider } from './driverProvider' ;
16
16
17
+ const BrowserstackClient = require ( 'browserstack' ) ;
18
+
17
19
let logger = new Logger ( 'browserstack' ) ;
18
20
19
21
export class BrowserStack extends DriverProvider {
22
+ browserstackClient : any ;
23
+
20
24
constructor ( config : Config ) {
21
25
super ( config ) ;
22
26
}
@@ -30,58 +34,41 @@ export class BrowserStack extends DriverProvider {
30
34
updateJob ( update : any ) : q . Promise < any > {
31
35
let deferredArray = this . drivers_ . map ( ( driver : WebDriver ) => {
32
36
let deferred = q . defer ( ) ;
37
+
33
38
driver . getSession ( ) . then ( ( session : Session ) => {
34
- let headers = {
35
- 'Content-Type' : 'application/json' ,
36
- 'Authorization' : 'Basic ' +
37
- new Buffer ( this . config_ . browserstackUser + ':' + this . config_ . browserstackKey )
38
- . toString ( 'base64' )
39
- } ;
40
- let options = {
41
- hostname : 'www.browserstack.com' ,
42
- port : 443 ,
43
- path : '/automate/sessions/' + session . getId ( ) + '.json' ,
44
- method : 'GET' ,
45
- headers : headers
46
- } ;
47
39
48
- let req = https . request ( options , ( res ) => {
49
- res . on ( 'data' , ( data : Buffer ) => {
50
- let info = JSON . parse ( data . toString ( ) ) ;
51
- if ( info && info . automation_session && info . automation_session . browser_url ) {
52
- logger . info (
53
- 'BrowserStack results available at ' + info . automation_session . browser_url ) ;
54
- } else {
55
- logger . info (
56
- 'BrowserStack results available at ' +
57
- 'https://www.browserstack.com/automate' ) ;
58
- }
59
- } ) ;
60
- } ) ;
61
- req . end ( ) ;
62
- req . on ( 'error' , ( e : Error ) => {
63
- logger . info (
64
- 'BrowserStack results available at ' +
65
- 'https://www.browserstack.com/automate' ) ;
66
- } ) ;
40
+ // Fetching BrowserStack session details.
41
+ this . browserstackClient . getSession (
42
+ session . getId ( ) , function ( error : Error , automate_session : any ) {
43
+ if ( error ) {
44
+ logger . info (
45
+ 'BrowserStack results available at ' +
46
+ 'https://www.browserstack.com/automate' ) ;
47
+ } else {
48
+ if ( automate_session && automate_session . browser_url ) {
49
+ logger . info ( 'BrowserStack results available at ' + automate_session . browser_url ) ;
50
+ } else {
51
+ logger . info (
52
+ 'BrowserStack results available at ' +
53
+ 'https://www.browserstack.com/automate' ) ;
54
+ }
55
+ }
56
+ } ) ;
57
+
67
58
let jobStatus = update . passed ? 'completed' : 'error' ;
68
- options . method = 'PUT' ;
69
- let update_req = https . request ( options , ( res ) => {
70
- let responseStr = '' ;
71
- res . on ( 'data' , ( data : Buffer ) => {
72
- responseStr += data . toString ( ) ;
73
- } ) ;
74
- res . on ( 'end' , ( ) => {
75
- logger . info ( responseStr ) ;
76
- deferred . resolve ( ) ;
77
- } ) ;
78
- res . on ( 'error' , ( e : Error ) => {
79
- throw new BrowserError (
80
- logger , 'Error updating BrowserStack pass/fail status: ' + util . inspect ( e ) ) ;
81
- } ) ;
82
- } ) ;
83
- update_req . write ( '{"status":"' + jobStatus + '"}' ) ;
84
- update_req . end ( ) ;
59
+ let statusObj = { status : jobStatus } ;
60
+
61
+ // Updating status of BrowserStack session.
62
+ this . browserstackClient . updateSession (
63
+ session . getId ( ) , statusObj , function ( error : Error , automate_session : any ) {
64
+ if ( error ) {
65
+ throw new BrowserError (
66
+ logger , 'Error updating BrowserStack pass/fail status: ' + util . inspect ( error ) ) ;
67
+ } else {
68
+ logger . info ( automate_session ) ;
69
+ deferred . resolve ( ) ;
70
+ }
71
+ } ) ;
85
72
} ) ;
86
73
return deferred . promise ;
87
74
} ) ;
@@ -99,6 +86,12 @@ export class BrowserStack extends DriverProvider {
99
86
this . config_ . capabilities [ 'browserstack.key' ] = this . config_ . browserstackKey ;
100
87
this . config_ . seleniumAddress = 'http://hub.browserstack.com/wd/hub' ;
101
88
89
+ this . browserstackClient = BrowserstackClient . createAutomateClient ( {
90
+ username : this . config_ . browserstackUser ,
91
+ password : this . config_ . browserstackKey ,
92
+ proxy : this . config_ . browserstackProxy
93
+ } ) ;
94
+
102
95
// Append filename to capabilities.name so that it's easier to identify
103
96
// tests.
104
97
if ( this . config_ . capabilities . name && this . config_ . capabilities . shardTestFiles ) {
0 commit comments