direct.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. /*
  4. * This is an implementation of the Direct Driver Provider.
  5. * It is responsible for setting up the account object, tearing
  6. * it down, and setting up the driver correctly.
  7. */
  8. const fs = require("fs");
  9. const path = require("path");
  10. const q = require("q");
  11. const selenium_webdriver_1 = require("selenium-webdriver");
  12. const chrome_1 = require("selenium-webdriver/chrome");
  13. const exitCodes_1 = require("../exitCodes");
  14. const logger_1 = require("../logger");
  15. const driverProvider_1 = require("./driverProvider");
  16. const SeleniumConfig = require('webdriver-manager/built/lib/config').Config;
  17. let logger = new logger_1.Logger('direct');
  18. class Direct extends driverProvider_1.DriverProvider {
  19. constructor(config) {
  20. super(config);
  21. }
  22. /**
  23. * Configure and launch (if applicable) the object's environment.
  24. * @return {q.promise} A promise which will resolve when the environment is
  25. * ready to test.
  26. */
  27. setupDriverEnv() {
  28. switch (this.config_.capabilities.browserName) {
  29. case 'chrome':
  30. logger.info('Using ChromeDriver directly...');
  31. break;
  32. case 'firefox':
  33. logger.info('Using FirefoxDriver directly...');
  34. break;
  35. default:
  36. throw new exitCodes_1.BrowserError(logger, 'browserName ' + this.config_.capabilities.browserName +
  37. ' is not supported with directConnect.');
  38. }
  39. return q.fcall(function () { });
  40. }
  41. /**
  42. * Create a new driver.
  43. *
  44. * @public
  45. * @override
  46. * @return webdriver instance
  47. */
  48. getNewDriver() {
  49. let driver;
  50. switch (this.config_.capabilities.browserName) {
  51. case 'chrome':
  52. let chromeDriverFile;
  53. if (this.config_.chromeDriver) {
  54. chromeDriverFile = this.config_.chromeDriver;
  55. }
  56. else {
  57. try {
  58. let updateJson = path.resolve(SeleniumConfig.getSeleniumDir(), 'update-config.json');
  59. let updateConfig = JSON.parse(fs.readFileSync(updateJson).toString());
  60. chromeDriverFile = updateConfig.chrome.last;
  61. }
  62. catch (e) {
  63. throw new exitCodes_1.BrowserError(logger, 'Could not find update-config.json. ' +
  64. 'Run \'webdriver-manager update\' to download binaries.');
  65. }
  66. }
  67. if (!fs.existsSync(chromeDriverFile)) {
  68. throw new exitCodes_1.BrowserError(logger, 'Could not find chromedriver at ' + chromeDriverFile +
  69. '. Run \'webdriver-manager update\' to download binaries.');
  70. }
  71. let chromeService = new chrome_1.ServiceBuilder(chromeDriverFile).build();
  72. // driver = ChromeDriver.createSession(new Capabilities(this.config_.capabilities),
  73. // chromeService);
  74. // TODO(ralphj): fix typings
  75. driver =
  76. require('selenium-webdriver/chrome')
  77. .Driver.createSession(new selenium_webdriver_1.Capabilities(this.config_.capabilities), chromeService);
  78. break;
  79. case 'firefox':
  80. let geckoDriverFile;
  81. if (this.config_.geckoDriver) {
  82. geckoDriverFile = this.config_.geckoDriver;
  83. }
  84. else {
  85. try {
  86. let updateJson = path.resolve(SeleniumConfig.getSeleniumDir(), 'update-config.json');
  87. let updateConfig = JSON.parse(fs.readFileSync(updateJson).toString());
  88. geckoDriverFile = updateConfig.gecko.last;
  89. }
  90. catch (e) {
  91. throw new exitCodes_1.BrowserError(logger, 'Could not find update-config.json. ' +
  92. 'Run \'webdriver-manager update\' to download binaries.');
  93. }
  94. }
  95. if (!fs.existsSync(geckoDriverFile)) {
  96. throw new exitCodes_1.BrowserError(logger, 'Could not find geckodriver at ' + geckoDriverFile +
  97. '. Run \'webdriver-manager update\' to download binaries.');
  98. }
  99. // TODO (mgiambalvo): Turn this into an import when the selenium typings are updated.
  100. const FirefoxServiceBuilder = require('selenium-webdriver/firefox').ServiceBuilder;
  101. let firefoxService = new FirefoxServiceBuilder(geckoDriverFile).build();
  102. // TODO(mgiambalvo): Fix typings.
  103. driver =
  104. require('selenium-webdriver/firefox')
  105. .Driver.createSession(new selenium_webdriver_1.Capabilities(this.config_.capabilities), firefoxService);
  106. break;
  107. default:
  108. throw new exitCodes_1.BrowserError(logger, 'browserName ' + this.config_.capabilities.browserName +
  109. ' is not supported with directConnect.');
  110. }
  111. this.drivers_.push(driver);
  112. return driver;
  113. }
  114. }
  115. exports.Direct = Direct;
  116. //# sourceMappingURL=direct.js.map