diff --git a/javascript/node/selenium-webdriver/bidi/network.js b/javascript/node/selenium-webdriver/bidi/network.js index 9a4755ddfec42..db5e3702424ab 100644 --- a/javascript/node/selenium-webdriver/bidi/network.js +++ b/javascript/node/selenium-webdriver/bidi/network.js @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -const { BeforeRequestSent, ResponseStarted } = require('./networkTypes') +const { BeforeRequestSent, ResponseStarted, FetchError} = require('./networkTypes') const {AddInterceptParameters} = require("./addInterceptParameters"); class Network { @@ -44,6 +44,10 @@ class Network { await this.subscribeAndHandleEvent('network.authRequired', callback) } + async fetchError(callback) { + await this.subscribeAndHandleEvent('network.fetchError', callback) + } + async subscribeAndHandleEvent(eventType, callback) { if (this._browsingContextIds != null) { await this.bidi.subscribe(eventType, this._browsingContextIds) @@ -77,9 +81,18 @@ class Network { params.timestamp, params.response, ) + } else if ('errorText' in params) { + response = new FetchError( + params.context, + params.navigation, + params.redirectCount, + params.request, + params.timestamp, + params.errorText, + ) } callback(response) - } + } }) } diff --git a/javascript/node/selenium-webdriver/bidi/networkTypes.js b/javascript/node/selenium-webdriver/bidi/networkTypes.js index d727e0d96e0a5..fea5a9bd704cc 100644 --- a/javascript/node/selenium-webdriver/bidi/networkTypes.js +++ b/javascript/node/selenium-webdriver/bidi/networkTypes.js @@ -347,6 +347,17 @@ class BeforeRequestSent extends BaseParameters { } } +class FetchError extends BaseParameters { + constructor(id, navigation, redirectCount, request, timestamp, errorText) { + super(id, navigation, redirectCount, request, timestamp) + this._errorText = errorText + } + + get errorText() { + return this._errorText + } +} + class ResponseData { constructor( url, @@ -442,4 +453,4 @@ class ResponseStarted extends BaseParameters { } } -module.exports = { BeforeRequestSent, ResponseStarted } +module.exports = { BeforeRequestSent, ResponseStarted, FetchError } diff --git a/javascript/node/selenium-webdriver/test/bidi/network_test.js b/javascript/node/selenium-webdriver/test/bidi/network_test.js index 2c339d7f7e0d3..aa4b12dac8e3a 100644 --- a/javascript/node/selenium-webdriver/test/bidi/network_test.js +++ b/javascript/node/selenium-webdriver/test/bidi/network_test.js @@ -19,8 +19,8 @@ const assert = require('assert') const firefox = require('../../firefox') -const { Browser } = require('../../') -const { Pages, suite } = require('../../lib/test') +const {Browser} = require('../../') +const {Pages, suite} = require('../../lib/test') const Network = require('../../bidi/network') const until = require('../../lib/until') @@ -174,6 +174,27 @@ suite( assert.equal(authRequiredEvent.response.url.includes('basicAuth'), true) }) + xit('can listen to fetch error event', async function () { + let fetchErrorEvent = null + const network = await Network(driver) + await network.fetchError(function (event) { + fetchErrorEvent = event + }) + + try { + await driver.get('https://not_a_valid_url.test/') + } catch (e) { + // ignore + } + + const url = fetchErrorEvent.request.url + assert.equal(fetchErrorEvent.id, await driver.getWindowHandle()) + assert.equal(fetchErrorEvent.request.method, 'GET') + assert.equal(url.includes('valid_url'), true) + assert.equal(fetchErrorEvent.request.headers.length > 1, true) + assert.equal(fetchErrorEvent.errorText, 'NS_ERROR_UNKNOWN_HOST') + }) + it('test response completed mime type', async function () { let onResponseCompleted = [] const network = await Network(driver) @@ -196,5 +217,5 @@ suite( }) }) }, - { browsers: [Browser.FIREFOX] }, + {browsers: [Browser.FIREFOX]}, )