fix(firefox): enable more tests (#4037)

Further align Puppeteer-Firefox implementation with Puppeteer to
pass more tests.
This commit is contained in:
Andrey Lushnikov 2019-02-19 22:36:02 -08:00 committed by GitHub
parent 03c542a6c1
commit a0fd2ce3fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 8 deletions

View File

@ -364,7 +364,7 @@ class Frame {
* @param {!{timeout?: number, visible?: boolean, hidden?: boolean}=} options * @param {!{timeout?: number, visible?: boolean, hidden?: boolean}=} options
* @return {!Promise<!ElementHandle>} * @return {!Promise<!ElementHandle>}
*/ */
_waitForSelectorOrXPath(selectorOrXPath, isXPath, options = {}) { async _waitForSelectorOrXPath(selectorOrXPath, isXPath, options = {}) {
const { const {
visible: waitForVisible = false, visible: waitForVisible = false,
hidden: waitForHidden = false, hidden: waitForHidden = false,
@ -372,7 +372,13 @@ class Frame {
} = options; } = options;
const polling = waitForVisible || waitForHidden ? 'raf' : 'mutation'; const polling = waitForVisible || waitForHidden ? 'raf' : 'mutation';
const title = `${isXPath ? 'XPath' : 'selector'} "${selectorOrXPath}"${waitForHidden ? ' to be hidden' : ''}`; const title = `${isXPath ? 'XPath' : 'selector'} "${selectorOrXPath}"${waitForHidden ? ' to be hidden' : ''}`;
return new WaitTask(this, predicate, title, polling, timeout, selectorOrXPath, isXPath, waitForVisible, waitForHidden).promise; const waitTask = new WaitTask(this, predicate, title, polling, timeout, selectorOrXPath, isXPath, waitForVisible, waitForHidden);
const handle = await waitTask.promise;
if (!handle.asElement()) {
await handle.dispose();
return null;
}
return handle.asElement();
/** /**
* @param {string} selectorOrXPath * @param {string} selectorOrXPath
@ -668,7 +674,7 @@ class WaitTask {
this._frame = frame; this._frame = frame;
this._polling = polling; this._polling = polling;
this._timeout = timeout; this._timeout = timeout;
this._predicateBody = helper.isString(predicateBody) ? 'return ' + predicateBody : 'return (' + predicateBody + ')(...args)'; this._predicateBody = helper.isString(predicateBody) ? 'return (' + predicateBody + ')' : 'return (' + predicateBody + ')(...args)';
this._args = args; this._args = args;
this._runCount = 0; this._runCount = 0;
frame._waitTasks.add(this); frame._waitTasks.add(this);

View File

@ -60,16 +60,17 @@ module.exports.addTests = function({testRunner, expect, product, Errors}) {
await page.waitFor(timeout); await page.waitFor(timeout);
expect(Date.now() - startTime).not.toBeLessThan(timeout / 2); expect(Date.now() - startTime).not.toBeLessThan(timeout / 2);
}); });
it_fails_ffox('should work with multiline body', async({page, server}) => { it('should work with multiline body', async({page, server}) => {
const result = await page.waitForFunction(` const result = await page.waitForFunction(`
(() => true)() (() => true)()
`); `);
expect(await result.jsonValue()).toBe(true); expect(await result.jsonValue()).toBe(true);
}); });
it('should wait for predicate', async({page, server}) => { it('should wait for predicate', async({page, server}) => {
const watchdog = page.waitFor(() => window.innerWidth < 100); await Promise.all([
page.setViewport({width: 10, height: 10}); page.waitFor(() => window.innerWidth < 100),
await watchdog; page.setViewport({width: 10, height: 10}),
]);
}); });
it('should throw when unknown type', async({page, server}) => { it('should throw when unknown type', async({page, server}) => {
let error = null; let error = null;
@ -346,7 +347,7 @@ module.exports.addTests = function({testRunner, expect, product, Errors}) {
expect(await waitForSelector).toBe(true); expect(await waitForSelector).toBe(true);
expect(divRemoved).toBe(true); expect(divRemoved).toBe(true);
}); });
it_fails_ffox('should return null if waiting to hide non-existing element', async({page, server}) => { it('should return null if waiting to hide non-existing element', async({page, server}) => {
const handle = await page.waitForSelector('non-existing', { hidden: true }); const handle = await page.waitForSelector('non-existing', { hidden: true });
expect(handle).toBe(null); expect(handle).toBe(null);
}); });