/* * Checks that the some of the homepage rows on the homepage are displayed and * contents have the right URLs to redirect to * * Test cases: https://github.com/LLK/scratch-www/wiki/Most-Important-Workflows */ require('chromedriver'); var tap = require('tap'); var seleniumWebdriver = require('selenium-webdriver'); // Selenium's promise driver will be deprecated, so we should not rely on it seleniumWebdriver.SELENIUM_PROMISE_MANAGER=0; //chrome driver var driver = new seleniumWebdriver.Builder().withCapabilities(seleniumWebdriver.Capabilities.chrome()).build(); var rootUrl = process.env.ROOT_URL || 'https://scratch.ly'; //number of tests in the plan tap.plan(4); tap.tearDown(function () { //quit the instance of the browser driver.quit(); }); tap.beforeEach(function () { //load the page with the driver return driver.get(rootUrl); }); //checks that the title of the first row is Featured Projects tap.test('checkFeaturedProjectsRowTitleWhenSignedOut', function (t) { var xPathLink = '//div[@class="box"]/div[@class="box-header"]/h4'; driver.findElement(seleniumWebdriver.By.xpath(xPathLink)) .then( function (element) { element.getText('h4') .then( function (text) { //expected value of the title text var expectedText = 'Featured Projects'; t.equal(text, expectedText); t.end(); }); }); }); //checks that the link for a project makes sense tap.test('checkFeaturedProjectsRowLinkWhenSignedOut', function (t) { var xPathLink = '//div[contains(@class, "thumbnail") ' + 'and contains(@class, "project") and contains(@class, "slick-slide") ' + 'and contains(@class, "slick-active")]/a[@class="thumbnail-image"]'; driver.wait(seleniumWebdriver.until .elementLocated(seleniumWebdriver.By.xpath(xPathLink))) .then( function (element) { element.getAttribute('href') .then( function (url) { //expected pattern for the project URL //since I don't know the length of the project ID number var expectedUrlRegExp = new RegExp('/projects/.*[0-9].*/?'); t.match(url, expectedUrlRegExp); t.end(); }); }); }); //checks that the title of the 2nd row is Featured Studios tap.test('checkFeaturedStudiosRowWhenSignedOut', function (t) { var xPathLink = '//div[@class="box"][2]/div[@class="box-header"]/h4'; driver.findElement(seleniumWebdriver.By.xpath(xPathLink)) .then(function (element) { element.getText('h4') .then( function (text) { var expectedText = 'Featured Studios'; t.equal(text, expectedText); t.end(); }); }); }); //checks that the link for a studio makes sense tap.test('checkFeaturedStudiosRowLinkWhenSignedOut', function (t) { var xPathLink = '//div[contains(@class, "thumbnail") and contains(@class, "gallery") ' + 'and contains(@class, "slick-slide") and contains(@class, "slick-active")]/a[@class="thumbnail-image"]'; driver.findElement(seleniumWebdriver.By.xpath(xPathLink)) .then(function (element) { element.getAttribute('href') .then( function (url) { var expectedUrlRegExp = new RegExp('/studios/.*[0-9].*/?'); t.match(url, expectedUrlRegExp); t.end(); }); }); });