RunSauceLabs.hx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import js.Node.*;
  2. using Reflect;
  3. class RunSauceLabs {
  4. static function main():Void {
  5. var success = true;
  6. var webdriver:Dynamic = require("wd");
  7. var browser:Dynamic = webdriver.remote(
  8. "localhost",
  9. 4445,
  10. Sys.getEnv("SAUCE_USERNAME"),
  11. Sys.getEnv("SAUCE_ACCESS_KEY")
  12. );
  13. var tags = [];
  14. if (Sys.getEnv("TRAVIS") != null)
  15. tags.push("TravisCI");
  16. //https://saucelabs.com/platforms
  17. var browsers = [
  18. // {
  19. // "browserName": "internet explorer",
  20. // "platform": "Windows XP",
  21. // "version": "6"
  22. // },
  23. // {
  24. // "browserName": "internet explorer",
  25. // "platform": "Windows XP",
  26. // "version": "7"
  27. // },
  28. {
  29. "browserName": "internet explorer",
  30. "platform": "Windows XP",
  31. "version": "8"
  32. },
  33. {
  34. "browserName": "internet explorer",
  35. "platform": "Windows 7",
  36. "version": "9"
  37. },
  38. {
  39. "browserName": "internet explorer",
  40. "platform": "Windows 7",
  41. "version": "10"
  42. },
  43. {
  44. "browserName": "internet explorer",
  45. "platform": "Windows 8.1",
  46. "version": "11"
  47. },
  48. {
  49. "browserName": "chrome",
  50. "platform": "Windows XP",
  51. "version": "31"
  52. },
  53. {
  54. "browserName": "firefox",
  55. "platform": "Windows XP",
  56. "version": "26"
  57. },
  58. {
  59. "browserName": "safari",
  60. "platform": "OS X 10.6",
  61. "version": "5"
  62. },
  63. {
  64. "browserName": "safari",
  65. "platform": "OS X 10.8",
  66. "version": "6"
  67. },
  68. {
  69. "browserName": "safari",
  70. "platform": "OS X 10.9",
  71. "version": "7"
  72. },
  73. {
  74. "browserName": "iphone",
  75. "platform": "OS X 10.8",
  76. "version": "6.1",
  77. "device-orientation": "portrait"
  78. },
  79. // {
  80. // "browserName": "iphone",
  81. // "platform": "OS X 10.9",
  82. // "version": "7",
  83. // "device-orientation": "portrait"
  84. // },
  85. {
  86. "browserName": "android",
  87. "platform": "Linux",
  88. "version": "4.0",
  89. "device-orientation": "portrait"
  90. }
  91. ];
  92. function testBrowsers(browsers:Array<Dynamic>) {
  93. if (browsers.length == 0) {
  94. Sys.exit(success ? 0 : 1);
  95. } else {
  96. function testBrowser(caps:Dynamic, retries = 3):Void {
  97. function handleError(err:String, ?pos:haxe.PosInfos):Bool {
  98. if (err != null) {
  99. console.log('${pos.fileName}:${pos.lineNumber}: $err');
  100. if (retries > 0)
  101. testBrowser(caps, retries - 1);
  102. else
  103. throw err;
  104. return false;
  105. }
  106. return true;
  107. }
  108. console.log('========================================================');
  109. console.log('${caps.browserName} ${caps.version} on ${caps.platform}:');
  110. browser.init(caps, function(err) {
  111. if (!handleError(err)) return;
  112. browser.get("http://localhost:2000/unit-js.html", function(err) {
  113. if (!handleError(err)) return;
  114. browser.text("body", function(err, re) {
  115. if (!handleError(err)) return;
  116. console.log(re);
  117. //check if test is successful or not
  118. var test = false;
  119. for (line in re.split("\n")) {
  120. if (line.indexOf("SUCCESS: ") >= 0) {
  121. test = line.indexOf("SUCCESS: true") >= 0;
  122. break;
  123. }
  124. }
  125. success = success && test;
  126. //let saucelabs knows the result
  127. browser.sauceJobUpdate({ passed: test }, function(err) {
  128. if (!handleError(err)) return;
  129. browser.quit(function(err) {
  130. if (!handleError(err)) return;
  131. testBrowsers(browsers);
  132. });
  133. });
  134. });
  135. });
  136. });
  137. }
  138. var caps = browsers.shift();
  139. caps.setField("name", Sys.getEnv("TRAVIS") != null ? Sys.getEnv("TRAVIS_REPO_SLUG") : "haxe");
  140. caps.setField("tags", tags);
  141. if (Sys.getEnv("TRAVIS") != null) {
  142. caps.setField("tunnel-identifier", Sys.getEnv("TRAVIS_JOB_NUMBER"));
  143. caps.setField("build", Sys.getEnv("TRAVIS_BUILD_NUMBER"));
  144. }
  145. testBrowser(caps);
  146. }
  147. }
  148. testBrowsers(browsers);
  149. }
  150. }