From 2b7dd2175ca1eb133458d62756b2297fe2d09d4d Mon Sep 17 00:00:00 2001 From: Vanderloo <212703693@logon.ds.ge.com> Date: Thu, 31 May 2018 09:36:15 -0400 Subject: [PATCH] Test creation --- nightwatch.conf.js | 49 ++++++++ package-lock.json | 6 +- package.json | 8 +- page_objects/music_page.js | 0 page_objects/nav.js | 29 +++++ reports/CHROME_66.0.3359.181_XP_tests.xml | 53 ++++++++ reports/generatedReport.html | 147 ++++++++++++++++++++++ scripts/chromewin.sh | 13 ++ selenium-debug.log | 12 ++ test_pages/close.js | 5 + test_pages/loadPageAndVerify.js | 8 ++ tests/1-generalTests.js | 43 +++++++ views/partials/_nav.ejs | 8 +- 13 files changed, 371 insertions(+), 10 deletions(-) create mode 100644 nightwatch.conf.js create mode 100644 page_objects/music_page.js create mode 100644 page_objects/nav.js create mode 100644 reports/CHROME_66.0.3359.181_XP_tests.xml create mode 100644 reports/generatedReport.html create mode 100644 scripts/chromewin.sh create mode 100644 selenium-debug.log create mode 100644 test_pages/close.js create mode 100644 test_pages/loadPageAndVerify.js create mode 100644 tests/1-generalTests.js diff --git a/nightwatch.conf.js b/nightwatch.conf.js new file mode 100644 index 0000000..de3de5c --- /dev/null +++ b/nightwatch.conf.js @@ -0,0 +1,49 @@ +const seleniumServer = require("selenium-server"); +const chromedriver = require("chromedriver"); +const iedriver = require("iedriver"); +const edgedriver = require("edgedriver"); + +module.exports = { + "src_folders" : ["tests"], + "output_folder" : "reports", + "page_objects_path" : "page_objects", + + "selenium": { + "start_process": true, // tells nightwatch to start/stop the selenium process + "server_path": seleniumServer.path, + "port": 4444, // standard selenium port + "cli_args": { + "webdriver.chrome.driver" : chromedriver.path, + "webdriver.ie.driver" : iedriver.path32, + "webdriver.edge.driver" : edgedriver.path + } + }, + + "test_settings" : { + "default" : { + "launch_url" : "http://localhost", + "selenium_port" : 4444, + "selenium_host" : "localhost", + "silent": true, + "screenshots" : { + "enabled" : false, + "path" : "" + }, + "desiredCapabilities": { + "browserName": "chrome" + } + }, + + "chrome" : { + "desiredCapabilities": { + "browserName": "chrome" + } + }, + + "edge" : { + "desiredCapabilities": { + "browserName": "MicrosoftEdge" + } + } + } +} diff --git a/package-lock.json b/package-lock.json index 27c6dfb..264b1d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3046,9 +3046,9 @@ } }, "selenium-server": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/selenium-server/-/selenium-server-3.12.0.tgz", - "integrity": "sha512-2qFVvAhn6JwsJ/UnYJjISJq7flIssDMVgaYLoh24SkZJ8YEdjSbMWEK5LTpN1stma5HPHSknaXBe38trf0NUww==" + "version": "2.53.1", + "resolved": "https://registry.npmjs.org/selenium-server/-/selenium-server-2.53.1.tgz", + "integrity": "sha1-1oFSiBLzwuBTGmt+YT4juwLM6KY=" }, "semver": { "version": "5.5.0", diff --git a/package.json b/package.json index db3b1ba..a43b5c5 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,9 @@ "test": "echo \"Error: no test specified\" && exit 1", "build-css": "node-sass --include-path scss sass/style.scss public/css/style.css -r -w sass", "build": "node-sass --include-path scss sass/style.scss public/css/style.css", - "start": "npm run build && node server.js" + "start": "npm run build && node server.js", + + "test-chromewin": "bash scripts\\chromewin.sh" }, "author": "", "license": "ISC", @@ -19,11 +21,11 @@ "chromedriver": "^2.37.0", "edgedriver": "^4.16299.0", - "geckodriver": "^1.11.0", + "geckodriver": "^1.10.0", "iedriver": "^3.9.2", "nightwatch": "^0.9.20", "nightwatch-html-reporter": "^2.0.5", "selenium-download": "^2.0.12", - "selenium-server": "^3.11.0" + "selenium-server": "^2.20.0" } } diff --git a/page_objects/music_page.js b/page_objects/music_page.js new file mode 100644 index 0000000..e69de29 diff --git a/page_objects/nav.js b/page_objects/nav.js new file mode 100644 index 0000000..7f5b2d9 --- /dev/null +++ b/page_objects/nav.js @@ -0,0 +1,29 @@ +module.exports = { + url: 'http://localhost:8080', + elements: { + tab1: { + selector: "#nav-tab1" + }, + tab2: { + selector: "#nav-tab2" + }, + tab3: { + selector: "#nav-tab3" + }, + tab4: { + selector: "#nav-tab4" + }, + tab1Container: { + selector: "#tab1" + }, + tab2Container: { + selector: "#tab2" + }, + tab3Container: { + selector: "#tab3" + }, + tab4Container: { + selector: "#tab4" + } + } +}; diff --git a/reports/CHROME_66.0.3359.181_XP_tests.xml b/reports/CHROME_66.0.3359.181_XP_tests.xml new file mode 100644 index 0000000..73f8755 --- /dev/null +++ b/reports/CHROME_66.0.3359.181_XP_tests.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + at Object.Do All Tests (C:\Users\212703693\Documents\Dev\Sprint 1\node-website\tests\tests.js:21:15) + at _combinedTickCallback (internal/process/next_tick.js:131:7) + + + + + + + + ERROR: Unable to locate element: "#vue-music .music-data .artist" using: css selector + at F.command (C:\Users\212703693\Documents\Dev\Sprint 1\node-website\node_modules\nightwatch\lib\api\assertions\containsText.js:46:21) + at F.module.exports.BaseAssertion._scheduleAssertion (C:\Users\212703693\Documents\Dev\Sprint 1\node-website\node_modules\nightwatch\lib\core\assertion.js:87:17) + at F.module.exports.BaseAssertion._executeCommand (C:\Users\212703693\Documents\Dev\Sprint 1\node-website\node_modules\nightwatch\lib\core\assertion.js:82:17) + at AssertionInstance.commandFn [as _commandFn] (C:\Users\212703693\Documents\Dev\Sprint 1\node-website\node_modules\nightwatch\lib\core\assertion.js:180:21) + at AsyncTree.runCommand (C:\Users\212703693\Documents\Dev\Sprint 1\node-website\node_modules\nightwatch\lib\core\queue.js:154:30) + at AsyncTree.runChildNode (C:\Users\212703693\Documents\Dev\Sprint 1\node-website\node_modules\nightwatch\lib\core\queue.js:114:8) + at AsyncTree.walkDown (C:\Users\212703693\Documents\Dev\Sprint 1\node-website\node_modules\nightwatch\lib\core\queue.js:80:10) + at AsyncTree.traverse (C:\Users\212703693\Documents\Dev\Sprint 1\node-website\node_modules\nightwatch\lib\core\queue.js:73:8) + at Object.queueRunner [as run] (C:\Users\212703693\Documents\Dev\Sprint 1\node-website\node_modules\nightwatch\lib\core\queue.js:216:18) + at Nightwatch.start (C:\Users\212703693\Documents\Dev\Sprint 1\node-website\node_modules\nightwatch\lib\index.js:206:14) + + + + + + diff --git a/reports/generatedReport.html b/reports/generatedReport.html new file mode 100644 index 0000000..af6cd83 --- /dev/null +++ b/reports/generatedReport.html @@ -0,0 +1,147 @@ + + + + + Nightwatch HTML Report - Default Theme + + + + +

Nightwatch Results

+
Show/Hide Successes +
+

✕ tests

+
+
+

tests

+
    +
  • +
    ✓
    +
    Open And Verify Loaded
    +
  • +
  • +
    ✓
    +
    Click Through Navigation Bar
    +
  • +
  • +
    ✕
    +
    Do All Tests Testing if element <#vue-music .music-data .artist> contains text: "Chortex". Element could not be located.
    +
  • +
+
+
+
+
+ + \ No newline at end of file diff --git a/scripts/chromewin.sh b/scripts/chromewin.sh new file mode 100644 index 0000000..8eda373 --- /dev/null +++ b/scripts/chromewin.sh @@ -0,0 +1,13 @@ +#!/bin/bash +nightwatch --env chrome +nightwatch-html-reporter -d ./reports -u true -p true + +if [[ $(tasklist | grep chromedriver.exe) ]] ; then +echo "chromedriver found" +taskkill //IM chromedriver.exe //F +fi +if [[ $(tasklist | grep geckodriver.exe) ]] ; then +echo "geckodriver found" +taskkill //IM geckodriver.exe //F +fi +exit 0 \ No newline at end of file diff --git a/selenium-debug.log b/selenium-debug.log new file mode 100644 index 0000000..28bb2ca --- /dev/null +++ b/selenium-debug.log @@ -0,0 +1,12 @@ +09:36:00.889 INFO - Launching a standalone Selenium Server +09:36:01.445 INFO - Java: "Oracle Corporation" 10.0.1+10 +09:36:01.446 INFO - OS: Windows 10 10.0 amd64 +09:36:01.521 INFO - v2.53.1, with Core v2.53.1. Built from revision a36b8b1 +09:36:01.771 INFO - Driver class not found: com.opera.core.systems.OperaDriver +09:36:01.772 INFO - Driver provider com.opera.core.systems.OperaDriver is not registered +09:36:01.796 INFO - Driver provider org.openqa.selenium.safari.SafariDriver registration is skipped: +registration capabilities Capabilities [{browserName=safari, version=, platform=MAC}] does not match the current platform WIN10 +09:36:01.799 INFO - Driver class not found: org.openqa.selenium.htmlunit.HtmlUnitDriver +09:36:01.801 INFO - Driver provider org.openqa.selenium.htmlunit.HtmlUnitDriver is not registered +09:36:02.479 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub +09:36:02.479 INFO - Selenium Server is up and running diff --git a/test_pages/close.js b/test_pages/close.js new file mode 100644 index 0000000..8334367 --- /dev/null +++ b/test_pages/close.js @@ -0,0 +1,5 @@ +module.exports = function (browser) { + this.close = function() { + browser.end(); + } +} diff --git a/test_pages/loadPageAndVerify.js b/test_pages/loadPageAndVerify.js new file mode 100644 index 0000000..59798a7 --- /dev/null +++ b/test_pages/loadPageAndVerify.js @@ -0,0 +1,8 @@ +module.exports = function (browser) { + this.load = function() { + browser + .url('http://localhost:8080') + .resizeWindow(1920, 1080) + .waitForElementVisible('body') + } +} diff --git a/tests/1-generalTests.js b/tests/1-generalTests.js new file mode 100644 index 0000000..315125f --- /dev/null +++ b/tests/1-generalTests.js @@ -0,0 +1,43 @@ +var loadPage = require('../../pages/loadPageAndVerify') +var closePage = require('../../pages/close') + +module.exports = { + 'Open And Verify Loaded' : function (browser) { + page = new loadPage(browser) + page.load() + }, + 'Click Through Navigation Bar' : function (browser) { + var navBar = browser.page.nav(); + + navBar.expect.element('@tab2').to.be.visible; + navBar.expect.element('@tab2Container').to.not.be.visible; + navBar.click('@tab2').waitForElementVisible('@tab2Container', 1000); + navBar.expect.element('@tab1Container').to.have.css('display').which.equals('none'); + navBar.expect.element('@tab2Container').to.have.css('display').which.does.not.equal('none'); + }, + + 'Do All Tests' : function (browser) { + browser + .assert.containsText("#vue-music .music-data .artist", "Chortex") + .assert.containsText("#vue-music .music-data .urls :first-child a", "Soundcloud") + .click("#nav-tab3") + .waitForElementVisible('#tab3', 1000) + .assert.cssClassPresent('#tab3', 'active') + .setValue('#new-movie', ['infinity war', browser.Keys.ENTER]) + .waitForElementPresent("#vue-movies :nth-child(2) .movie", 4000) + .assert.elementPresent("#vue-movies :nth-child(2) .movie") + .assert.containsText("#vue-movies :nth-child(2) .movie .title", "Avengers: Infinity War") + .assert.containsText("#vue-movies :nth-child(2) .movie .year", "2018") + .click("#vue-movies :nth-child(2) .movie button") + .assert.elementNotPresent("#vue-movies :nth-child(2) .movie") + .click("#nav-tab4") + .waitForElementVisible('#tab4', 1000) + .assert.cssClassPresent('#tab4', 'active') + .end(); + }, + + 'Close Out' : function (browser) { + page = new closePage(browser) + page.close() + }, +}; diff --git a/views/partials/_nav.ejs b/views/partials/_nav.ejs index 322e769..759652f 100644 --- a/views/partials/_nav.ejs +++ b/views/partials/_nav.ejs @@ -1,20 +1,20 @@