Decreasing android input flakiness

This commit is contained in:
Anant Bhasin 2021-06-24 02:30:26 +05:30
parent bb6e19c860
commit eb8fb69639
32 changed files with 74 additions and 4 deletions

View File

@ -17,6 +17,11 @@ function runCommand(command) {
});
}
exports.prepareAndroid = async () => {
await runCommand('adb shell settings put secure spell_checker_enabled 0');
await runCommand('adb shell settings put secure autofill_service null');
}
exports.launchWithLanguage = async (language, countryCode="US", launchArgs=defaultLaunchArgs) => {
if(device.id === undefined)
{
@ -40,4 +45,8 @@ exports.launchWithLanguage = async (language, countryCode="US", launchArgs=defau
}
});
}
}
}
exports.closeKeyboardAndroid = async () => {
await device.pressBack(); // Android-only
}

View File

@ -6,6 +6,7 @@ const { navigateToLogin, login, sleep, tapBack, mockMessage, searchRoom, logout
const platformTypes = require('../../helpers/platformTypes');
const data = require('../../data');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const testuser = data.users.regular
const otheruser = data.users.alternate
@ -50,6 +51,7 @@ describe('E2E Encryption', () => {
before(async () => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
({ alertButtonType, scrollViewType } = platformTypes[device.getPlatform()]);
await navigateToLogin();
await login(testuser.username, testuser.password);

View File

@ -5,6 +5,7 @@ const OTP = require('otp.js');
const GA = OTP.googleAuthenticator;
const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom } = require('../../helpers/app');
const data = require('../../data');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const testuser = data.users.regular
const otheruser = data.users.alternate
@ -12,6 +13,7 @@ const otheruser = data.users.alternate
describe('Broadcast room', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(testuser.username, testuser.password);
});

View File

@ -5,6 +5,7 @@ const { navigateToLogin, login, sleep } = require('../../helpers/app');
const data = require('../../data');
const platformTypes = require('../../helpers/platformTypes');
const { closeKeyboardAndroid, prepareAndroid } = require('../../helpers/platformFunctions');
const profileChangeUser = data.users.profileChanges
@ -23,6 +24,7 @@ describe('Profile screen', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
({ textInputType, scrollViewType } = platformTypes[device.getPlatform()]);
await navigateToLogin();
await login(profileChangeUser.username, profileChangeUser.password);
@ -83,7 +85,7 @@ describe('Profile screen', () => {
it('should change name and username', async() => {
await element(by.id('profile-view-name')).replaceText(`${ profileChangeUser.username }new`);
await element(by.id('profile-view-username')).typeText(`${ profileChangeUser.username }new`);
await device.pressBack();
await closeKeyboardAndroid();
await element(by.type(scrollViewType)).atIndex(1).swipe('up');
await element(by.id('profile-view-submit')).tap();
await waitForToast();

View File

@ -4,6 +4,7 @@ const {
const { navigateToLogin, login, tapBack } = require('../../helpers/app');
const platformTypes = require('../../helpers/platformTypes');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const data = require('../../data');
@ -13,6 +14,7 @@ describe('Settings screen', () => {
let alertButtonType;
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
({ alertButtonType } = platformTypes[device.getPlatform()]);
await navigateToLogin();
await login(testuser.username, testuser.password);

View File

@ -5,6 +5,7 @@ const data = require('../../data');
const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom } = require('../../helpers/app');
const platformTypes = require('../../helpers/platformTypes');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const testuser = data.users.regular
const room = data.channels.detoxpublic.name;
@ -24,6 +25,7 @@ describe('Join public room', () => {
let scrollViewType;
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
({ scrollViewType } = platformTypes[device.getPlatform()]);
await navigateToLogin();
await login(testuser.username, testuser.password);

View File

@ -2,6 +2,7 @@ const {
expect, element, by, waitFor
} = require('detox');
const { navigateToLogin, login, sleep } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const data = require('../../data');
const testuser = data.users.regular
@ -13,6 +14,7 @@ async function waitForToast() {
describe('Status screen', () => {
before(async () => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(testuser.username, testuser.password);

View File

@ -3,6 +3,7 @@ const {
} = require('detox');
const data = require('../../data');
const { navigateToLogin, login, checkServer } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const reopenAndCheckServer = async(server) => {
await device.terminateApp();
@ -14,6 +15,7 @@ const reopenAndCheckServer = async(server) => {
describe('Change server', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(data.users.regular.username, data.users.regular.password);
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000);

View File

@ -3,6 +3,7 @@ const {
} = require('detox');
const data = require('../../data');
const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const testuser = data.users.regular
const room = data.channels.detoxpublicprotected.name
@ -22,6 +23,7 @@ async function openJoinCode() {
describe('Join protected room', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(testuser.username, testuser.password);
await navigateToRoom();

View File

@ -3,6 +3,7 @@ const {
} = require('detox');
const data = require('../../data');
const { navigateToLogin, login, tapBack, sleep } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const testuser = data.users.regular
@ -18,6 +19,7 @@ async function navigateToRoom(search) {
describe('Join room from directory', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(testuser.username, testuser.password);
});

View File

@ -5,11 +5,13 @@ const data = require('../../data');
const { sleep, navigateToLogin, login, checkServer } = require('../../helpers/app');
const platformTypes = require('../../helpers/platformTypes');
const { prepareAndroid } = require('../../helpers/platformFunctions');
describe('Delete server', () => {
let scrollViewType, alertButtonType;
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
({ alertButtonType, scrollViewType } = platformTypes[device.getPlatform()]);
await navigateToLogin();
await login(data.users.regular.username, data.users.regular.password);

View File

@ -5,6 +5,7 @@ const data = require('../../data');
const { tapBack, checkServer, navigateToRegister } = require('../../helpers/app');
const { post, get, login } = require('../../helpers/data_setup');
const platformTypes = require('../../helpers/platformTypes');
const { closeKeyboardAndroid, prepareAndroid } = require('../../helpers/platformFunctions');
const DEEPLINK_METHODS = { AUTH: 'auth', ROOM: 'room' };
@ -34,6 +35,7 @@ describe('Deep linking', () => {
delete: true,
url: getDeepLink(DEEPLINK_METHODS.AUTH, data.server, `userId=123${amp}token=abc`),
});
if(device.getPlatform() == 'android') await prepareAndroid();
await waitFor(element(by.text('You\'ve been logged out by the server. Please log in again.'))).toExist().withTimeout(10000); // TODO: we need to improve this message
});
@ -61,7 +63,7 @@ describe('Deep linking', () => {
await element(by.id('register-view-username')).replaceText(data.registeringUser4.username);
await element(by.id('register-view-email')).replaceText(data.registeringUser4.email);
await element(by.id('register-view-password')).typeText(data.registeringUser4.password);
await device.pressBack();
await closeKeyboardAndroid();
await element(by.type(scrollViewType)).atIndex(0).scrollTo('bottom');
await element(by.id('register-view-submit')).tap();
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000);

View File

@ -3,7 +3,7 @@ const {
} = require('detox');
const { navigateToLogin, login, sleep } = require('../../helpers/app');
const { post } = require('../../helpers/data_setup');
const { launchWithLanguage } = require('../../helpers/platformFunctions');
const { launchWithLanguage, prepareAndroid } = require('../../helpers/platformFunctions');
const data = require('../../data');
const testuser = data.users.regular
@ -27,6 +27,7 @@ describe('i18n', () => {
...defaultLaunchArgs,
delete: true
});
if(device.getPlatform() == 'android') await prepareAndroid();
await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000);
await expect(element(by.id('join-workspace').and(by.label('Join a workspace')))).toBeVisible();
await expect(element(by.id('create-workspace-button').and(by.label('Create a new workspace')))).toBeVisible();

View File

@ -2,10 +2,12 @@ const {
device, expect, element, by, waitFor
} = require('detox');
const data = require('../../data');
const { prepareAndroid } = require('../../helpers/platformFunctions');
describe('Onboarding', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000);
});

View File

@ -2,12 +2,14 @@ const {
device, expect, element, by, waitFor
} = require('detox');
const { navigateToRegister, navigateToLogin } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
describe('Legal screen', () => {
describe('From Login', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
});

View File

@ -3,10 +3,12 @@ const {
} = require('detox');
const data = require('../../data');
const { navigateToLogin } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
describe('Forgot password screen', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await element(by.id('login-view-forgot-password')).tap();
await waitFor(element(by.id('forgot-password-view'))).toExist().withTimeout(2000);

View File

@ -2,11 +2,13 @@ const {
device, expect, element, by, waitFor
} = require('detox');
const { navigateToRegister, sleep } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const data = require('../../data');
describe('Create user screen', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToRegister();
});

View File

@ -2,11 +2,13 @@ const {
expect, element, by, waitFor
} = require('detox');
const { navigateToLogin, tapBack, sleep } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const data = require('../../data');
describe('Login screen', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, newInstance: true, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
});

View File

@ -2,12 +2,14 @@ const {
device, expect, element, by, waitFor
} = require('detox');
const { login, navigateToLogin, logout, tapBack, sleep, searchRoom } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const data = require('../../data');
describe('Rooms list screen', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, newInstance: true, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(data.users.regular.username, data.users.regular.password)
});

View File

@ -2,11 +2,13 @@ const {
device, expect, element, by, waitFor
} = require('detox');
const { login, navigateToLogin, logout, tapBack } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const data = require('../../data');
describe('Server history', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
});
describe('Usage', () => {

View File

@ -3,12 +3,14 @@ const {
} = require('detox');
const data = require('../../data');
const { tapBack, sleep, navigateToLogin, login, tryTapping } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
describe('Create room screen', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(data.users.regular.username, data.users.regular.password);
});

View File

@ -3,6 +3,7 @@ const {
} = require('detox');
const data = require('../../data');
const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom, starMessage, pinMessage, dismissReviewNag, tryTapping, logout } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
async function navigateToRoom(roomName) {
await searchRoom(`${ roomName }`);
@ -15,6 +16,7 @@ describe('Room screen', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(data.users.regular.username, data.users.regular.password);
await navigateToRoom(mainRoom);

View File

@ -3,6 +3,7 @@ const {
} = require('detox');
const data = require('../../data');
const { navigateToLogin, login, tapBack, sleep, searchRoom, mockMessage, starMessage, pinMessage } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const { sendMessage } = require('../../helpers/data_setup')
const platformTypes = require('../../helpers/platformTypes');
@ -41,6 +42,7 @@ describe('Room actions screen', () => {
let alertButtonType;
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(data.users.regular.username, data.users.regular.password);
({ alertButtonType } = platformTypes[device.getPlatform()]);

View File

@ -4,6 +4,7 @@ const {
const { navigateToLogin, login, mockMessage, tapBack, searchRoom } = require('../../helpers/app');
const data = require('../../data');
const platformTypes = require('../../helpers/platformTypes');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const channel = data.groups.private.name;
@ -18,6 +19,7 @@ describe('Discussion', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, newInstance: true, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(data.users.regular.username, data.users.regular.password);
({ scrollViewType } = platformTypes[device.getPlatform()]);

View File

@ -3,9 +3,11 @@ const {
} = require('detox');
const data = require('../../data');
const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom, starMessage, pinMessage, dismissReviewNag, tryTapping, mockMessageWithNag } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
async function navigateToRoom(roomName) {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(data.users.regular.username, data.users.regular.password);
await searchRoom(`${ roomName }`);

View File

@ -3,12 +3,14 @@ const {
} = require('detox');
const data = require('../../data');
const { tapBack, sleep, navigateToLogin, login, tryTapping } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
describe('Group DM', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(data.users.regular.username, data.users.regular.password);
});

View File

@ -3,6 +3,7 @@ const {
} = require('detox');
const data = require('../../data');
const { navigateToLogin, login, searchRoom, sleep } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const { sendMessage } = require('../../helpers/data_setup')
async function navigateToRoom(user) {
@ -16,6 +17,7 @@ describe('Mark as unread', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(data.users.regular.username, data.users.regular.password);
await navigateToRoom(user);

View File

@ -3,6 +3,7 @@ const {
} = require('detox');
const data = require('../../data');
const { navigateToLogin, login, tapBack, sleep, searchRoom } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const privateRoomName = data.groups.private.name
@ -34,6 +35,7 @@ describe('Room info screen', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(data.users.regular.username, data.users.regular.password);
});

View File

@ -3,6 +3,7 @@ const {
} = require('detox');
const data = require('../../data');
const { navigateToLogin, mockMessage, tapBack, login, sleep, searchRoom } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
async function navigateToRoom(roomName) {
await searchRoom(`${ roomName }`);
@ -33,6 +34,7 @@ async function waitForLoading() {
describe('Room', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(data.adminUser, data.adminPassword);
});

View File

@ -3,12 +3,14 @@ const {
} = require('detox');
const data = require('../../data');
const { navigateToLogin, login } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const teamName = `team-${ data.random }`;
describe('Create team screen', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(data.users.regular.username, data.users.regular.password);
});

View File

@ -3,6 +3,7 @@ const {
} = require('detox');
const data = require('../../data');
const { navigateToLogin, login, tapBack, sleep, searchRoom } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
async function navigateToRoom(roomName) {
await searchRoom(`${ roomName }`);
@ -44,6 +45,7 @@ describe('Team', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(data.users.regular.username, data.users.regular.password);
await navigateToRoom(team);

View File

@ -3,6 +3,7 @@ const {
} = require('detox');
const data = require('../../data');
const { navigateToLogin, login, tapBack, searchRoom, sleep } = require('../../helpers/app');
const { prepareAndroid } = require('../../helpers/platformFunctions');
const toBeConverted = `to-be-converted-${ data.random }`;
const toBeMoved = `to-be-moved-${ data.random }`;
@ -38,6 +39,7 @@ async function navigateToRoomActions(room) {
describe('Move/Convert Team', () => {
before(async() => {
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
if(device.getPlatform() == 'android') await prepareAndroid();
await navigateToLogin();
await login(data.users.regular.username, data.users.regular.password);
});