browserStack.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const q = require("q");
  4. const util = require("util");
  5. const exitCodes_1 = require("../exitCodes");
  6. const logger_1 = require("../logger");
  7. const driverProvider_1 = require("./driverProvider");
  8. const BrowserstackClient = require('browserstack');
  9. let logger = new logger_1.Logger('browserstack');
  10. class BrowserStack extends driverProvider_1.DriverProvider {
  11. constructor(config) {
  12. super(config);
  13. }
  14. /**
  15. * Hook to update the BrowserStack job status.
  16. * @public
  17. * @param {Object} update
  18. * @return {q.promise} A promise that will resolve when the update is complete.
  19. */
  20. updateJob(update) {
  21. let deferredArray = this.drivers_.map((driver) => {
  22. let deferred = q.defer();
  23. driver.getSession().then((session) => {
  24. // Fetching BrowserStack session details.
  25. this.browserstackClient.getSession(session.getId(), function (error, automate_session) {
  26. if (error) {
  27. logger.info('BrowserStack results available at ' +
  28. 'https://www.browserstack.com/automate');
  29. }
  30. else {
  31. if (automate_session && automate_session.browser_url) {
  32. logger.info('BrowserStack results available at ' + automate_session.browser_url);
  33. }
  34. else {
  35. logger.info('BrowserStack results available at ' +
  36. 'https://www.browserstack.com/automate');
  37. }
  38. }
  39. });
  40. let jobStatus = update.passed ? 'completed' : 'error';
  41. let statusObj = { status: jobStatus };
  42. // Updating status of BrowserStack session.
  43. this.browserstackClient.updateSession(session.getId(), statusObj, function (error, automate_session) {
  44. if (error) {
  45. throw new exitCodes_1.BrowserError(logger, 'Error updating BrowserStack pass/fail status: ' + util.inspect(error));
  46. }
  47. else {
  48. logger.info(automate_session);
  49. deferred.resolve();
  50. }
  51. });
  52. });
  53. return deferred.promise;
  54. });
  55. return q.all(deferredArray);
  56. }
  57. /**
  58. * Configure and launch (if applicable) the object's environment.
  59. * @return {q.promise} A promise which will resolve when the environment is
  60. * ready to test.
  61. */
  62. setupDriverEnv() {
  63. let deferred = q.defer();
  64. this.config_.capabilities['browserstack.user'] = this.config_.browserstackUser;
  65. this.config_.capabilities['browserstack.key'] = this.config_.browserstackKey;
  66. this.config_.seleniumAddress = 'http://hub.browserstack.com/wd/hub';
  67. this.browserstackClient = BrowserstackClient.createAutomateClient({
  68. username: this.config_.browserstackUser,
  69. password: this.config_.browserstackKey,
  70. proxy: this.config_.browserstackProxy
  71. });
  72. // Append filename to capabilities.name so that it's easier to identify
  73. // tests.
  74. if (this.config_.capabilities.name && this.config_.capabilities.shardTestFiles) {
  75. this.config_.capabilities.name +=
  76. (':' + this.config_.specs.toString().replace(/^.*[\\\/]/, ''));
  77. }
  78. logger.info('Using BrowserStack selenium server at ' + this.config_.seleniumAddress);
  79. deferred.resolve();
  80. return deferred.promise;
  81. }
  82. }
  83. exports.BrowserStack = BrowserStack;
  84. //# sourceMappingURL=browserStack.js.map