mediawiki-extensions-Popups/tests/selenium/pageobjects/popups.page.js
Jon Robson c2b840a561 Fixes Selenium Popups tests
As part of T310054, we moved article tabs into
the #content area on the beta cluster which caused
the daily tests to fail. As a result the page previews
test is currently expecting a page preview to show
on hovering "Article" which is not the case.

Update selector to target links in the parser
content

Bug: T310313
Change-Id: I0bbccbbfbae458d5c32eaea12f855b832b52491c
2022-06-15 10:09:21 -07:00

136 lines
3.3 KiB
JavaScript

'use strict';
/* global document */
const
fs = require( 'fs' ),
Api = require( 'wdio-mediawiki/Api' ),
Page = require( 'wdio-mediawiki/Page' ),
Util = require( 'wdio-mediawiki/Util' ),
TEST_PAGE_TITLE = 'Popups test page',
POPUPS_SELECTOR = '.mwe-popups',
PAGE_POPUPS_SELECTOR = '.mwe-popups-type-page',
PAGE_POPUPS_LINK_SELECTOR = '.mw-body-content ul a',
REFERENCE_POPUPS_SELECTOR = '.mwe-popups-type-reference',
REFERENCE_INCEPTION_LINK_SELECTOR = '.mwe-popups-type-reference .reference a',
POPUPS_MODULE_NAME = 'ext.popups.main';
function makePage( title, path ) {
return new Promise( ( resolve ) => {
fs.readFile( path, 'utf-8', ( err, content ) => {
if ( err ) {
throw err;
}
resolve( content );
} );
} ).then( async ( content ) => {
const bot = await Api.bot();
await bot.edit( title, content );
} );
}
class PopupsPage extends Page {
setup() {
browser.call( () => {
const path = `${__dirname}/../fixtures/`;
// FIXME: Cannot use Promise.all as wdio-mediawiki/Api will trigger a bad
// token error.
return makePage( `${TEST_PAGE_TITLE} 2`, `${path}/test_page_2.wikitext` ).then( () => {
return makePage( TEST_PAGE_TITLE, `${path}test_page.wikitext` );
} );
} );
}
ready() {
Util.waitForModuleState( POPUPS_MODULE_NAME );
}
shouldUseReferencePopupsBetaFeature( shouldUse ) {
Util.waitForModuleState( 'mediawiki.base' );
return browser.execute( function ( use ) {
return mw.loader.using( 'mediawiki.api' ).then( function () {
return new mw.Api().saveOptions( {
// TODO: Remove the first option when all Beta code is gone
popupsreferencepreviews: use ? '1' : '0',
'popups-reference-previews': use ? '1' : '0'
} );
} );
}, shouldUse );
}
hasReferencePopupsEnabled() {
// TODO Remove or adjust when not in Beta any more
return browser.execute( () => mw.config.get( 'wgPopupsReferencePreviews' ) );
}
abandonLink() {
$( '#content h1' ).moveTo();
}
dwellLink( selector ) {
$( selector ).moveTo();
$( POPUPS_SELECTOR ).waitForExist();
}
dwellPageLink() {
this.dwellLink( PAGE_POPUPS_LINK_SELECTOR );
}
hoverPageLink() {
$( PAGE_POPUPS_LINK_SELECTOR ).moveTo();
}
dwellReferenceLink( num ) {
this.dwellLink( `.reference:nth-of-type(${num}) a` );
}
dwellReferenceInceptionLink() {
$( REFERENCE_INCEPTION_LINK_SELECTOR ).moveTo();
browser.pause( 1000 );
}
doNotSeePreview( selector ) {
return browser.waitUntil( () => !$( selector ).isDisplayed() );
}
doNotSeePagePreview() {
return this.doNotSeePreview( PAGE_POPUPS_SELECTOR );
}
doNotSeeReferencePreview() {
return this.doNotSeePreview( REFERENCE_POPUPS_SELECTOR );
}
seePreview( selector ) {
return $( selector ).isDisplayed();
}
seePagePreview() {
return this.seePreview( PAGE_POPUPS_SELECTOR );
}
seeReferencePreview() {
return this.seePreview( REFERENCE_POPUPS_SELECTOR );
}
seeReferenceInceptionPreview() {
return this.seePreview( REFERENCE_INCEPTION_LINK_SELECTOR );
}
seeScrollableReferencePreview() {
return browser.execute( () => {
const el = document.querySelector( '.mwe-popups-extract .mwe-popups-scroll' );
return el.scrollHeight > el.offsetHeight;
} );
}
seeFadeoutOnReferenceText() {
return $( '.mwe-popups-fade-out' ).isExisting();
}
open() {
super.openTitle( TEST_PAGE_TITLE );
}
}
module.exports = new PopupsPage();