From 09d3020366a23202aa94897dcdffef871e0f6e4c Mon Sep 17 00:00:00 2001 From: Dmitry Sotnikov Date: Mon, 7 Feb 2022 13:11:23 +0200 Subject: [PATCH 1/4] added new spec for checking inbox pagination after loading all messages --- appium/tests/helpers/MailFolderHelper.ts | 15 +++++++++++ appium/tests/helpers/TouchHelper.ts | 23 ++++++++++++++++ .../tests/screenobjects/mail-folder.screen.ts | 22 ++++++++++++++- ...boxPaginationAfterLoadingAllEmails.spec.ts | 27 +++++++++++++++++++ 4 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 appium/tests/helpers/MailFolderHelper.ts create mode 100644 appium/tests/specs/live/inbox/CheckinboxPaginationAfterLoadingAllEmails.spec.ts diff --git a/appium/tests/helpers/MailFolderHelper.ts b/appium/tests/helpers/MailFolderHelper.ts new file mode 100644 index 000000000..119594497 --- /dev/null +++ b/appium/tests/helpers/MailFolderHelper.ts @@ -0,0 +1,15 @@ +import MailFolderScreen from "../screenobjects/mail-folder.screen"; + + +class MailFolderHelper { + + static checkPagination = async (subject: string) => { + let emailsCountBeforeScroll = await MailFolderScreen.getEmailCount(); + await MailFolderScreen.scrollDownToEmail(subject); + expect(emailsCountBeforeScroll).toEqual(40); //Should be changed to 20 when https://github.com/FlowCrypt/flowcrypt-ios/issues/1366 is fixed + + let emailsCountAfterScroll = await MailFolderScreen.getEmailCount(); + expect(emailsCountBeforeScroll).toBeLessThan(emailsCountAfterScroll); + } +} +export default MailFolderHelper; diff --git a/appium/tests/helpers/TouchHelper.ts b/appium/tests/helpers/TouchHelper.ts index f74522070..00966d072 100644 --- a/appium/tests/helpers/TouchHelper.ts +++ b/appium/tests/helpers/TouchHelper.ts @@ -53,5 +53,28 @@ class TouchHelper { } throw new Error(`Element ${JSON.stringify(element.selector)} not displayed after scroll`); } + + static scrollUpToElement = async (element: WebdriverIO.Element) => { + const { width, height } = await driver.getWindowSize(); + const anchor = width / 2; + const startPoint = height * 0.15; + const endPoint = height * 0.75; + + // this wait can be later replaced by waiting for loader to go away before scrolling + await browser.pause(1000); // make sure contents are loaded first, so we don't scroll too early + for(let i = 0; i < 15; i++) { + if (await element.isDisplayed()) { + return; + } + await driver.touchPerform([ + {action: 'press', options: {x: anchor, y: startPoint}}, + {action: 'wait', options: {ms: 100}}, + {action: 'moveTo', options: {x: anchor, y: endPoint}}, + {action: 'release', options: {}}, + ]); + await browser.pause(1000); // due to scroll action which takes about second + } + throw new Error(`Element ${JSON.stringify(element.selector)} not displayed after scroll`); + } } export default TouchHelper; diff --git a/appium/tests/screenobjects/mail-folder.screen.ts b/appium/tests/screenobjects/mail-folder.screen.ts index ce7d20371..a73eb10fe 100644 --- a/appium/tests/screenobjects/mail-folder.screen.ts +++ b/appium/tests/screenobjects/mail-folder.screen.ts @@ -9,7 +9,8 @@ const SELECTORS = { INBOX_HEADER: '~navigationItemInbox', SEARCH_ICON: '~search icn', HELP_ICON: '~help icn', - SEARCH_FIELD: '~searchAllEmailField' + SEARCH_FIELD: '~searchAllEmailField', + INBOX_LIST: '-ios class chain:**/XCUIElementTypeOther/XCUIElementTypeTable[2]/XCUIElementTypeCell', }; class MailFolderScreen extends BaseScreen { @@ -45,6 +46,10 @@ class MailFolderScreen extends BaseScreen { return $(SELECTORS.SEARCH_FIELD); } + get inboxList() { + return $$(SELECTORS.INBOX_LIST); + } + checkTrashScreen = async () => { await expect(await this.trashHeader).toBeDisplayed(); await expect(await this.searchIcon).toBeDisplayed(); @@ -88,6 +93,21 @@ class MailFolderScreen extends BaseScreen { await $(`~${email}`).click(); } + scrollDownToEmail = async (subject: string) => { + const elem = $(`~${subject}`); + await TouchHelper.scrollDownToElement(await elem); + }; + + getEmailCount = async () => { + await browser.pause(1000); + return await this.inboxList.length; + }; + + scrollUpToFirstEmail = async () => { + const elem = await this.inboxList[0]; + await TouchHelper.scrollUpToElement(elem); + } + checkInboxScreen = async () => { await expect(await this.inboxHeader).toBeDisplayed(); await expect(await this.searchIcon).toBeDisplayed(); diff --git a/appium/tests/specs/live/inbox/CheckinboxPaginationAfterLoadingAllEmails.spec.ts b/appium/tests/specs/live/inbox/CheckinboxPaginationAfterLoadingAllEmails.spec.ts new file mode 100644 index 000000000..358de3af1 --- /dev/null +++ b/appium/tests/specs/live/inbox/CheckinboxPaginationAfterLoadingAllEmails.spec.ts @@ -0,0 +1,27 @@ +import { + SplashScreen, + SetupKeyScreen, + MailFolderScreen, +} from '../../../screenobjects/all-screens'; + +import { CommonData } from '../../../data'; +import MailFolderHelper from "../../../helpers/MailFolderHelper"; + +describe('INBOX: ', () => { + + it('check inbox pagination after loading all messages', async () => { + + const firstEmailSubject = CommonData.simpleEmail.subject; + + await SplashScreen.login(); + await SetupKeyScreen.setPassPhrase(); + await MailFolderScreen.checkInboxScreen(); + + await MailFolderHelper.checkPagination(firstEmailSubject); + + await MailFolderScreen.scrollUpToFirstEmail(); + await MailFolderScreen.refreshMailList(); + + await MailFolderHelper.checkPagination(firstEmailSubject); + }); +}); From 08159d5c7f1c006f1986ed566d30e8c0cf399053 Mon Sep 17 00:00:00 2001 From: Dmitry Sotnikov Date: Mon, 7 Feb 2022 14:03:58 +0200 Subject: [PATCH 2/4] added new spec for checking inbox pagination after loading all messages --- appium/tests/helpers/MailFolderHelper.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appium/tests/helpers/MailFolderHelper.ts b/appium/tests/helpers/MailFolderHelper.ts index 119594497..40abee32f 100644 --- a/appium/tests/helpers/MailFolderHelper.ts +++ b/appium/tests/helpers/MailFolderHelper.ts @@ -4,11 +4,11 @@ import MailFolderScreen from "../screenobjects/mail-folder.screen"; class MailFolderHelper { static checkPagination = async (subject: string) => { - let emailsCountBeforeScroll = await MailFolderScreen.getEmailCount(); + const emailsCountBeforeScroll = await MailFolderScreen.getEmailCount(); await MailFolderScreen.scrollDownToEmail(subject); expect(emailsCountBeforeScroll).toEqual(40); //Should be changed to 20 when https://github.com/FlowCrypt/flowcrypt-ios/issues/1366 is fixed - let emailsCountAfterScroll = await MailFolderScreen.getEmailCount(); + const emailsCountAfterScroll = await MailFolderScreen.getEmailCount(); expect(emailsCountBeforeScroll).toBeLessThan(emailsCountAfterScroll); } } From 5733f401de848777765852eb9cd92eae333f44f8 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Mon, 7 Feb 2022 15:56:59 +0200 Subject: [PATCH 3/4] #1288 add inbox list identifier --- FlowCrypt/Controllers/Inbox/InboxViewController.swift | 1 + appium/tests/screenobjects/mail-folder.screen.ts | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/FlowCrypt/Controllers/Inbox/InboxViewController.swift b/FlowCrypt/Controllers/Inbox/InboxViewController.swift index 8e38f2ce5..99ca57986 100644 --- a/FlowCrypt/Controllers/Inbox/InboxViewController.swift +++ b/FlowCrypt/Controllers/Inbox/InboxViewController.swift @@ -100,6 +100,7 @@ extension InboxViewController { $0.delegate = self $0.dataSource = self $0.leadingScreensForBatching = 1 + $0.accessibilityIdentifier = "aid-inbox-list" $0.view.refreshControl = refreshControl node.addSubnode($0) } diff --git a/appium/tests/screenobjects/mail-folder.screen.ts b/appium/tests/screenobjects/mail-folder.screen.ts index a73eb10fe..9961c119d 100644 --- a/appium/tests/screenobjects/mail-folder.screen.ts +++ b/appium/tests/screenobjects/mail-folder.screen.ts @@ -10,7 +10,7 @@ const SELECTORS = { SEARCH_ICON: '~search icn', HELP_ICON: '~help icn', SEARCH_FIELD: '~searchAllEmailField', - INBOX_LIST: '-ios class chain:**/XCUIElementTypeOther/XCUIElementTypeTable[2]/XCUIElementTypeCell', + INBOX_LIST: '~aid-inbox-list', }; class MailFolderScreen extends BaseScreen { @@ -47,7 +47,7 @@ class MailFolderScreen extends BaseScreen { } get inboxList() { - return $$(SELECTORS.INBOX_LIST); + return $$(SELECTORS.INBOX_LIST); } checkTrashScreen = async () => { From 6ea2e386591c9eb0a17bca50abaf700191a49bb0 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Mon, 7 Feb 2022 23:02:46 +0200 Subject: [PATCH 4/4] rollback inbox list identifier --- appium/tests/screenobjects/mail-folder.screen.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appium/tests/screenobjects/mail-folder.screen.ts b/appium/tests/screenobjects/mail-folder.screen.ts index 9961c119d..40e583676 100644 --- a/appium/tests/screenobjects/mail-folder.screen.ts +++ b/appium/tests/screenobjects/mail-folder.screen.ts @@ -10,7 +10,7 @@ const SELECTORS = { SEARCH_ICON: '~search icn', HELP_ICON: '~help icn', SEARCH_FIELD: '~searchAllEmailField', - INBOX_LIST: '~aid-inbox-list', + INBOX_LIST: '-ios class chain:**/XCUIElementTypeOther/XCUIElementTypeTable[2]/XCUIElementTypeCell', }; class MailFolderScreen extends BaseScreen {