Frontend: Update acceptance tests
This commit is contained in:
parent
15d8e2bb3b
commit
e80435a8ec
|
@ -17,6 +17,7 @@ const page = new Page();
|
|||
test('#1 Create/delete album', async t => {
|
||||
logger.clear();
|
||||
await t.click(Selector('.p-navigation-albums'));
|
||||
//TODO fails in container with request but outsides without it
|
||||
//const request = await logger.requests[0].response.body;
|
||||
const countAlbums = await Selector('div.p-album').count;
|
||||
logger.clear();
|
||||
|
@ -30,18 +31,15 @@ test('#1 Create/delete album', async t => {
|
|||
await page.selectFromUID(NewAlbum);
|
||||
logger.clear();
|
||||
await page.deleteSelectedAlbum();
|
||||
const request3 = await logger.requests[0].response.body;
|
||||
const request2 = await logger.requests[0].response.body;
|
||||
const countAlbumsAfterDelete = await Selector('div.p-album').count;
|
||||
await t
|
||||
.expect(countAlbumsAfterDelete).eql(countAlbumsAfterCreate - 1);
|
||||
});
|
||||
|
||||
test('#2 Update album', async t => {
|
||||
logger.clear();
|
||||
await t.click(Selector('.p-navigation-albums'));
|
||||
//const request = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.click(Selector('.p-navigation-albums'))
|
||||
.typeText(Selector('.p-albums-search input'), 'Holiday')
|
||||
.pressKey('enter');
|
||||
const AlbumUid = await Selector('div.p-album').nth(0).getAttribute('data-uid');
|
||||
|
@ -56,7 +54,7 @@ test('#2 Update album', async t => {
|
|||
logger.clear();
|
||||
await t
|
||||
.click(Selector('div.p-album').nth(0));
|
||||
const request2 = await logger.requests[0].response.body;
|
||||
const request1 = await logger.requests[0].response.body;
|
||||
const PhotoCount = await Selector('div.p-photo').count;
|
||||
await t
|
||||
.click(Selector('.p-expand-search'))
|
||||
|
@ -68,7 +66,7 @@ test('#2 Update album', async t => {
|
|||
logger.clear();
|
||||
await t
|
||||
.click('.action-reload');
|
||||
const request3 = await logger.requests[0].response.body;
|
||||
const request2 = await logger.requests[0].response.body;
|
||||
await t
|
||||
.click(Selector('.p-expand-search'))
|
||||
.expect(Selector('.input-description textarea').value).eql('All my animals')
|
||||
|
@ -85,17 +83,17 @@ test('#2 Update album', async t => {
|
|||
await t
|
||||
.click(Selector('.input-category'))
|
||||
.click(Selector('div[role="listitem"]').withText('Family'));
|
||||
const request5 = await logger.requests[0].response.body;
|
||||
const request3 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div.v-card__actions').nth(0).innerText).contains('Christmas')
|
||||
.click(Selector('.p-navigation-albums'))
|
||||
.click(Selector('.input-category'))
|
||||
.click(Selector('div[role="listitem"]').withText('All Categories'), {timeout: 55000});
|
||||
const request6 = await logger.requests[0].response.body;
|
||||
const request4 = await logger.requests[0].response.body;
|
||||
await t
|
||||
.click(Selector('div.p-album').withAttribute('data-uid', AlbumUid));
|
||||
const request4 = await logger.requests[0].response.body;
|
||||
const request5 = await logger.requests[0].response.body;
|
||||
const PhotoCountAfterAdd = await Selector('div.p-photo').count;
|
||||
await t
|
||||
.expect(PhotoCountAfterAdd).eql(PhotoCount + 2);
|
||||
|
@ -122,13 +120,9 @@ test('#2 Update album', async t => {
|
|||
|
||||
//TODO test download itself + clipboard count after download
|
||||
test('#3 Download album', async t => {
|
||||
logger.clear();
|
||||
await t.click(Selector('.p-navigation-albums'));
|
||||
//const request = await logger.requests[0].response.body;
|
||||
const FirstAlbum = await Selector('div.p-album').nth(0).getAttribute('data-uid');
|
||||
|
||||
await page.selectFromUID(FirstAlbum);
|
||||
|
||||
const clipboardCount = await Selector('span.t-clipboard-count');
|
||||
await t
|
||||
.expect(clipboardCount.textContent).eql("1")
|
||||
|
@ -150,6 +144,6 @@ test('#5 View calendar', async t => {
|
|||
logger.clear();
|
||||
await t
|
||||
.click(Selector('.p-navigation-calendar'))
|
||||
.expect(Selector('a').withText('May 2020').visible).ok()
|
||||
.expect(Selector('a').withText('May 2019').visible).ok()
|
||||
.expect(Selector('a').withText('October 2019').visible).ok();
|
||||
});
|
|
@ -1,5 +1,54 @@
|
|||
//search
|
||||
import { Selector } from 'testcafe';
|
||||
import testcafeconfig from './testcafeconfig';
|
||||
import Page from './page-model';
|
||||
|
||||
//filters + switch between pages
|
||||
fixture`Test components`
|
||||
.page`${testcafeconfig.url}`;
|
||||
|
||||
//switch views
|
||||
const page = new Page();
|
||||
|
||||
/*test('#1 Test filter options', async t => {
|
||||
await t
|
||||
.click('button.p-expand-search')
|
||||
.click(Selector('div.p-countries-select'))
|
||||
.expect(Selector('div[role="listitem"]]').nth(0).innerText).notContains('object')
|
||||
.expect(Selector('div[role="listitem"]]').nth(0).innerText).notContains('Botswana')
|
||||
.expect(Selector('div[role="listitem"]]').nth(0).innerText).notContains('Animal');
|
||||
});*/
|
||||
|
||||
test('#2 Fullscreen mode', async t => {
|
||||
await t
|
||||
.click(Selector('div.v-image__image').nth(0))
|
||||
.expect(Selector('#p-photo-viewer').visible).ok()
|
||||
.expect(Selector('img.pswp__img').visible).ok();
|
||||
});
|
||||
|
||||
test('#3 Mosaic view', async t => {
|
||||
await t
|
||||
.click('button.p-expand-search');
|
||||
await page.setFilter('view', 'Mosaic');
|
||||
await t
|
||||
.expect(Selector('div.v-image__image').visible).ok()
|
||||
.expect(Selector('div.p-photo-mosaic').visible).ok()
|
||||
.expect(Selector('div.p-photo div.caption').exists).notOk()
|
||||
.expect(Selector('#p-photo-viewer').visible).notOk();
|
||||
});
|
||||
|
||||
test('#4 List view', async t => {
|
||||
await t
|
||||
.click('button.p-expand-search');
|
||||
await page.setFilter('view', 'List');
|
||||
await t
|
||||
.expect(Selector('table.v-datatable').visible).ok()
|
||||
.expect(Selector('div.p-photo-list').visible).ok();
|
||||
});
|
||||
|
||||
test('#5 card view', async t => {
|
||||
await t
|
||||
.click('button.p-expand-search');
|
||||
await page.setFilter('view', 'Cards');
|
||||
await t
|
||||
.expect(Selector('div.v-image__image').visible).ok()
|
||||
.expect(Selector('div.p-photo div.caption').visible).ok()
|
||||
.expect(Selector('#p-photo-viewer').visible).notOk();
|
||||
});
|
|
@ -1,21 +1,13 @@
|
|||
import { Selector } from 'testcafe';
|
||||
import testcafeconfig from './testcafeconfig';
|
||||
import Page from "./page-model";
|
||||
import { RequestLogger } from 'testcafe';
|
||||
|
||||
const logger = RequestLogger( /http:\/\/localhost:2342\/api\/v1\/*/ , {
|
||||
logResponseHeaders: true,
|
||||
logResponseBody: true
|
||||
});
|
||||
|
||||
fixture `Test files`
|
||||
.page`${testcafeconfig.url}`
|
||||
.requestHooks(logger);
|
||||
.page`${testcafeconfig.url}`;
|
||||
|
||||
const page = new Page();
|
||||
|
||||
test('#1 Add files to album', async t => {
|
||||
logger.clear();
|
||||
await page.openNav();
|
||||
await t.click(Selector('.p-navigation-albums'));
|
||||
await t
|
||||
|
@ -23,7 +15,6 @@ test('#1 Add files to album', async t => {
|
|||
.pressKey('enter');
|
||||
await t
|
||||
.expect(Selector('h3').innerText).eql('No albums matched your search');
|
||||
|
||||
await t
|
||||
.click(Selector('div.p-navigation-library + div'))
|
||||
.click(Selector('.p-navigation-files'));
|
||||
|
@ -76,13 +67,10 @@ test('#2 Download files', async t => {
|
|||
.click(Selector('div.p-navigation-library + div'))
|
||||
.click(Selector('.p-navigation-files'));
|
||||
const FirstFile = await Selector('div.p-file').nth(0).getAttribute('data-uid');
|
||||
|
||||
await page.selectFromUID(FirstFile);
|
||||
|
||||
const clipboardCount = await Selector('span.t-clipboard-count');
|
||||
await t
|
||||
.expect(clipboardCount.textContent).eql("1")
|
||||
.click(Selector('button.p-file-clipboard-menu'))
|
||||
.expect(Selector('button.p-file-clipboard-download').visible).ok();
|
||||
});
|
||||
|
||||
});
|
|
@ -1,24 +0,0 @@
|
|||
import { Selector } from 'testcafe';
|
||||
import testcafeconfig from './testcafeconfig';
|
||||
import Page from './page-model';
|
||||
import { RequestLogger } from 'testcafe';
|
||||
|
||||
const logger = RequestLogger( /http:\/\/localhost:2342\/api\/v1\/photos*/ , {
|
||||
logResponseHeaders: true,
|
||||
logResponseBody: true
|
||||
});
|
||||
|
||||
fixture`Test filter options`
|
||||
.page`${testcafeconfig.url}`
|
||||
.requestHooks(logger);
|
||||
|
||||
const page = new Page();
|
||||
|
||||
/*test('Test filter options', async t => {
|
||||
await t
|
||||
.click('button.p-expand-search')
|
||||
.click(Selector('div.p-countries-select'))
|
||||
.expect(Selector('div[role="listitem"]]').nth(0).innerText).notContains('object')
|
||||
.expect(Selector('div[role="listitem"]]').nth(0).innerText).notContains('Botswana')
|
||||
.expect(Selector('div[role="listitem"]]').nth(0).innerText).notContains('Animal');
|
||||
});*/
|
|
@ -15,11 +15,8 @@ fixture `Test labels`
|
|||
const page = new Page();
|
||||
|
||||
test('#1 Remove/Activate Add/Delete Label', async t => {
|
||||
logger.clear();
|
||||
await t.click(Selector('.p-navigation-labels'));
|
||||
//const request = await logger.requests[0].response.body;
|
||||
const countImportantLabels = await Selector('div.p-label').count;
|
||||
logger.clear();
|
||||
await t
|
||||
.click(Selector('button.action-show-all'));
|
||||
const countAllLabels = await Selector('div.p-label').count;
|
||||
|
@ -83,9 +80,7 @@ test('#1 Remove/Activate Add/Delete Label', async t => {
|
|||
|
||||
//TODO check title of second image after index
|
||||
test('#2 Rename Label', async t => {
|
||||
logger.clear();
|
||||
await t.click(Selector('.p-navigation-labels'));
|
||||
//const request = await logger.requests[0].response.body;
|
||||
await page.search('zebra');
|
||||
const LabelZebra = await Selector('div.p-label').nth(0).getAttribute('data-uid');
|
||||
await t
|
||||
|
@ -130,27 +125,20 @@ test('#2 Rename Label', async t => {
|
|||
});
|
||||
|
||||
test('#3 Add label to album', async t => {
|
||||
logger.clear();
|
||||
await t.click(Selector('.p-navigation-albums'));
|
||||
//const request = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.click(Selector('.p-navigation-albums'))
|
||||
.typeText(Selector('.p-albums-search input'), 'Christmas')
|
||||
.pressKey('enter');
|
||||
const AlbumUid = await Selector('div.p-album').nth(0).getAttribute('data-uid');
|
||||
logger.clear();
|
||||
await t
|
||||
.click(Selector('div.p-album').withAttribute('data-uid', AlbumUid));
|
||||
//const request2 = await logger.requests[0].response.body;
|
||||
const PhotoCount = await Selector('div.p-photo').count;
|
||||
await t
|
||||
.click(Selector('.p-navigation-labels'));
|
||||
await page.search('landscape');
|
||||
const LabelLandscape = await Selector('div.p-label').nth(1).getAttribute('data-uid');
|
||||
logger.clear();
|
||||
await t
|
||||
.click(Selector('div.p-label').withAttribute('data-uid', LabelLandscape));
|
||||
//const request3 = await logger.requests[0].response.body;
|
||||
const FirstPhotoLandscape = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
|
||||
const SecondPhotoLandscape = await Selector('div.p-photo').nth(1).getAttribute('data-uid');
|
||||
await t
|
||||
|
@ -167,7 +155,6 @@ test('#3 Add label to album', async t => {
|
|||
.click(Selector('button.p-photo-dialog-confirm'))
|
||||
.click(Selector('.p-navigation-albums'))
|
||||
.click(Selector('div.p-album').withAttribute('data-uid', AlbumUid));
|
||||
const request4 = await logger.requests[0].response.body;
|
||||
const PhotoCountAfterAdd = await Selector('div.p-photo').count;
|
||||
await t
|
||||
.expect(PhotoCountAfterAdd).eql(PhotoCount + 2);
|
||||
|
@ -177,7 +164,6 @@ test('#3 Add label to album', async t => {
|
|||
await t
|
||||
.click('.action-reload');
|
||||
const PhotoCountAfterDelete = await Selector('div.p-photo').count;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(PhotoCountAfterDelete).eql(PhotoCountAfterAdd - 2);
|
||||
});
|
||||
|
|
|
@ -1,19 +1,13 @@
|
|||
import { Selector } from 'testcafe';
|
||||
import testcafeconfig from '../testcafeconfig';
|
||||
import Page from "../page-model";
|
||||
import { RequestLogger } from 'testcafe';
|
||||
|
||||
const logger = RequestLogger( /http:\/\/localhost:2342\/api\/v1\/*/ , {
|
||||
logResponseHeaders: true,
|
||||
logResponseBody: true
|
||||
});
|
||||
|
||||
fixture `Test import`
|
||||
.page`${testcafeconfig.url}`
|
||||
.requestHooks(logger);
|
||||
fixture `Import file from folder`
|
||||
.page`${testcafeconfig.url}`;
|
||||
|
||||
const page = new Page();
|
||||
//TODO use upload + delete
|
||||
//TODO check metadata like camera, keywords, location etc are added
|
||||
test('#1 Import files from folder using copy', async t => {
|
||||
await t
|
||||
.click(Selector('.p-navigation-labels'));
|
||||
|
@ -23,7 +17,6 @@ test('#1 Import files from folder using copy', async t => {
|
|||
await t
|
||||
.click(Selector('.p-navigation-library'))
|
||||
.click(Selector('#tab-import'))
|
||||
.expect(Selector('span').withText('Press button to start copying...').visible, {timeout: 5000}).ok()
|
||||
.click(Selector('.input-import-folder input'))
|
||||
.click(Selector('div.v-list__tile__title').withText('/Bäckerei'))
|
||||
.click(Selector('.action-import'))
|
||||
|
|
|
@ -1,18 +1,12 @@
|
|||
import { Selector } from 'testcafe';
|
||||
import testcafeconfig from '../testcafeconfig';
|
||||
import Page from "../page-model";
|
||||
import { RequestLogger } from 'testcafe';
|
||||
|
||||
const logger = RequestLogger( /http:\/\/localhost:2342\/api\/v1\/*/ , {
|
||||
logResponseHeaders: true,
|
||||
logResponseBody: true
|
||||
});
|
||||
|
||||
fixture `Test index`
|
||||
.page`${testcafeconfig.url}`
|
||||
.requestHooks(logger);
|
||||
.page`${testcafeconfig.url}`;
|
||||
|
||||
const page = new Page();
|
||||
//TODO check metadata like camera, keywords, location etc are added
|
||||
test('#1 Index files from folder', async t => {
|
||||
await t
|
||||
.click(Selector('.p-navigation-labels'));
|
||||
|
|
|
@ -34,10 +34,10 @@ export default class Page {
|
|||
|
||||
if (option) {
|
||||
await t
|
||||
.click(Selector('div.menuable__content__active div.v-select-list a').withText(option), {timeout: 15000})
|
||||
.click(Selector('div[role="listitem"]').withText(option), {timeout: 15000})
|
||||
} else {
|
||||
await t
|
||||
.click(Selector('div.menuable__content__active div.v-select-list a').nth(1), {timeout: 15000})
|
||||
.click(Selector('div[role="listitem"]').nth(1), {timeout: 15000})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -18,19 +18,15 @@ fixture `Test photos`
|
|||
|
||||
const page = new Page();
|
||||
|
||||
//TODO?search + filters --> oder search js
|
||||
//TODO raw file icon? live photo icon? - search for type look for icon --> do it in search test
|
||||
//TODO ?views including fullscreen (next,previous)--> oder view js
|
||||
//TODO Share + clipboard
|
||||
//TODO Share photo
|
||||
//TODO Check count in navi gets updated --> gt/lt or matches count of images
|
||||
//TODO videos - play video
|
||||
|
||||
|
||||
test('#1 Scroll to top', async t => {
|
||||
await t
|
||||
.click(Selector('.p-navigation-photos'))
|
||||
.click(Selector('.p-expand-search'));
|
||||
logger.clear();
|
||||
await page.setFilter('view', 'Cards');
|
||||
await t
|
||||
.expect(Selector('button.p-photo-scroll-top').exists).notOk()
|
||||
|
@ -47,7 +43,6 @@ test('#1 Scroll to top', async t => {
|
|||
test('#2 Download single photo/video and download zip using clipboard and fullscreen mode', async t => {
|
||||
const FirstPhoto = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
|
||||
const SecondPhoto = await Selector('div.p-photo').nth(1).getAttribute('data-uid');
|
||||
|
||||
await t
|
||||
.click(Selector('div').withAttribute('data-uid', SecondPhoto));
|
||||
await t
|
||||
|
@ -55,13 +50,10 @@ test('#2 Download single photo/video and download zip using clipboard and fullsc
|
|||
.hover(Selector('.action-download'))
|
||||
.expect(Selector('.action-download').visible).ok()
|
||||
.click(Selector('.action-close'));
|
||||
|
||||
await page.selectFromUID(FirstPhoto);
|
||||
|
||||
await t
|
||||
.click(Selector('.p-navigation-video'));
|
||||
const FirstVideo = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
|
||||
|
||||
await page.selectFromUID(FirstVideo);
|
||||
const clipboardCount = await Selector('span.t-clipboard-count');
|
||||
await t
|
||||
|
@ -85,13 +77,13 @@ test('#3 Approve photo using approve and by adding location', async t => {
|
|||
logger.clear();
|
||||
await t
|
||||
.click(Selector('.p-navigation-photos'));
|
||||
const request11 = await logger.requests[0].response.body;
|
||||
const request2 = await logger.requests[0].response.body;
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
|
||||
.expect(Selector('div').withAttribute('data-uid', SecondPhoto).exists, {timeout: 5000}).notOk();
|
||||
logger.clear();
|
||||
await t.click(Selector('.p-navigation-review'));
|
||||
const request111 = await logger.requests[0].response.body;
|
||||
const request3 = await logger.requests[0].response.body;
|
||||
|
||||
await page.selectFromUID(FirstPhoto);
|
||||
await page.editSelected();
|
||||
|
@ -100,17 +92,17 @@ test('#3 Approve photo using approve and by adding location', async t => {
|
|||
.click(Selector('button.p-photo-dialog-close'));
|
||||
await t
|
||||
.click(Selector('button.action-reload'));
|
||||
const request12 = await logger.requests[0].response.body;
|
||||
const request4 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).visible, {timeout: 5000}).ok();
|
||||
await page.editSelected();
|
||||
const request2 = await logger.requests[0].response.body;
|
||||
const request5 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.click(Selector('button.action-approve'))
|
||||
.click(Selector('button.action-ok'));
|
||||
const request3 = await logger.requests[0].response.body;
|
||||
const request6 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
|
||||
await page.unselectFromUID(FirstPhoto);
|
||||
|
@ -121,20 +113,20 @@ test('#3 Approve photo using approve and by adding location', async t => {
|
|||
.typeText(Selector('input[aria-label="Latitude"]'), '9.999')
|
||||
.typeText(Selector('input[aria-label="Longitude"]'), '9.999')
|
||||
.click(Selector('button.action-ok'));
|
||||
const request31 = await logger.requests[0].response.body;
|
||||
const request7 = await logger.requests[0].response.body;
|
||||
|
||||
await t
|
||||
.click(Selector('button.action-reload'));
|
||||
const request4 = await logger.requests[0].response.body;
|
||||
const request8 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
|
||||
.expect(Selector('div').withAttribute('data-uid', SecondPhoto).exists, {timeout: 5000}).notOk()
|
||||
.click(Selector('.p-navigation-photos'));
|
||||
const request5 = await logger.requests[0].response.body;
|
||||
const request9 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await page.search('type:image');
|
||||
const request6 = await logger.requests[0].response.body;
|
||||
const request10 = await logger.requests[0].response.body;
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).visible).ok()
|
||||
.expect(Selector('div').withAttribute('data-uid', SecondPhoto).visible).ok();
|
||||
|
@ -146,7 +138,7 @@ test('#4 Like/dislike photo/video', async t => {
|
|||
const FirstPhoto = await Selector('.t-off').nth(0).getAttribute('data-uid');
|
||||
|
||||
await t.click(Selector('.p-navigation-video'));
|
||||
const request0 = await logger.requests[0].response.body;
|
||||
const request1 = await logger.requests[0].response.body;
|
||||
const FirstVideo = await Selector('.t-off').nth(0).getAttribute('data-uid');
|
||||
|
||||
await t.click(Selector('.p-navigation-favorites'));
|
||||
|
@ -157,7 +149,7 @@ test('#4 Like/dislike photo/video', async t => {
|
|||
|
||||
logger.clear();
|
||||
await page.likePhoto(FirstPhoto);
|
||||
const request = await logger.requests[0].response.body;
|
||||
const request2 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.click(Selector('.action-reload'))
|
||||
|
@ -166,7 +158,7 @@ test('#4 Like/dislike photo/video', async t => {
|
|||
|
||||
await t.click(Selector('.p-navigation-video'));
|
||||
await page.likePhoto(FirstVideo);
|
||||
const request1 = await logger.requests[0].response.body;
|
||||
const request3 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.click(Selector('.action-reload'))
|
||||
|
@ -175,19 +167,19 @@ test('#4 Like/dislike photo/video', async t => {
|
|||
|
||||
await t
|
||||
.click(Selector('.p-navigation-favorites'));
|
||||
const request2 = await logger.requests[0].response.body;
|
||||
const request4 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).ok()
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstVideo).exists, {timeout: 5000}).ok()
|
||||
.expect(Selector('div.v-image__image').visible).ok();
|
||||
await page.dislikePhoto(FirstVideo);
|
||||
const request21 = await logger.requests[0].response.body;
|
||||
const request5 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await page.dislikePhoto(FirstPhoto);
|
||||
logger.clear();
|
||||
await t.click(Selector('.action-reload'));
|
||||
const request3 = await logger.requests[0].response.body;
|
||||
const request6 = await logger.requests[0].response.body;
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstVideo).exists, {timeout: 5000}).notOk();
|
||||
|
@ -195,26 +187,24 @@ test('#4 Like/dislike photo/video', async t => {
|
|||
|
||||
//TODO Check private photos do not appear in labels, places, albums, moments...
|
||||
test('#5 Private/unprivate photo/video using clipboard and list', async t => {
|
||||
|
||||
logger.clear();
|
||||
await t
|
||||
.click(Selector('.p-navigation-photos'))
|
||||
.click(Selector('.p-expand-search'));
|
||||
logger.clear();
|
||||
await page.setFilter('view', 'Mosaic');
|
||||
const request0 = await logger.requests[0].response.body;
|
||||
const request1 = await logger.requests[0].response.body;
|
||||
const FirstPhoto = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
|
||||
const SecondPhoto = await Selector('div.p-photo').nth(1).getAttribute('data-uid');
|
||||
const ThirdPhoto = await Selector('div.p-photo').nth(2).getAttribute('data-uid');
|
||||
|
||||
await t
|
||||
.click(Selector('.p-navigation-video'));
|
||||
const request = await logger.requests[0].response.body;
|
||||
const request2 = await logger.requests[0].response.body;
|
||||
const FirstVideo = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
|
||||
const SecondVideo = await Selector('div.p-photo').nth(1).getAttribute('data-uid');
|
||||
|
||||
await t.click(Selector('.p-navigation-private'));
|
||||
const request1 = await logger.requests[0].response.body;
|
||||
const request3 = await logger.requests[0].response.body;
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
|
||||
.expect(Selector('div').withAttribute('data-uid', SecondPhoto).exists, {timeout: 5000}).notOk()
|
||||
|
@ -222,8 +212,6 @@ test('#5 Private/unprivate photo/video using clipboard and list', async t => {
|
|||
.expect(Selector('div').withAttribute('data-uid', FirstVideo).exists, {timeout: 5000}).notOk()
|
||||
.expect(Selector('div').withAttribute('data-uid', SecondVideo).exists, {timeout: 5000}).notOk()
|
||||
.click(Selector('.p-navigation-photos'));
|
||||
|
||||
logger.clear();
|
||||
await page.selectFromUID(FirstPhoto);
|
||||
await page.selectFromUID(SecondPhoto);
|
||||
const clipboardCount = await Selector('span.t-clipboard-count');
|
||||
|
@ -234,14 +222,13 @@ test('#5 Private/unprivate photo/video using clipboard and list', async t => {
|
|||
.expect(Selector('button.p-photo-clipboard-menu').exists, {timeout: 5000}).notOk();
|
||||
logger.clear();
|
||||
await page.setFilter('view', 'List');
|
||||
const request12 = await logger.requests[0].response.body;
|
||||
const request4 = await logger.requests[0].response.body;
|
||||
await t
|
||||
.click(Selector('button.p-photo-private').withAttribute('data-uid', ThirdPhoto));
|
||||
logger.clear();
|
||||
|
||||
await t
|
||||
.click(Selector('.action-reload'));
|
||||
const request2 = await logger.requests[0].response.body;
|
||||
const request5 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('td').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
|
||||
|
@ -253,7 +240,7 @@ test('#5 Private/unprivate photo/video using clipboard and list', async t => {
|
|||
await t
|
||||
.click(Selector('button.p-photo-private').withAttribute('data-uid', SecondVideo));
|
||||
await page.setFilter('view', 'Mosaic');
|
||||
const request13 = await logger.requests[0].response.body;
|
||||
const request6 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
|
||||
await page.selectFromUID(FirstVideo);
|
||||
|
@ -266,14 +253,14 @@ test('#5 Private/unprivate photo/video using clipboard and list', async t => {
|
|||
logger.clear();
|
||||
await t
|
||||
.click(Selector('.action-reload'));
|
||||
const request3 = await logger.requests[0].response.body;
|
||||
const request7 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstVideo).exists, {timeout: 5000}).notOk()
|
||||
.expect(Selector('div').withAttribute('data-uid', SecondVideo).exists, {timeout: 5000}).notOk()
|
||||
.click(Selector('.p-navigation-private'));
|
||||
|
||||
const request4 = await logger.requests[0].response.body;
|
||||
const request8 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).ok()
|
||||
|
@ -293,7 +280,7 @@ test('#5 Private/unprivate photo/video using clipboard and list', async t => {
|
|||
await page.setFilter('view', 'Mosaic');
|
||||
logger.clear();
|
||||
await t.click(Selector('.action-reload'));
|
||||
const request5 = await logger.requests[0].response.body;
|
||||
const request9 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
|
||||
|
@ -303,7 +290,7 @@ test('#5 Private/unprivate photo/video using clipboard and list', async t => {
|
|||
.expect(Selector('div').withAttribute('data-uid', SecondVideo).exists, {timeout: 5000}).notOk()
|
||||
.click(Selector('.p-navigation-photos'));
|
||||
|
||||
const request6 = await logger.requests[0].response.body;
|
||||
const request10 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).ok()
|
||||
|
@ -311,7 +298,7 @@ test('#5 Private/unprivate photo/video using clipboard and list', async t => {
|
|||
.expect(Selector('div').withAttribute('data-uid', ThirdPhoto).exists, {timeout: 5000}).ok()
|
||||
.click(Selector('.p-navigation-video'));
|
||||
|
||||
const request7 = await logger.requests[0].response.body;
|
||||
const request11 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstVideo).exists, {timeout: 5000}).ok()
|
||||
|
@ -319,40 +306,38 @@ test('#5 Private/unprivate photo/video using clipboard and list', async t => {
|
|||
});
|
||||
|
||||
test('#6 Archive/restore video, photos, private photos and review photos using clipboard', async t => {
|
||||
|
||||
logger.clear();
|
||||
await page.openNav();
|
||||
await t
|
||||
.click(Selector('.p-navigation-photos'))
|
||||
.click(Selector('.p-expand-search'));
|
||||
logger.clear();
|
||||
await page.setFilter('view', 'Mosaic');
|
||||
const request0 = await logger.requests[0].response.body;
|
||||
const request1 = await logger.requests[0].response.body;
|
||||
const FirstPhoto = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
|
||||
const SecondPhoto = await Selector('div.p-photo').nth(1).getAttribute('data-uid');
|
||||
|
||||
await t
|
||||
.click(Selector('.p-navigation-video'));
|
||||
const request = await logger.requests[0].response.body;
|
||||
const request2 = await logger.requests[0].response.body;
|
||||
const FirstVideo = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
|
||||
logger.clear();
|
||||
|
||||
await t
|
||||
.click(Selector('.p-navigation-private'));
|
||||
const request1 = await logger.requests[0].response.body;
|
||||
const request3 = await logger.requests[0].response.body;
|
||||
const FirstPrivatePhoto = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
|
||||
logger.clear();
|
||||
|
||||
await t
|
||||
.click(Selector('div.p-navigation-photos + div'))
|
||||
.click(Selector('.p-navigation-review'));
|
||||
const request2 = await logger.requests[0].response.body;
|
||||
const request4 = await logger.requests[0].response.body;
|
||||
const FirstReviewPhoto = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
|
||||
logger.clear();
|
||||
|
||||
await t
|
||||
.click(Selector('.p-navigation-archive'));
|
||||
const request3 = await logger.requests[0].response.body;
|
||||
const request5 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
|
||||
|
@ -363,7 +348,7 @@ test('#6 Archive/restore video, photos, private photos and review photos using c
|
|||
|
||||
await t
|
||||
.click(Selector('.p-navigation-video'));
|
||||
const request4 = await logger.requests[0].response.body;
|
||||
const request6 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await page.selectFromUID(FirstVideo);
|
||||
const clipboardCountVideo = await Selector('span.t-clipboard-count');
|
||||
|
@ -374,13 +359,13 @@ test('#6 Archive/restore video, photos, private photos and review photos using c
|
|||
await t
|
||||
.expect(Selector('button.p-photo-clipboard-menu').exists, {timeout: 5000}).notOk()
|
||||
.click(Selector('.action-reload'));
|
||||
const request5 = await logger.requests[0].response.body;
|
||||
const request7 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstVideo).exists, {timeout: 5000}).notOk()
|
||||
.click(Selector('.p-navigation-photos'));
|
||||
|
||||
const request6 = await logger.requests[0].response.body;
|
||||
const request8 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await page.selectFromUID(FirstPhoto);
|
||||
await page.selectFromUID(SecondPhoto);
|
||||
|
@ -392,14 +377,14 @@ test('#6 Archive/restore video, photos, private photos and review photos using c
|
|||
await t
|
||||
.expect(Selector('button.p-photo-clipboard-menu').exists, {timeout: 5000}).notOk()
|
||||
.click(Selector('.action-reload'));
|
||||
const request7 = await logger.requests[0].response.body;
|
||||
const request9 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
|
||||
.expect(Selector('div').withAttribute('data-uid', SecondPhoto).exists, {timeout: 5000}).notOk()
|
||||
.click(Selector('.p-navigation-private'));
|
||||
|
||||
const request8 = await logger.requests[0].response.body;
|
||||
const request10 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await page.selectFromUID(FirstPrivatePhoto);
|
||||
const clipboardCountPrivate = await Selector('span.t-clipboard-count');
|
||||
|
@ -408,7 +393,7 @@ test('#6 Archive/restore video, photos, private photos and review photos using c
|
|||
await t
|
||||
.click(Selector('.p-navigation-review'));
|
||||
|
||||
const request10 = await logger.requests[0].response.body;
|
||||
const request11 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await page.selectFromUID(FirstReviewPhoto);
|
||||
const clipboardCountReview = await Selector('span.t-clipboard-count');
|
||||
|
@ -419,12 +404,12 @@ test('#6 Archive/restore video, photos, private photos and review photos using c
|
|||
await t
|
||||
.expect(Selector('button.p-photo-clipboard-menu').exists, {timeout: 5000}).notOk()
|
||||
.click(Selector('.action-reload'));
|
||||
const request11 = await logger.requests[0].response.body;
|
||||
const request12 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstReviewPhoto).exists, {timeout: 5000}).notOk()
|
||||
.click(Selector('.p-navigation-archive'));
|
||||
const request12 = await logger.requests[0].response.body;
|
||||
const request13 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
|
||||
await t
|
||||
|
@ -446,7 +431,7 @@ test('#6 Archive/restore video, photos, private photos and review photos using c
|
|||
await t
|
||||
.expect(Selector('button.p-photo-clipboard-menu').exists, {timeout: 5000}).notOk()
|
||||
.click(Selector('.action-reload'));
|
||||
const request13 = await logger.requests[0].response.body;
|
||||
const request14 = await logger.requests[0].response.body;
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
|
||||
.expect(Selector('div').withAttribute('data-uid', SecondPhoto).exists, {timeout: 5000}).notOk()
|
||||
|
@ -457,14 +442,14 @@ test('#6 Archive/restore video, photos, private photos and review photos using c
|
|||
|
||||
await t
|
||||
.click(Selector('.p-navigation-video'));
|
||||
const request14 = await logger.requests[0].response.body;
|
||||
const request15 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstVideo).exists, {timeout: 5000}).ok();
|
||||
|
||||
await t
|
||||
.click(Selector('.p-navigation-photos'));
|
||||
const request15 = await logger.requests[0].response.body;
|
||||
const request16 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).ok()
|
||||
|
@ -472,31 +457,29 @@ test('#6 Archive/restore video, photos, private photos and review photos using c
|
|||
|
||||
await t
|
||||
.click(Selector('.p-navigation-private'));
|
||||
const request16 = await logger.requests[0].response.body;
|
||||
const request17 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstPrivatePhoto).exists, {timeout: 5000}).ok();
|
||||
|
||||
await t
|
||||
.click(Selector('.p-navigation-review'));
|
||||
const request17 = await logger.requests[0].response.body;
|
||||
const request18 = await logger.requests[0].response.body;
|
||||
logger.clear();
|
||||
await t
|
||||
.expect(Selector('div').withAttribute('data-uid', FirstReviewPhoto).exists, {timeout: 5000}).ok();
|
||||
});
|
||||
|
||||
//TODO edited values stay after reindex!!
|
||||
// test timepicker, datepicker, camera, lens
|
||||
//revert country, timezone
|
||||
//access video from list + edit
|
||||
// check country overwritten by lat/lng
|
||||
//TODO test timepicker, datepicker, camera, lens
|
||||
//TODO revert country, timezone
|
||||
//TODO access video from list + edit
|
||||
//TODO check country overwritten by lat/lng
|
||||
test('#7 Edit photo/video', async t => {
|
||||
logger.clear();
|
||||
await page.openNav();
|
||||
await t
|
||||
.click(Selector('.p-navigation-photos'))
|
||||
.click(Selector('.p-expand-search'));
|
||||
logger.clear();
|
||||
await page.setFilter('view', 'Cards');
|
||||
const FirstPhoto = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
|
||||
await t
|
||||
|
@ -506,7 +489,7 @@ test('#7 Edit photo/video', async t => {
|
|||
logger.clear();
|
||||
await t
|
||||
.click(Selector('button.action-next'));
|
||||
const request01 = await logger.requests[0].response.body;
|
||||
const request1 = await logger.requests[0].response.body;
|
||||
await t
|
||||
.expect(Selector('button.action-previous').getAttribute('disabled')).notEql('disabled')
|
||||
.click(Selector('button.action-previous'))
|
||||
|
@ -571,14 +554,14 @@ test('#7 Edit photo/video', async t => {
|
|||
.typeText(Selector('.input-keywords textarea'), ', cat, love')
|
||||
.typeText(Selector('.input-notes textarea'), 'Some notes', { replace: true })
|
||||
.click(Selector('button.action-approve'));
|
||||
const request = await logger.requests[0].response.body;
|
||||
const request2 = await logger.requests[0].response.body;
|
||||
await t
|
||||
.expect(Selector('.input-latitude input').visible, {timeout: 5000}).ok()
|
||||
.click(Selector('button.action-ok'));
|
||||
logger.clear();
|
||||
await t
|
||||
.click(Selector('button.action-reload'));
|
||||
const request1 = await logger.requests[0].response.body;
|
||||
const request3 = await logger.requests[0].response.body;
|
||||
await t
|
||||
.expect(Selector('button.action-title-edit').withAttribute('data-uid', FirstPhoto).innerText).eql('New Photo Title')
|
||||
|
||||
|
@ -605,7 +588,6 @@ test('#7 Edit photo/video', async t => {
|
|||
.expect(Selector('.input-description textarea').value).eql('Description of a nice image :)')
|
||||
.expect(Selector('.input-notes textarea').value).contains('Some notes')
|
||||
.expect(Selector('.input-keywords textarea').value).contains('cat')
|
||||
//revert changes
|
||||
if (FirstPhotoTitle.empty || FirstPhotoTitle === "")
|
||||
{ await t
|
||||
.click(Selector('.input-title input'))
|
||||
|
@ -739,12 +721,11 @@ test('#7 Edit photo/video', async t => {
|
|||
logger.clear();
|
||||
await t
|
||||
.click(Selector('.action-reload'));
|
||||
const request2 = await logger.requests[0].response.body;
|
||||
const request4 = await logger.requests[0].response.body;
|
||||
await t.expect(Selector('button.action-title-edit').withAttribute('data-uid', FirstPhoto).innerText).eql(FirstPhotoTitle);
|
||||
});
|
||||
|
||||
test('#8 Change primary file', async t => {
|
||||
logger.clear();
|
||||
await page.openNav();
|
||||
await t
|
||||
.click(Selector('.p-navigation-photos'))
|
||||
|
@ -768,7 +749,6 @@ test('#8 Change primary file', async t => {
|
|||
});
|
||||
|
||||
test('#9 Navigate from card view to place', async t => {
|
||||
logger.clear();
|
||||
await t.click(Selector('.p-expand-search'));
|
||||
await page.setFilter('view', 'Cards');
|
||||
await t
|
||||
|
|
|
@ -7,7 +7,7 @@ const getLocation = ClientFunction(() => document.location.href);
|
|||
fixture`Test places page`
|
||||
.page`${testcafeconfig.url}`
|
||||
|
||||
test('Test places', async t => {
|
||||
test('#1 Test places', async t => {
|
||||
await t
|
||||
.click(Selector('.p-navigation-places'))
|
||||
.expect(Selector('#map').exists, {timeout: 15000}).ok()
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
//TODO test accounts!
|
|
@ -1,21 +1,14 @@
|
|||
import { Selector } from 'testcafe';
|
||||
import testcafeconfig from '../testcafeconfig';
|
||||
import Page from "../page-model";
|
||||
import { RequestLogger } from 'testcafe';
|
||||
import { ClientFunction } from 'testcafe';
|
||||
|
||||
const logger = RequestLogger( /http:\/\/localhost:2342\/api\/v1\/*/ , {
|
||||
logResponseHeaders: true,
|
||||
logResponseBody: true
|
||||
});
|
||||
|
||||
fixture `Test settings`
|
||||
.page`${testcafeconfig.url}`
|
||||
.requestHooks(logger);
|
||||
.page`${testcafeconfig.url}`;
|
||||
|
||||
const page = new Page();
|
||||
|
||||
//TODO test convert to jpeg, group files, places style
|
||||
//TODO check download also disabled for albums/files/review/private
|
||||
|
||||
test('#1 Settings', async t => {
|
||||
await page.openNav();
|
||||
|
@ -43,7 +36,6 @@ test('#1 Settings', async t => {
|
|||
.expect(Selector('button.p-photo-label-add').visible).ok()
|
||||
.click(Selector('#tab-edit-details'))
|
||||
.click(Selector('button.action-close'))
|
||||
|
||||
.click(Selector('.p-navigation-library'))
|
||||
.expect(Selector('#tab-import a').visible).ok()
|
||||
.expect(Selector('#tab-logs a').visible).ok()
|
||||
|
@ -119,8 +111,6 @@ test('#1 Settings', async t => {
|
|||
.click(Selector('div.p-navigation-library + div'))
|
||||
.expect(Selector('.p-navigation-files').visible).notOk()
|
||||
.click(Selector('div.p-navigation-albums + div'))
|
||||
//TODO fix it
|
||||
//.expect(Selector('.p-navigation-folders').exists).notOk()
|
||||
.expect(Selector('.p-navigation-moments').visible).notOk()
|
||||
.expect(Selector('.p-navigation-labels').visible).notOk()
|
||||
.expect(Selector('.p-navigation-places').visible).notOk()
|
||||
|
@ -144,7 +134,4 @@ test('#1 Settings', async t => {
|
|||
.click(Selector('.input-places input'))
|
||||
.click(Selector('.input-private input'))
|
||||
.click(Selector('.input-review input'));
|
||||
});
|
||||
|
||||
|
||||
//places settings
|
||||
});
|
|
@ -1,45 +0,0 @@
|
|||
import { Selector } from 'testcafe';
|
||||
import testcafeconfig from './testcafeconfig.json';
|
||||
import Page from "./page-model";
|
||||
|
||||
fixture`Test views`
|
||||
.page`${testcafeconfig.url}`;
|
||||
|
||||
const page = new Page();
|
||||
|
||||
test('Open photo in fullscreen', async t => {
|
||||
await t
|
||||
.click(Selector('div.v-image__image').nth(0))
|
||||
.expect(Selector('#p-photo-viewer').visible).ok()
|
||||
.expect(Selector('img.pswp__img').visible).ok();
|
||||
});
|
||||
|
||||
test('Open mosaic view via select', async t => {
|
||||
await t
|
||||
.click('button.p-expand-search');
|
||||
await page.setFilter('view', 'Mosaic');
|
||||
await t
|
||||
.expect(Selector('div.v-image__image').visible).ok()
|
||||
.expect(Selector('div.p-photo-mosaic').visible).ok()
|
||||
.expect(Selector('div.p-photo div.caption').exists).notOk()
|
||||
.expect(Selector('#p-photo-viewer').visible).notOk();
|
||||
});
|
||||
|
||||
test('Open list view via select', async t => {
|
||||
await t
|
||||
.click('button.p-expand-search');
|
||||
await page.setFilter('view', 'List');
|
||||
await t
|
||||
.expect(Selector('table.v-datatable').visible).ok()
|
||||
.expect(Selector('div.p-photo-list').visible).ok();
|
||||
});
|
||||
|
||||
test('Open card view via select', async t => {
|
||||
await t
|
||||
.click('button.p-expand-search');
|
||||
await page.setFilter('view', 'Cards');
|
||||
await t
|
||||
.expect(Selector('div.v-image__image').visible).ok()
|
||||
.expect(Selector('div.p-photo div.caption').visible).ok()
|
||||
.expect(Selector('#p-photo-viewer').visible).notOk();
|
||||
});
|
Loading…
Reference in a new issue