"use strict"; var should = require("should"); var BrowserStack = require("../lib/browserstack"); var util = require("./util"); var username = util.browserStack.username; var password = util.browserStack.password; if (!username || !password) { throw new Error("Please set BROWSERSTACK_USERNAME and BROWSERSTACK_KEY environment variables."); } describe("Screenshot API", function() { this.timeout(300000); // 300s var client; beforeEach(function() { client = BrowserStack.createScreenshotClient({ username: username, password: password }); }); it("should list browsers", function(done) { client.getBrowsers(function(err, browsers) { should.ifError(err); browsers.should.be.an.Array().and.not.be.empty(); browsers.map(util.validateBrowserObject); done(err); }); }); it("should generate screenshots for multiple browsers", function(done) { var options = { url: "http://www.example.com", browsers: ["40.0", "41.0", "42.0"].map(function(v) { return { os: "Windows", os_version: "7", browser: "chrome", browser_version: v }; }) }; client.generateScreenshots(options, function(err, job) { should.ifError(err); util.validateScreenshotJob(job); util.pollScreenshotWorker(client, job, function(err, isRunning) { if (!err && !isRunning) { // this is highly dependent on demand and queue time at BrowserStack; // little point in stalling the test run waiting for this job to complete // print warning in console for user to decide console.warn("\t[WARN] worker %s did not run within timeout", job.job_id); } done(err); }); }); }); it("should fetch a screenshot job", function(done) { var options = { url: "http://www.example.com", browsers: [ { os: "Windows", os_version: "7", browser: "chrome", browser_version: "42.0" } ] }; client.generateScreenshots(options, function(err, job) { should.ifError(err); util.validateScreenshotJob(job); client.getJob(job.job_id, function(err, job) { if (!err) { util.validateScreenshotJob(job); } done(err); }); }); }); });