From 785794dd3bf52b3d0b99e4d6416d3269a368ab01 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Tue, 28 Jul 2015 14:32:48 +0200 Subject: [PATCH] firefox e2e test --- conf.e2e.js | 13 +++++- e2e/full/backlog.e2e.js | 15 ++++--- e2e/full/home.e2e.js | 4 +- e2e/full/issues/issue-detail.e2e.js | 16 ++++---- e2e/full/kanband.e2e.js | 6 +-- e2e/full/project-home.e2e.js | 5 +-- e2e/helpers/detail-helper.js | 33 ++++++++++------ e2e/utils/common.js | 61 +++++++++++++++++++++-------- e2e/utils/detail.js | 16 +++++--- 9 files changed, 110 insertions(+), 59 deletions(-) diff --git a/conf.e2e.js b/conf.e2e.js index 7a937d79..0aa021a6 100644 --- a/conf.e2e.js +++ b/conf.e2e.js @@ -8,13 +8,17 @@ exports.config = { seleniumAddress: 'http://localhost:4444/wd/hub', framework: 'mocha', mochaOpts: { - timeout: 11000 + timeout: 30000 }, suites: { auth: 'e2e/auth/*.e2e.js', full: 'e2e/full/**/*.e2e.js' }, onPrepare: function() { + browser.getCapabilities().then(function (cap) { + browser.browserName = cap.caps_.browserName; + }); + browser.get('http://localhost:9001/login'); var username = $('input[name="username"]'); @@ -33,6 +37,11 @@ exports.config = { .then(function(url) { return url === 'http://localhost:9001/'; }); - }, 10000); + }, 10000) + .then(function() { + return browser.getCapabilities(); + }).then(function (cap) { + browser.browserName = cap.caps_.browserName; + }); } } diff --git a/e2e/full/backlog.e2e.js b/e2e/full/backlog.e2e.js index d8ef65a2..fe9a0fa1 100644 --- a/e2e/full/backlog.e2e.js +++ b/e2e/full/backlog.e2e.js @@ -200,7 +200,7 @@ describe('backlog', function() { expect(firstElementTextRef).to.be.equal(draggedElementRef); }); - it('reorder multiple us', async function() { + utils.common.browserSkip('firefox', 'reorder multiple us', async function() { let dragableElements = backlogHelper.userStories(); let count = await dragableElements.count(); @@ -228,7 +228,7 @@ describe('backlog', function() { expect(elementRef1).to.be.equal(draggedRefs[1]); }); - it('drag us to milestone', async function() { + utils.common.browserSkip('firefox', 'drag us to milestone', async function() { let sprint = backlogHelper.sprints().get(1); let dragableElements = backlogHelper.userStories(); @@ -245,7 +245,7 @@ describe('backlog', function() { expect(draggedElementRef).to.be.equal(firstElementSprintRef); }); - it('drag multiple us to milestone', async function() { + utils.common.browserSkip('firefox', 'drag multiple us to milestone', async function() { let sprint = backlogHelper.sprints().get(1); let dragableElements = backlogHelper.userStories(); @@ -293,7 +293,7 @@ describe('backlog', function() { expect(sprintRefs.indexOf(draggedRef)).to.be.not.equal(-1); }); - it('reorder milestone us', async function() { + utils.common.browserSkip('firefox', 'reorder milestone us', async function() { let sprint = backlogHelper.sprints().get(0); let dragableElements = backlogHelper.getSprintUsertories(sprint); @@ -308,7 +308,7 @@ describe('backlog', function() { expect(firstElementRef).to.be.equal(firstElementRef); }); - it('drag us from milestone to milestone', async function() { + utils.common.browserSkip('firefox', 'drag us from milestone to milestone', async function() { let sprint1 = backlogHelper.sprints().get(0); let sprint2 = backlogHelper.sprints().get(1); @@ -375,6 +375,8 @@ describe('backlog', function() { await createMilestoneLightbox.waitOpen(); + await createMilestoneLightbox.name().clear(); + let sprintName = 'sprintName' + new Date().getTime(); createMilestoneLightbox.name().sendKeys(sprintName); @@ -466,21 +468,18 @@ describe('backlog', function() { let firstUs = userstories.first(); let ref = await backlogHelper.getUsRef(firstUs); - ref = ref.replace('#', ''); await filterQ.sendKeys(ref); await htmlChanges(); let newUsCount = await userstories.count(); - expect(newUsCount).to.be.equal(1); // clear status await filterQ.clear(); htmlChanges = await utils.common.outerHtmlChanges('.backlog-table-body'); - await htmlChanges(); }); diff --git a/e2e/full/home.e2e.js b/e2e/full/home.e2e.js index ea7b4911..3541b7fb 100644 --- a/e2e/full/home.e2e.js +++ b/e2e/full/home.e2e.js @@ -65,13 +65,13 @@ describe('home', function() { await browser.waitForAngular(); }); - it('projects list has the new order', function() { + utils.common.browserSkip('firefox', 'projects list has the new order', function() { var firstElement = $$('.project-list-single a').first().getText(); expect(firstElement).to.be.eventually.equal(draggedElementText); }); - it('projects menu has the new order', function() { + utils.common.browserSkip('firefox', 'projects menu has the new order', function() { var firstElementText = $$('div[tg-dropdown-project-list] ul a').first().getInnerHtml(); expect(firstElementText).to.be.eventually.equal(draggedElementText); diff --git a/e2e/full/issues/issue-detail.e2e.js b/e2e/full/issues/issue-detail.e2e.js index ff629b24..3c3e299b 100644 --- a/e2e/full/issues/issue-detail.e2e.js +++ b/e2e/full/issues/issue-detail.e2e.js @@ -9,11 +9,14 @@ var expect = chai.expect; describe('Issue detail', async function(){ let issuesUrl = ""; before(async function(){ - utils.common.goHome(); - utils.common.goToFirstProject(); - utils.common.goToIssues(); + await utils.common.goHome(); + await utils.common.goToFirstProject(); + + await utils.common.goToIssues(); + issuesUrl = await browser.getCurrentUrl(); - utils.common.goToFirstIssue(); + + await utils.common.goToFirstIssue(); }); it('screenshot', async function() { @@ -34,7 +37,7 @@ describe('Issue detail', async function(){ it('block', utils.detail.blockTesting); - it('attachments', utils.detail.attachmentTesting) + it('attachments', utils.detail.attachmentTesting); it('screenshot', async function() { await utils.common.takeScreenshot("issues", "detail updated"); @@ -46,5 +49,4 @@ describe('Issue detail', async function(){ let url = await browser.getCurrentUrl(); expect(url.endsWith(issuesUrl)).to.be.true; }); - -}) +}); diff --git a/e2e/full/kanband.e2e.js b/e2e/full/kanband.e2e.js index 56ba64b3..3e9d0fbe 100644 --- a/e2e/full/kanband.e2e.js +++ b/e2e/full/kanband.e2e.js @@ -235,7 +235,7 @@ describe('kanban', function() { }); describe('archive', function() { - it('move to archive', async function() { + utils.common.browserSkip('firefox', 'move to archive', async function() { let initOriginUsCount = await kanbanHelper.getBoxUss(3).count(); let usOrigin = kanbanHelper.getBoxUss(3).first(); @@ -254,7 +254,7 @@ describe('kanban', function() { expect(originUsCount).to.be.equal(initOriginUsCount - 1); }); - it('show archive', async function() { + utils.common.browserSkip('firefox', 'show archive', async function() { $('.icon-open-eye').click(); await kanbanHelper.scrollRight(); @@ -266,7 +266,7 @@ describe('kanban', function() { expect(usCount).to.be.above(0); }); - it('close archive', async function() { + utils.common.browserSkip('firefox', 'close archive', async function() { $('.icon-closed-eye').click(); let usCount = await kanbanHelper.getBoxUss(5).count(); diff --git a/e2e/full/project-home.e2e.js b/e2e/full/project-home.e2e.js index 31b03717..c293c700 100644 --- a/e2e/full/project-home.e2e.js +++ b/e2e/full/project-home.e2e.js @@ -16,9 +16,8 @@ describe('project home', function() { await utils.common.takeScreenshot("project", "home"); }); - it('go to project', function() { - browser.actions().mouseMove($('div[tg-dropdown-project-list]')).perform(); - $$('div[tg-dropdown-project-list] ul a').first().click(); + it('go to project', async function() { + await utils.common.goToFirstProject(); }); it('timeline filled', function() { diff --git a/e2e/helpers/detail-helper.js b/e2e/helpers/detail-helper.js index b7a5117b..a3e7c98d 100644 --- a/e2e/helpers/detail-helper.js +++ b/e2e/helpers/detail-helper.js @@ -57,7 +57,7 @@ helper.tags = function() { clearTags: async function() { let tags = await el.$$('.icon-delete'); - let totalTags = tags.length + let totalTags = tags.length; while (totalTags > 0) { el.$$('.icon-delete').first().click(); await browser.waitForAngular(); @@ -94,9 +94,11 @@ helper.assignedTo = function() { el: el, clear: async function() { - el.$('.icon-delete').click(); - await utils.lightbox.confirm.ok(); - await browser.waitForAngular(); + await browser.actions().mouseMove(el).perform(); + + el.$('.icon-delete').click(); + await utils.lightbox.confirm.ok(); + await browser.waitForAngular(); }, assign: function() { @@ -152,7 +154,7 @@ helper.history = function() { }, countComments: async function() { - let moreComments = el.$('.comments-list .show-more-comments') + let moreComments = el.$('.comments-list .show-more-comments'); let moreCommentsIsPresent = await moreComments.isPresent(); if (moreCommentsIsPresent){ moreComments.click(); @@ -163,10 +165,11 @@ helper.history = function() { }, countActivities: async function() { - let moreActivities = el.$('.changes-list .show-more-comments') + let moreActivities = el.$('.changes-list .show-more-comments'); let selectActivityTabIsPresent = await moreActivities.isPresent(); if (selectActivityTabIsPresent){ - moreActivities.click(); + utils.common.link(moreActivities); + // moreActivities.click(); } await browser.waitForAngular(); let activities = await el.$$(".activity-single.activity"); @@ -174,7 +177,7 @@ helper.history = function() { }, countDeletedComments: async function() { - let moreComments = el.$('.comments-list .show-more-comments') + let moreComments = el.$('.comments-list .show-more-comments'); let moreCommentsIsPresent = await moreComments.isPresent(); if (moreCommentsIsPresent){ moreComments.click(); @@ -249,10 +252,10 @@ helper.delete = function() { el.$('.button-red').click(); await utils.lightbox.confirm.ok(); } - } + }; return obj; -} +}; helper.attachment = function() { let el = $('tg-attachments'); @@ -260,12 +263,20 @@ helper.attachment = function() { let obj = { el:el, upload: async function(filePath, name) { + let addAttach = el.$('#add-attach'); + + let toggleInput = function() { + $('#add-attach').toggle(); + }; + + await browser.executeScript(toggleInput); await el.$('#add-attach').sendKeys(filePath); await browser.waitForAngular(); //TODO: ask JF why this is needed - await browser.sleep(2000) + await browser.sleep(2000); await el.$$('div[tg-attachment] .editable-attachment-comment input').last().sendKeys(name); await browser.actions().sendKeys(protractor.Key.ENTER).perform(); + await browser.executeScript(toggleInput); await browser.waitForAngular(); }, diff --git a/e2e/utils/common.js b/e2e/utils/common.js index b22359a6..c75f3995 100644 --- a/e2e/utils/common.js +++ b/e2e/utils/common.js @@ -9,10 +9,24 @@ common.hasClass = async function (element, cls) { return classes.split(' ').indexOf(cls) !== -1; }; +common.isBrowser = async function(browserName) { + let cap = await browser.getCapabilities(); + + return browserName === cap.caps_.browserName; +}; + +common.browserSkip = function(browserName, name, fn) { + if (browser.browserName !== browserName) { + return it.call(this, name, fn); + } else { + return it.skip.call(this, name, fn); + } +}; + common.link = async function(el) { await browser.actions().mouseMove(el).perform(); - el.click(); + await el.click(); }; common.waitLoader = function () { @@ -212,41 +226,54 @@ common.clear = function(elem, length) { common.goHome = async function() { browser.get('http://localhost:9001'); - await utils.common.waitLoader(); + + await common.waitLoader(); }; common.goToFirstProject = async function() { - browser.actions().mouseMove($('div[tg-dropdown-project-list]')).perform(); - $$('div[tg-dropdown-project-list] li a').first().click(); - await utils.common.waitLoader(); + await browser.actions().mouseMove($('div[tg-dropdown-project-list]')).perform(); + + let project = $$('div[tg-dropdown-project-list] li a').first(); + + await common.link(project); + + await common.waitLoader(); }; common.goToIssues = async function() { - $('#nav-issues').click(); - await utils.common.waitLoader(); + await common.link($('#nav-issues a')); + + await common.waitLoader(); }; common.goToFirstIssue = async function() { - $$('section.issues-table .row.table-main .subject a').first().click(); - await utils.common.waitLoader(); + let issue = $$('section.issues-table .row.table-main .subject a').first(); + + await common.link(issue); + + await common.waitLoader(); }; common.goToBacklog = async function() { - $('#nav-backlog').click(); - await utils.common.waitLoader(); + await common.link($('#nav-backlog a')); + + await common.waitLoader(); } common.goToFirstUserStory = async function() { - $$('.user-story-name>a').first().click(); - await utils.common.waitLoader(); + await common.link($$('.user-story-name>a').first()); + + await common.waitLoader(); } common.goToFirstSprint = async function() { - $$('div[tg-backlog-sprint] a.button-gray').first().click(); - await utils.common.waitLoader(); + await common.link($$('div[tg-backlog-sprint] a.button-gray').first()); + + await common.waitLoader(); } common.goToFirstTask = async function() { - $$('div[tg-taskboard-task] a.task-name').first().click(); - await utils.common.waitLoader(); + await common.link($$('div[tg-taskboard-task] a.task-name').first()); + + await common.waitLoader(); } diff --git a/e2e/utils/detail.js b/e2e/utils/detail.js index 267d8d91..24b85828 100644 --- a/e2e/utils/detail.js +++ b/e2e/utils/detail.js @@ -12,7 +12,7 @@ var helper = module.exports; helper.titleTesting = async function() { let titleHelper = detailHelper.title(); let title = await titleHelper.getTitle(); - let date = Date.now() + let date = Date.now(); titleHelper.setTitle("New title " + date); let newTitle = await titleHelper.getTitle(); expect(newTitle).to.be.not.equal(title); @@ -23,7 +23,7 @@ helper.tagsTesting = async function() { let tagsText = await tagsHelper.getTagsText(); await tagsHelper.clearTags(); let date = Date.now(); - let tags = [1, 2, 3, 4, 5].map(function(i){ return date + "-" + i}) + let tags = [1, 2, 3, 4, 5].map((i) => date + "-" + i); tagsHelper.addTags(tags); await browser.waitForAngular(); let newtagsText = await tagsHelper.getTagsText(); @@ -33,9 +33,9 @@ helper.tagsTesting = async function() { helper.descriptionTesting = async function() { let descriptionHelper = detailHelper.description(); let description = await descriptionHelper.getInnerHtml(); - let date = Date.now() + let date = Date.now(); descriptionHelper.enabledEditionMode(); - descriptionHelper.setText("New description " + date) + descriptionHelper.setText("New description " + date); descriptionHelper.save(); let newDescription = await descriptionHelper.getInnerHtml(); expect(newDescription).to.be.not.equal(description); @@ -61,11 +61,12 @@ helper.historyTesting = async function() { //Adding a comment historyHelper.selectCommentsTab(); let commentsCounter = await historyHelper.countComments(); - let date = Date.now() + let date = Date.now(); await historyHelper.addComment("New comment " + date); let newCommentsCounter = await historyHelper.countComments(); expect(newCommentsCounter).to.be.equal(commentsCounter+1); + //Deleting last comment let deletedCommentsCounter = await historyHelper.countDeletedComments(); await historyHelper.deleteLastComment(); @@ -80,7 +81,9 @@ helper.historyTesting = async function() { //Check activity historyHelper.selectActivityTab(); + let activitiesCounter = await historyHelper.countActivities(); + expect(activitiesCounter).to.be.least(newCommentsCounter); } @@ -107,6 +110,7 @@ helper.attachmentTesting = async function() { var fileToUpload = './upload-file-test.txt', absolutePath = path.resolve(process.cwd(), 'e2e', fileToUpload); await attachmentHelper.upload(absolutePath, 'This is the testing name ' + date); + // Check set name let name = await attachmentHelper.getLastAttachmentName(); expect(name).to.be.equal('This is the testing name ' + date); @@ -122,7 +126,7 @@ helper.attachmentTesting = async function() { // Renaming await attachmentHelper.renameLastAttchment('This is the new testing name ' + date); name = await attachmentHelper.getLastAttachmentName(); - expect(name).to.be.equal('This is the new testing name ' + date) + expect(name).to.be.equal('This is the new testing name ' + date); // Deprecating let deprecatedAttachmentsLength = await attachmentHelper.countDeprecatedAttachments();