| Index: test/wrappers/pages.js |
| =================================================================== |
| --- a/test/wrappers/pages.js |
| +++ b/test/wrappers/pages.js |
| @@ -23,6 +23,75 @@ |
| const Jimp = require("jimp"); |
| const {By} = require("selenium-webdriver"); |
| +// Once we require Node.js >= 10 this should be replaced with |
| +// the built-in finally() method of the Promise object. |
| +function promiseFinally(p, callback) |
| +{ |
| + return p.then(callback, callback); |
| +} |
| + |
| +function closeWindow(driver, goTo, returnTo, callback) |
| +{ |
| + return promiseFinally( |
| + driver.switchTo().window(goTo).then(() => |
| + promiseFinally( |
| + new Promise(resolve => resolve(callback && callback())), |
| + () => driver.close() |
| + ) |
| + ), |
| + () => driver.switchTo().window(returnTo) |
| + ); |
| +} |
| + |
| +function testSubscribeLink(driver) |
| +{ |
| + return driver.findElement(By.id("subscribe-button")).click().then(() => |
| + driver.wait(() => |
| + driver.getAllWindowHandles().then(handles => |
| + handles.length > 2 ? handles : null |
| + ), 1000 |
| + ) |
| + ).then(handles => |
| + closeWindow(driver, handles[2], handles[1], () => |
| + driver.switchTo().frame(0).then(() => |
| + driver.findElement(By.id("dialog-content-predefined")) |
| + ).then(dialog => |
| + Promise.all([ |
| + dialog.isDisplayed(), |
| + dialog.findElement(By.css("h3")).getText() |
| + ]).then(([displayed, title]) => |
| + { |
| + assert.ok(displayed, "subscribe link: dialog shown"); |
| + assert.equal(title, "ABP Testcase Subscription", |
| + "subscribe link: title shown in dialog"); |
| + |
| + return dialog.findElement(By.css("button")).click(); |
| + }) |
| + ).then(() => |
| + driver.executeAsyncScript(` |
| + let callback = arguments[arguments.length - 1]; |
| + browser.runtime.sendMessage({type: "subscriptions.get", |
| + ignoreDisabled: true, |
| + downloadable: true}).then(subs => |
| + subs.some(s => |
| + s.url.endsWith("${TEST_PAGES_URL.replace(/^[^:]+/, "")}" + |
| + "abp-testcase-subscription.txt") |
| + ) |
| + ).then( |
| + res => callback([res, null]), |
| + err => callback([null, err]) |
| + ); |
| + `) |
| + ).then(([added, err]) => |
| + { |
| + if (err) |
| + throw err; |
| + assert.ok(added, "subscribe link: subscription added"); |
| + }) |
| + ) |
| + ); |
| +} |
| + |
| function imageFromBase64(s) |
| { |
| return Jimp.read(Buffer.from(s, "base64")); |
| @@ -81,7 +150,7 @@ |
| Promise.all(elements.map(elem => elem.getAttribute("href"))) |
| ).then(urls => |
| { |
| - let p1 = Promise.resolve(); |
| + let p1 = testSubscribeLink(this.driver); |
| for (let url of urls) |
| p1 = p1.then(() => |
| this.driver.navigate().to(url) |
| @@ -156,12 +225,7 @@ |
| if (title.startsWith("$popup Exception -")) |
| { |
| assert.equal(handles.length, 3, title); |
| - |
| - return this.driver.switchTo().window(handles[2]).then(() => |
| - this.driver.close() |
| - ).then(() => |
| - this.driver.switchTo().window(handles[1]) |
| - ); |
| + return closeWindow(this.driver, handles[2], handles[1]); |
| } |
| assert.equal(handles.length, 2, title); |