Path: blob/trunk/javascript/selenium-webdriver/test/devtools_test.js
2884 views
// Licensed to the Software Freedom Conservancy (SFC) under one1// or more contributor license agreements. See the NOTICE file2// distributed with this work for additional information3// regarding copyright ownership. The SFC licenses this file4// to you under the Apache License, Version 2.0 (the5// "License"); you may not use this file except in compliance6// with the License. You may obtain a copy of the License at7//8// http://www.apache.org/licenses/LICENSE-2.09//10// Unless required by applicable law or agreed to in writing,11// software distributed under the License is distributed on an12// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY13// KIND, either express or implied. See the License for the14// specific language governing permissions and limitations15// under the License.1617'use strict'1819const assert = require('node:assert')20const { Browser, until } = require('selenium-webdriver')21const fileServer = require('../lib/test/fileserver')22const { HttpResponse } = require('selenium-webdriver/devtools/networkinterceptor')23const { Pages, ignore, suite } = require('../lib/test')2425suite(26function (env) {27const browsers = (...args) => env.browsers(...args)2829let driver3031before(async function () {32driver = await env.builder().build()33})34after(async () => await driver.quit())3536ignore(browsers(Browser.CHROME)).it('sends Page.enable command using devtools', async function () {37const cdpConnection = await driver.createCDPConnection('page')38cdpConnection.execute('Page.enable', {}, function (_res, err) {39assert(!err)40})41})4243ignore(browsers(Browser.CHROME)).it('sends Network and Page command using devtools', async function () {44const cdpConnection = await driver.createCDPConnection('page')45cdpConnection.execute('Network.enable', {}, function (_res, err) {46assert(!err)47})4849cdpConnection.execute('Page.navigate', { url: 'chrome://newtab/' }, function (_res, err) {50assert(!err)51})52})5354describe('JS CDP events', function () {55ignore(browsers(Browser.CHROME)).it('calls the event listener for console.log', async function () {56const cdpConnection = await driver.createCDPConnection('page')57await driver.onLogEvent(cdpConnection, function (event) {58assert.strictEqual(event['args'][0]['value'], 'here')59})60await driver.executeScript('console.log("here")')61})6263ignore(browsers(Browser.CHROME)).it('calls the event listener for js exceptions', async function () {64const cdpConnection = await driver.createCDPConnection('page')65await driver.onLogException(cdpConnection, function (event) {66assert.strictEqual(event['exceptionDetails']['stackTrace']['callFrames'][0]['functionName'], 'onmouseover')67})68await driver.get(Pages.javascriptPage)69let element = driver.findElement({ id: 'throwing-mouseover' })70await element.click()71})72})7374describe('JS DOM events', function () {75ignore(browsers(Browser.CHROME)).it('calls the event listener on dom mutations', async function () {76const cdpConnection = await driver.createCDPConnection('page')77await driver.logMutationEvents(cdpConnection, function (event) {78assert.strictEqual(event['attribute_name'], 'style')79assert.strictEqual(event['current_value'], '')80assert.strictEqual(event['old_value'], 'display:none;')81})8283await driver.get(fileServer.Pages.dynamicPage)8485let element = driver.findElement({ id: 'reveal' })86await element.click()87let revealed = driver.findElement({ id: 'revealed' })88await driver.wait(until.elementIsVisible(revealed), 5000)89})90})9192describe('Basic Auth Injection', function () {93ignore(browsers(Browser.SAFARI, Browser.CHROME)).it(94'denies entry if username and password do not match',95async function () {96const pageCdpConnection = await driver.createCDPConnection('page')9798await driver.register('random', 'random', pageCdpConnection)99await driver.get(fileServer.Pages.basicAuth)100let source = await driver.getPageSource()101assert.ok(!source.includes('Access granted!'), `The Source is \n ${source}`)102},103)104105ignore(browsers(Browser.SAFARI, Browser.CHROME)).it(106'grants access if username and password are a match',107async function () {108const pageCdpConnection = await driver.createCDPConnection('page')109110await driver.register('genie', 'bottle', pageCdpConnection)111await driver.get(fileServer.Pages.basicAuth)112let source = await driver.getPageSource()113assert.strictEqual(source.includes('Access granted!'), true)114},115)116})117118describe('Network Interception', function () {119ignore(browsers(Browser.SAFARI)).it('Allows network requests to be captured and mocked', async function () {120const connection = await driver.createCDPConnection('page')121let url = fileServer.whereIs('/cheese')122let httpResponse = new HttpResponse(url)123httpResponse.addHeaders('Content-Type', 'UTF-8')124httpResponse.body = 'sausages'125await driver.onIntercept(connection, httpResponse, async function () {126let body = await driver.getPageSource()127assert.strictEqual(body.includes('sausages'), true, `Body contains: ${body}`)128})129await driver.get(url)130})131})132},133{ browsers: ['chrome'] },134)135136137