Path: blob/trunk/javascript/selenium-webdriver/test/lib/webdriver_script_test.js
2885 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 } = require('selenium-webdriver')21const { Pages, suite } = require('../../lib/test')22const fileServer = require('../../lib/test/fileserver')23const until = require('selenium-webdriver/lib/until')2425suite(26function (env) {27let driver2829beforeEach(async function () {30driver = await env.builder().build()31})3233afterEach(async function () {34await driver.quit()35})3637function delay(ms) {38return new Promise((resolve) => setTimeout(resolve, ms))39}4041describe('script()', function () {42it('can listen to console log', async function () {43let log = null44const handler = await driver.script().addConsoleMessageHandler((logEntry) => {45log = logEntry46})4748await driver.get(Pages.logEntryAdded)49await driver.findElement({ id: 'consoleLog' }).click()5051await delay(3000)5253assert.equal(log.text, 'Hello, world!')54assert.equal(log.realm, null)55assert.equal(log.type, 'console')56assert.equal(log.level, 'info')57assert.equal(log.method, 'log')58assert.equal(log.args.length, 1)59await driver.script().removeConsoleMessageHandler(handler)60})6162it('can listen to javascript error', async function () {63let log = null64const handler = await driver.script().addJavaScriptErrorHandler((logEntry) => {65log = logEntry66})6768await driver.get(Pages.logEntryAdded)69await driver.findElement({ id: 'jsException' }).click()7071await delay(3000)7273assert.equal(log.text, 'Error: Not working')74assert.equal(log.type, 'javascript')75assert.equal(log.level, 'error')7677await driver.script().removeJavaScriptErrorHandler(handler)78})7980it('throws an error while removing a handler that does not exist', async function () {81try {82await driver.script().removeJavaScriptErrorHandler(10)83assert.fail('Expected error not thrown. Non-existent handler cannot be removed')84} catch (e) {85assert.strictEqual(e.message, 'Callback with id 10 not found')86}87})8889it('can listen to dom mutations', async function () {90let message = null91await driver.script().addDomMutationHandler((m) => {92message = m93})9495await driver.get(fileServer.Pages.dynamicPage)9697let element = driver.findElement({ id: 'reveal' })98await element.click()99let revealed = driver.findElement({ id: 'revealed' })100await driver.wait(until.elementIsVisible(revealed), 5000)101102assert.strictEqual(message['attribute_name'], 'style')103assert.strictEqual(message['current_value'], '')104assert.strictEqual(message['old_value'], 'display:none;')105})106107it('can remove to dom mutation handler', async function () {108let message = null109let id = await driver.script().addDomMutationHandler((m) => {110message = m111})112113await driver.get(fileServer.Pages.dynamicPage)114115await driver.script().removeDomMutationHandler(id)116117let element = driver.findElement({ id: 'reveal' })118await element.click()119let revealed = driver.findElement({ id: 'revealed' })120await driver.wait(until.elementIsVisible(revealed), 5000)121122assert.strictEqual(message, null)123})124125it('can pin script', async function () {126await driver.script().pin("() => { console.log('Hello!'); }")127let log128129await driver.script().addConsoleMessageHandler((logEntry) => {130log = logEntry131})132133await driver.get(Pages.logEntryAdded)134135await delay(3000)136137assert.equal(log.text, 'Hello!')138})139140it('can unpin script', async function () {141const id = await driver.script().pin("() => { console.log('Hello!'); }")142143let count = 0144await driver.script().addConsoleMessageHandler((logEntry) => {145count++146})147148await driver.get(Pages.logEntryAdded)149150await driver.script().unpin(id)151152await driver.get(Pages.logEntryAdded)153154assert.equal(count, 1)155})156})157},158{ browsers: [Browser.FIREFOX, Browser.CHROME, Browser.EDGE] },159)160161162