Skip to content

Commit

Permalink
test: e2e - test fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
ljagiela committed Jan 23, 2025
1 parent 186c7b6 commit b344450
Show file tree
Hide file tree
Showing 8 changed files with 120 additions and 52 deletions.
15 changes: 8 additions & 7 deletions packages/e2e-tests/src/assert/nftAssert.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import testContext from '../utils/testContext';
import { Asset } from '../data/Asset';
import adaHandleAssert from './adaHandleAssert';
import { scrollToTheTop } from '../utils/scrollUtils';
import NftsCommon from '../elements/NFTs/nftsCommon';

use(chaiSorted);

Expand All @@ -23,7 +24,9 @@ class NftAssert {
}

async assertCounterNumberMatchesWalletNFTs() {
const nftsNumber = await NftsPage.nftContainers.length;
const nftsNumber = (
await NftsCommon.getAllNftNamesWithScroll(`${NftsPage.LIST_CONTAINER} ${NftsPage.NFT_CONTAINER}`)
).length;
const tokensCounterValue = Number((await NftsPage.counter.getText()).slice(1, -1));
expect(nftsNumber).to.equal(tokensCounterValue);
}
Expand Down Expand Up @@ -118,13 +121,11 @@ class NftAssert {
}

async assertNftDisplayedOnNftsPage(nftName: string, shouldBeDisplayed: boolean) {
if (shouldBeDisplayed) {
try {
await NftsPage.waitForNft(nftName);
} else {
try {
await NftsPage.waitForNft(nftName);
} catch {
await scrollToTheTop(NftsPage.NFT_CONTAINER);
} catch {
if (!shouldBeDisplayed) {
await scrollToTheTop(`${NftsPage.LIST_CONTAINER} ${NftsPage.NFT_CONTAINER}`);
}
}
const nftItem = await NftsPage.getNftContainer(nftName);
Expand Down
29 changes: 6 additions & 23 deletions packages/e2e-tests/src/assert/nftCreateFolderAssert.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ import YoullHaveToStartAgainModal from '../elements/NFTs/youllHaveToStartAgainMo
import NftsFolderPage from '../elements/NFTs/nftsFolderPage';
import adaHandleAssert from './adaHandleAssert';
import { browser } from '@wdio/globals';
import { scrollToWithYOffset } from '../utils/scrollUtils';
import { scrollToTheTop } from '../utils/scrollUtils';
import NftsCommon from '../elements/NFTs/nftsCommon';

class NftCreateFolderAssert {
async assertSeeCreateFolderButton(shouldSee: boolean, mode: 'extended' | 'popup') {
Expand Down Expand Up @@ -99,30 +100,12 @@ class NftCreateFolderAssert {

async verifySeeAllOwnedNfts() {
const ownedNftNames = testContext.load('ownedNfts');
const displayedNftNames: string[] = [];
let previousFirstVisibleNft = '';
let hasMoreNftsToScroll = true;

while (hasMoreNftsToScroll) {
const displayedNfts = await TokenSelectionPage.nftContainers;
await scrollToTheTop(`${TokenSelectionPage.ASSET_SELECTOR_CONTAINER} ${TokenSelectionPage.NFT_CONTAINER}`); // make sure we are starting from the top

for (const nftContainer of displayedNfts) {
const nftName = await nftContainer.getText();
if (!displayedNftNames.includes(nftName)) {
displayedNftNames.push(nftName);
}
}

const firstVisibleNft = displayedNfts.length > 0 ? await displayedNfts[0].getText() : 'not_found';
if (firstVisibleNft === previousFirstVisibleNft) {
hasMoreNftsToScroll = false;
} else {
previousFirstVisibleNft = firstVisibleNft;
const lastNft = displayedNfts[displayedNfts.length - 1];
await scrollToWithYOffset(lastNft, 30);
await browser.pause(300);
}
}
const displayedNftNames = await NftsCommon.getAllNftNamesWithScroll(
`${TokenSelectionPage.ASSET_SELECTOR_CONTAINER} ${TokenSelectionPage.NFT_CONTAINER}`
);

expect(ownedNftNames).to.have.ordered.members(displayedNftNames);
}
Expand Down
31 changes: 22 additions & 9 deletions packages/e2e-tests/src/elements/NFTs/nftSelectNftsPage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import SearchInput from '../searchInput';
import { browser } from '@wdio/globals';
import { ChainablePromiseArray } from 'webdriverio/build/types';
import { ChainablePromiseElement } from 'webdriverio';
import { scrollDownWithOffset, scrollToWithYOffset } from '../../utils/scrollUtils';
import { scrollDownWithOffset } from '../../utils/scrollUtils';

class NftSelectNftsPage extends CommonDrawerElements {
private COUNTER = '[data-testid="assets-counter"]';
Expand Down Expand Up @@ -81,16 +81,29 @@ class NftSelectNftsPage extends CommonDrawerElements {
}

async selectNFTs(numberOfNFTs: number) {
for (let i = 0; i < numberOfNFTs; i++) {
if (i === 5) {
const nft = await this.nfts[i];
if (nft) {
await browser.pause(200);
await scrollToWithYOffset(nft, 30);
let selectedCount = 0;

while (selectedCount < numberOfNFTs) {
const nfts = await this.nfts;

for (const nft of nfts) {
const isSelected = await nft.$(this.NFT_ITEM_SELECTED_CHECKMARK).isExisting();
if (isSelected) {
continue;
}

await nft.waitForClickable();
await nft.click();
selectedCount++;

if (selectedCount >= numberOfNFTs) {
return;
}
}

if (selectedCount < numberOfNFTs) {
await scrollDownWithOffset(nfts);
}
await this.nfts[i].waitForClickable();
await this.nfts[i].click();
}
}

Expand Down
40 changes: 40 additions & 0 deletions packages/e2e-tests/src/elements/NFTs/nftsCommon.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/* eslint-disable no-undef */
import { scrollToWithYOffset } from '../../utils/scrollUtils';
import { browser } from '@wdio/globals';

class NftsCommon {
async getAllNftNamesWithScroll(elementSelector: string): Promise<string[]> {
const nftNames: string[] = [];
let nftElements = await $$(elementSelector);
let lastNft = nftElements[nftElements.length - 1];
let lastNftName = await lastNft.getText();
let hasMoreItems = true;

while (hasMoreItems) {
for (const nftElement of nftElements) {
const nftName = await nftElement.getText();
if (!nftNames.includes(nftName)) {
nftNames.push(nftName);
}
}

await scrollToWithYOffset(lastNft, 100);
await browser.pause(200);

nftElements = await $$(elementSelector);
const newLastNft = nftElements[nftElements.length - 1];
const newLastNftName = await newLastNft.getText();

if (newLastNftName === lastNftName) {
hasMoreItems = false;
} else {
lastNft = newLastNft;
lastNftName = newLastNftName;
}
}

return nftNames;
}
}

export default new NftsCommon();
11 changes: 4 additions & 7 deletions packages/e2e-tests/src/elements/NFTs/nftsPage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@ import { ChainablePromiseElement } from 'webdriverio';
import testContext from '../../utils/testContext';
import { browser } from '@wdio/globals';
import { scrollDownWithOffset } from '../../utils/scrollUtils';
import NftsCommon from './nftsCommon';

class NftsPage {
protected LIST_CONTAINER = '[data-testid="nft-list-container"]';
public LIST_CONTAINER = '[data-testid="nft-list-container"]';
private CREATE_FOLDER_BUTTON = '[data-testid="create-folder-button"]';
private NFT_SEARCH_INPUT = '[data-testid="nft-search-input"]';
public NFT_CONTAINER = '[data-testid="nft-item"]';
Expand Down Expand Up @@ -85,12 +86,8 @@ class NftsPage {
}

async saveNfts(): Promise<any> {
const names: string[] = [];

for (const nftContainer of await this.nftContainers) {
names.push(await nftContainer.getText());
}
testContext.save('ownedNfts', names);
const ownedNfts = await NftsCommon.getAllNftNamesWithScroll(`${this.LIST_CONTAINER} ${this.NFT_NAME}`);
testContext.save('ownedNfts', ownedNfts);
}

async waitForNft(nftName: string) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ class TokenSelectionPage extends CommonDrawerElements {
private TOKENS_BUTTON = '//input[@data-testid="asset-selector-button-tokens"]';
private TOKEN_ROW = '//div[@data-testid="coin-search-row"]';
private NFTS_BUTTON = '//input[@data-testid="asset-selector-button-nfts"]';
private ASSET_SELECTOR_CONTAINER = '[data-testid="asset-selector"]';
private NFT_CONTAINER = '[data-testid="nft-item"]';
public ASSET_SELECTOR_CONTAINER = '[data-testid="asset-selector"]';
public NFT_CONTAINER = '[data-testid="nft-item"]';
private NFT_ITEM_NAME = '[data-testid="nft-item-name"]';
private NFT_ITEM_OVERLAY = '[data-testid="nft-item-overlay"]';
private NFT_ITEM_SELECTED_CHECKMARK = '[data-testid="nft-item-selected"]';
Expand Down Expand Up @@ -135,8 +135,12 @@ class TokenSelectionPage extends CommonDrawerElements {
};

addAmountOfAssets = async (amount: number, assetType: string) => {
for (let i = 1; i <= amount; i++) {
assetType === 'Tokens' ? await this.tokenItem(i).container.click() : await this.nftNames[i].click();
if (assetType === 'Tokens') {
for (let i = 1; i <= amount; i++) {
await this.tokenItem(i).container.click();
}
} else {
await this.selectNFTs(amount);
}
};

Expand Down Expand Up @@ -220,6 +224,33 @@ class TokenSelectionPage extends CommonDrawerElements {
}
);
}

async selectNFTs(numberOfNFTs: number) {
let selectedCount = 0;

while (selectedCount < numberOfNFTs) {
const nfts = await this.nftContainers;

for (const nft of nfts) {
const isSelected = await nft.$(this.NFT_ITEM_SELECTED_CHECKMARK).isExisting();
if (isSelected) {
continue;
}

await nft.waitForClickable();
await nft.click();
selectedCount++;

if (selectedCount >= numberOfNFTs) {
return;
}
}

if (selectedCount < numberOfNFTs) {
await scrollDownWithOffset(nfts);
}
}
}
}

export default new TokenSelectionPage();
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import extensionUtils from '../utils/utils';
import { byron, shelley } from '../data/AddressData';
import { AssetInput } from '../elements/newTransaction/assetInput';
import { AddressInput } from '../elements/AddressInput';
import NftsCommon from '../elements/NFTs/nftsCommon';

export default new (class NewTransactionExtendedPageObject {
async setTwoAssetsForBundle(bundleIndex: number, assetValue1: number, assetValue2: number) {
Expand Down Expand Up @@ -77,7 +78,9 @@ export default new (class NewTransactionExtendedPageObject {
async addAllAvailableNftTypes(bundleIndex: number) {
await new AssetInput(bundleIndex).clickAddAssetButton();
await TokenSelectionPage.clickNFTsButton();
const nftNames = await TokenSelectionPage.getNftNames();
const nftNames = await NftsCommon.getAllNftNamesWithScroll(
`${TokenSelectionPage.ASSET_SELECTOR_CONTAINER} ${TokenSelectionPage.NFT_CONTAINER}`
);
let nftsCount = nftNames.length;
for (const nftName of nftNames) {
nftsCount--;
Expand Down
2 changes: 1 addition & 1 deletion packages/e2e-tests/src/steps/nftsCommonSteps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ Then(/^A gallery view showing my NFTs is displayed$/, async () => {
});

Then(/^Verify that "([^"]*)" (contains|doesn't contain) fallback image$/, async (nftName: string, contains: string) => {
await NftsPage.nftContainer.waitForDisplayed({ timeout: 15_000 });
await NftsPage.waitForNft(nftName);
await nftAssert.assertNftFallbackImage(nftName, contains === 'contains');
});

Expand Down

0 comments on commit b344450

Please sign in to comment.