Quellverzeichnis testdriver.js
Interaktion und PortierbarkeitJAVA
(function () {
"use strict" ;
var idCounter = 0 ;
let testharness_context = null ;
const features = (() => {
function getFeatures(scriptSrc) {
try {
const url = new URL(scriptSrc);
return url.searchParams.getAll('feature' );
} catch (e) {
return [];
}
}
return getFeatures(document?.currentScript?.src ?? '' );
})();
function assertBidiIsEnabled(){
if (!features.includes('bidi' )) {
throw new Error(
"`?feature=bidi` is missing when importing testdriver.js but the test is using WebDriver BiDi APIs" );
}
}
function assertTestIsTentative(){
const testPath = location.pathname;
const tentative = testPath.includes('.tentative.' ) || testPath.includes('/tentative/' );
if (!tentative) {
throw new Error("Method in testdriver.js intended for tentative tests used in non-tentative test" );
}
}
function getInViewCenterPoint(rect) {
var left = Math.max(0 , rect.left);
var right = Math.min(window.innerWidth, rect.right);
var top = Math.max(0 , rect.top);
var bottom = Math.min(window.innerHeight, rect.bottom);
var x = 0 .5 * (left + right);
var y = 0 .5 * (top + bottom);
return [x, y];
}
function getPointerInteractablePaintTree(element) {
let elementDocument = element.ownerDocument;
if (!elementDocument.contains(element)) {
return [];
}
var rectangles = element.getClientRects();
if (rectangles.length === 0 ) {
return [];
}
var centerPoint = getInViewCenterPoint(rectangles[0 ]);
if ("elementsFromPoint" in elementDocument) {
return elementDocument.elementsFromPoint(centerPoint[0 ], centerPoint[1 ]);
} else if ("msElementsFromPoint" in elementDocument) {
var rv = elementDocument.msElementsFromPoint(centerPoint[0 ], centerPoint[1 ]);
return Array.prototype.slice.call(rv ? rv : []);
} else {
throw new Error("document.elementsFromPoint unsupported" );
}
}
function inView(element) {
var pointerInteractablePaintTree = getPointerInteractablePaintTree(element);
return pointerInteractablePaintTree.indexOf(element) !== -1 ;
}
/**
* @ namespace { test_driver }
*/
window.test_driver = {
/**
Represents ` WebDriver BiDi < https : //w3c.github.io/webdriver-bidi>`_ protocol.
*/
bidi: {
/**
* @ typedef { ( String | WindowProxy ) } Context A browsing context . Can
* be specified by its ID ( a string ) or using a ` WindowProxy `
* object .
*/
/**
* ` bluetooth < https : //webbluetoothcg.github.io/web-bluetooth>`_ module.
*/
bluetooth: {
/**
* Handle a bluetooth device prompt with the given params . Matches the
* ` bluetooth . handleRequestDevicePrompt
* < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-handlerequestdeviceprompt-command>`_
* WebDriver BiDi command .
*
* @ example
* await test_driver . bidi . bluetooth . handleRequestDevicePrompt ( {
* prompt : " pmt - e0a234b " ,
* accept : true ,
* device : " dvc - 9 b3b872 "
* } ) ;
*
* @ param { object } params - Parameters for the command .
* @ param { string } params . prompt - The id of a bluetooth device prompt .
* Matches the
* ` bluetooth . HandleRequestDevicePromptParameters : prompt < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-handlerequestdeviceprompt-command>`_
* value .
* @ param { bool } params . accept - Whether to accept a bluetooth device prompt .
* Matches the
* ` bluetooth . HandleRequestDevicePromptAcceptParameters : accept < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-handlerequestdeviceprompt-command>`_
* value .
* @ param { string } params . device - The device id from a bluetooth device
* prompt to be accepted . Matches the
* ` bluetooth . HandleRequestDevicePromptAcceptParameters : device < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-handlerequestdeviceprompt-command>`_
* value .
* @ param { Context } [ params . context ] The optional context parameter specifies in
* which browsing context the bluetooth device prompt should be handled . If not
* provided , the current browsing context is used .
* @ returns { Promise } fulfilled after the bluetooth device prompt
* is handled , or rejected if the operation fails .
*/
handle_request_device_prompt: function (params) {
return window.test_driver_internal.bidi.bluetooth
.handle_request_device_prompt(params);
},
/**
* Creates a simulated bluetooth adapter with the given params . Matches the
* ` bluetooth . simulateAdapter < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulateAdapter-command>`_
* WebDriver BiDi command .
*
* @ example
* await test_driver . bidi . bluetooth . simulate_adapter ( {
* state : " powered - on "
* } ) ;
*
* @ param { object } params - Parameters for the command .
* @ param { string } params . state The state of the simulated bluetooth adapter .
* Matches the
* ` bluetooth . SimulateAdapterParameters : state < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulateAdapter-command>`_
* value .
* @ param { Context } [ params . context ] The optional context parameter specifies in
* which browsing context the simulated bluetooth adapter should be set . If not
* provided , the current browsing context is used .
* @ returns { Promise } fulfilled after the simulated bluetooth adapter is created
* and set , or rejected if the operation fails .
*/
simulate_adapter: function (params) {
return window.test_driver_internal.bidi.bluetooth.simulate_adapter(params);
},
/**
* Disables the bluetooth simulation with the given params . Matches the
* ` bluetooth . disableSimulation < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-disableSimulation-command>`_
* WebDriver BiDi command .
*
* @ example
* await test_driver . bidi . bluetooth . disable_simulation ( ) ;
*
* @ param { object } params - Parameters for the command .
* @ param { Context } [ params . context ] The optional context parameter specifies in
* which browsing context to disable the simulation for . If not provided , the
* current browsing context is used .
* @ returns { Promise } fulfilled after the simulation is disabled , or rejected if
* the operation fails .
*/
disable_simulation: function (params) {
return window.test_driver_internal.bidi.bluetooth.disable_simulation(params);
},
/**
* Creates a simulated bluetooth peripheral with the given params .
* Matches the
* ` bluetooth . simulatePreconnectedPeripheral < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulateconnectedperipheral-command>`_
* WebDriver BiDi command .
*
* @ example
* await test_driver . bidi . bluetooth . simulatePreconnectedPeripheral ( {
* " address " : " 09 : 09 : 09 : 09 : 09 : 09 " ,
* " name " : " Some Device " ,
* " manufacturerData " : [ { key : 17 , data : " AP8BAX8 = " } ] ,
* " knownServiceUuids " : [
* " 12345678 - 1234 - 5678 - 9 abc - def123456789 " ,
* ] ,
* } ) ;
*
* @ param { object } params - Parameters for the command .
* @ param { string } params . address - The address of the simulated
* bluetooth peripheral . Matches the
* ` bluetooth . SimulatePreconnectedPeripheralParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulateconnectedperipheral-command>`_
* value .
* @ param { string } params . name - The name of the simulated bluetooth
* peripheral . Matches the
* ` bluetooth . SimulatePreconnectedPeripheralParameters : name < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulateconnectedperipheral-command>`_
* value .
* @ param { Array . ManufacturerData } params . manufacturerData - The manufacturerData of the
* simulated bluetooth peripheral . Matches the
* ` bluetooth . SimulatePreconnectedPeripheralParameters : manufacturerData < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulateconnectedperipheral-command>`_
* value .
* @ param { string } params . knownServiceUuids - The knownServiceUuids of
* the simulated bluetooth peripheral . Matches the
* ` bluetooth . SimulatePreconnectedPeripheralParameters : knownServiceUuids < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulateconnectedperipheral-command>`_
* value .
* @ param { Context } [ params . context ] The optional context parameter
* specifies in which browsing context the simulated bluetooth peripheral should be
* set . If not provided , the current browsing context is used .
* @ returns { Promise } fulfilled after the simulated bluetooth peripheral is created
* and set , or rejected if the operation fails .
*/
simulate_preconnected_peripheral: function (params) {
return window.test_driver_internal.bidi.bluetooth
.simulate_preconnected_peripheral(params);
},
/**
* Simulates a GATT connection response for a given peripheral .
* Matches the ` bluetooth . simulateGattConnectionResponse
* < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulategattconnectionresponse-command>`_
* WebDriver BiDi command .
*
* @ example
* await test_driver . bidi . bluetooth . simulate_gatt_connection_response ( {
* " address " : " 09 : 09 : 09 : 09 : 09 : 09 " ,
* " code " : 0 x0
* } ) ;
*
* @ param { object } params - Parameters for the command .
* @ param { string } params . address - The address of the simulated
* bluetooth peripheral . Matches the
* ` bluetooth . SimulateGattConnectionResponseParameters : peripheral < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulategattconnectionresponse-command>`_
* value .
* @ param { number } params . code - The response code for a GATT connection attempted .
* Matches the
* ` bluetooth . SimulateGattConnectionResponseParameters : code < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulategattconnectionresponse-command>`_
* value .
* @ param { Context } [ params . context ] The optional context parameter specifies in
* which browsing context the GATT connection response should be simulated . If not
* provided , the current browsing context is used .
* @ returns { Promise } fulfilled after the GATT connection response
* is simulated , or rejected if the operation fails .
*/
simulate_gatt_connection_response: function (params) {
return window.test_driver_internal.bidi.bluetooth
.simulate_gatt_connection_response(params);
},
/**
* Simulates a GATT disconnection for a given peripheral .
* Matches the ` bluetooth . simulateGattDisconnection
* < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulategattdisconnection-command>`_
* WebDriver BiDi command .
*
* @ example
* await test_driver . bidi . bluetooth . simulate_gatt_disconnection ( {
* " address " : " 09 : 09 : 09 : 09 : 09 : 09 " ,
* } ) ;
*
* @ param { object } params - Parameters for the command .
* @ param { string } params . address - The address of the simulated
* bluetooth peripheral . Matches the
* ` bluetooth . SimulateGattDisconnectionParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulategattdisconnection-command>`_
* value .
* @ param { Context } [ params . context ] The optional context parameter specifies in
* which browsing context the GATT disconnection should be simulated . If not
* provided , the current browsing context is used .
* @ returns { Promise } fulfilled after the GATT disconnection
* is simulated , or rejected if the operation fails .
*/
simulate_gatt_disconnection: function (params) {
return window.test_driver_internal.bidi.bluetooth
.simulate_gatt_disconnection(params);
},
/**
* Simulates a GATT service .
* Matches the ` bluetooth . simulateService
* < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulateservice-command>`_
* WebDriver BiDi command .
*
* @ example
* await test_driver . bidi . bluetooth . simulate_service ( {
* " address " : " 09 : 09 : 09 : 09 : 09 : 09 " ,
* " uuid " : " 0000180 d - 0000 - 1000 - 8000 - 00805 f9b34fb " ,
* " type " : " add "
* } ) ;
*
* @ param { object } params - Parameters for the command .
* @ param { string } params . address - The address of the simulated bluetooth peripheral this service belongs to .
* Matches the
* ` bluetooth . SimulateServiceParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulateservice-command>`_
* value .
* @ param { string } params . uuid - The uuid of the simulated GATT service .
* Matches the
* ` bluetooth . SimulateServiceParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulateservice-command>`_
* value .
* @ param { string } params . type - The type of the GATT service simulation , either " add " or " remove " .
* Matches the
* ` bluetooth . SimulateServiceParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulateservice-command>`_
* value .
* @ param { Context } [ params . context ] The optional context parameter specifies in
* which browsing context the GATT service should be simulated . If not
* provided , the current browsing context is used .
* @ returns { Promise } fulfilled after the GATT service
* is simulated , or rejected if the operation fails .
*/
simulate_service: function (params) {
return window.test_driver_internal.bidi.bluetooth
.simulate_service(params);
},
/**
* Simulates a GATT characteristic .
* Matches the ` bluetooth . simulateCharacteristic
* < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatecharacteristic-command>`_
* WebDriver BiDi command .
*
* @ example
* await test_driver . bidi . bluetooth . simulate_characteristic ( {
* " address " : " 09 : 09 : 09 : 09 : 09 : 09 " ,
* " serviceUuid " : " 0000180 d - 0000 - 1000 - 8000 - 00805 f9b34fb " ,
* " characteristicUuid " : " 00002 a21 - 0000 - 1000 - 8000 - 00805 f9b34fb " ,
* " characteristicProperties " : {
* " read " : true ,
* " write " : true ,
* " notify " : true
* } ,
* " type " : " add "
* } ) ;
*
* @ param { object } params - Parameters for the command .
* @ param { string } params . address - The address of the simulated bluetooth peripheral the characterisitc belongs to .
* Matches the
* ` bluetooth . SimulateCharacteristicParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatecharacteristic-command>`_
* value .
* @ param { string } params . serviceUuid - The uuid of the simulated GATT service the characterisitc belongs to .
* Matches the
* ` bluetooth . SimulateCharacteristicParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatecharacteristic-command>`_
* value .
* @ param { string } params . characteristicUuid - The uuid of the simulated GATT characteristic .
* Matches the
* ` bluetooth . SimulateCharacteristicParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatecharacteristic-command>`_
* value .
* @ param { string } params . characteristicProperties - The properties of the simulated GATT characteristic .
* Matches the
* ` bluetooth . SimulateCharacteristicParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatecharacteristic-command>`_
* value .
* @ param { string } params . type - The type of the GATT characterisitc simulation , either " add " or " remove " .
* Matches the
* ` bluetooth . SimulateCharacteristicParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatecharacteristic-command>`_
* value .
* @ param { Context } [ params . context ] The optional context parameter specifies in
* which browsing context the GATT characteristic should be simulated . If not
* provided , the current browsing context is used .
* @ returns { Promise } fulfilled after the GATT characteristic
* is simulated , or rejected if the operation fails .
*/
simulate_characteristic: function (params) {
return window.test_driver_internal.bidi.bluetooth
.simulate_characteristic(params);
},
/**
* Simulates a GATT characteristic response .
* Matches the ` bluetooth . simulateCharacteristicResponse
* < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatecharacteristicresponse-command>`_
* WebDriver BiDi command .
*
* @ example
* await test_driver . bidi . bluetooth . simulate_characteristic ( {
* " address " : " 09 : 09 : 09 : 09 : 09 : 09 " ,
* " serviceUuid " : " 0000180 d - 0000 - 1000 - 8000 - 00805 f9b34fb " ,
* " characteristicUuid " : " 00002 a21 - 0000 - 1000 - 8000 - 00805 f9b34fb " ,
* " type " : " read " ,
* " code " : 0 ,
* " data " : [ 1 , 2 ]
* } ) ;
*
* @ param { object } params - Parameters for the command .
* @ param { string } params . address - The address of the simulated
* bluetooth peripheral . Matches the
* ` bluetooth . SimulateCharacteristicResponseParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatecharacteristicresponse-command>`_
* value .
* @ param { string } params . serviceUuid - The uuid of the simulated GATT service the characterisitc belongs to .
* Matches the
* ` bluetooth . SimulateCharacteristicResponseParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatecharacteristicresponse-command>`_
* value .
* @ param { string } params . characteristicUuid - The uuid of the simulated characteristic .
* Matches the
* ` bluetooth . SimulateCharacteristicResponseParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatecharacteristicresponse-command>`_
* value .
* @ param { string } params . type - The type of the simulated GATT characteristic operation . "
* Can be " read " , " write " , " subscribe - to - notifications " or " unsubscribe - from - notifications " .
* Matches the
* ` bluetooth . SimulateCharacteristicResponseParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatecharacteristicresponse-command>`_
* value .
* @ param { string } params . code - The simulated GATT characteristic response code .
* Matches the
* ` bluetooth . SimulateCharacteristicResponseParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatecharacteristicresponse-command>`_
* value . *
* @ param { string } params . data - The data along with the simulated GATT characteristic response .
* Matches the
* ` bluetooth . SimulateCharacteristicResponseParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatecharacteristicresponse-command>`_
* value . * *
* @ param { Context } [ params . context ] The optional context parameter specifies in
* which browsing context the GATT characteristic belongs to . If not
* provided , the current browsing context is used .
* @ returns { Promise } fulfilled after the GATT characteristic
* is simulated , or rejected if the operation fails .
*/
simulate_characteristic_response: function (params) {
return window.test_driver_internal.bidi.bluetooth
.simulate_characteristic_response(params);
},
/**
* Simulates a GATT descriptor .
* Matches the ` bluetooth . simulateDescriptor
* < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatedescriptor-command>`_
* WebDriver BiDi command .
*
* @ example
* await test_driver . bidi . bluetooth . simulate_descriptor ( {
* " address " : " 09 : 09 : 09 : 09 : 09 : 09 " ,
* " serviceUuid " : " 0000180 d - 0000 - 1000 - 8000 - 00805 f9b34fb " ,
* " characteristicUuid " : " 00002 a21 - 0000 - 1000 - 8000 - 00805 f9b34fb " ,
* " descriptorUuid " : " 00002901 - 0000 - 1000 - 8000 - 00805 f9b34fb " ,
* " type " : " add "
* } ) ;
*
* @ param { object } params - Parameters for the command .
* @ param { string } params . address - The address of the simulated bluetooth peripheral the descriptor belongs to .
* Matches the
* ` bluetooth . SimulateDescriptorParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatedescriptor-command>`_
* value .
* @ param { string } params . serviceUuid - The uuid of the simulated GATT service the descriptor belongs to .
* Matches the
* ` bluetooth . SimulateDescriptorParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatedescriptor-command>`_
* value .
* @ param { string } params . characteristicUuid - The uuid of the simulated GATT characterisitc the descriptor belongs to .
* Matches the
* ` bluetooth . SimulateDescriptorParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatedescriptor-command>`_
* value .
* @ param { string } params . descriptorUuid - The uuid of the simulated GATT descriptor .
* Matches the
* ` bluetooth . SimulateDescriptorParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatedescriptor-command>`_
* value . *
* @ param { string } params . type - The type of the GATT descriptor simulation , either " add " or " remove " .
* Matches the
* ` bluetooth . SimulateDescriptorParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatedescriptor-command>`_
* value .
* @ param { Context } [ params . context ] The optional context parameter specifies in
* which browsing context the GATT descriptor should be simulated . If not
* provided , the current browsing context is used .
* @ returns { Promise } fulfilled after the GATT descriptor
* is simulated , or rejected if the operation fails .
*/
simulate_descriptor: function (params) {
return window.test_driver_internal.bidi.bluetooth
.simulate_descriptor(params);
},
/**
* Simulates a GATT descriptor response .
* Matches the ` bluetooth . simulateDescriptorResponse
* < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatedescriptorresponse-command>`_
* WebDriver BiDi command .
*
* @ example
* await test_driver . bidi . bluetooth . simulate_descriptor_response ( {
* " address " : " 09 : 09 : 09 : 09 : 09 : 09 " ,
* " serviceUuid " : " 0000180 d - 0000 - 1000 - 8000 - 00805 f9b34fb " ,
* " characteristicUuid " : " 00002 a21 - 0000 - 1000 - 8000 - 00805 f9b34fb " ,
* " descriptorUuid " : " 00002901 - 0000 - 1000 - 8000 - 00805 f9b34fb " ,
* " type " : " read " ,
* " code " : 0 ,
* " data " : [ 1 , 2 ]
* } ) ;
*
* @ param { object } params - Parameters for the command .
* @ param { string } params . address - The address of the simulated bluetooth peripheral the descriptor belongs to .
* Matches the
* ` bluetooth . SimulateDescriptorResponseParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatedescriptorresponse-command>`_
* value .
* @ param { string } params . serviceUuid - The uuid of the simulated GATT service the descriptor belongs to .
* Matches the
* ` bluetooth . SimulateDescriptorResponseParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatedescriptorresponse-command>`_
* value .
* @ param { string } params . characteristicUuid - The uuid of the simulated GATT characterisitc the descriptor belongs to .
* Matches the
* ` bluetooth . SimulateDescriptorResponseParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatedescriptorresponse-command>`_
* value .
* @ param { string } params . descriptorUuid - The uuid of the simulated GATT descriptor .
* Matches the
* ` bluetooth . SimulateDescriptorResponseParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatedescriptorresponse-command>`_
* value .
* @ param { string } params . type - The type of the simulated GATT descriptor operation .
* Matches the
* ` bluetooth . SimulateDescriptorResponseParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatedescriptorresponse-command>`_
* value .
* @ param { string } params . code - The simulated GATT descriptor response code .
* Matches the
* ` bluetooth . SimulateDescriptorResponseParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatedescriptorresponse-command>`_
* value . *
* @ param { string } params . data - The data along with the simulated GATT descriptor response .
* Matches the
* ` bluetooth . SimulateDescriptorResponseParameters : address < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulatedescriptorresponse-command>`_
* value . * *
* @ param { Context } [ params . context ] The optional context parameter specifies in
* which browsing context the GATT descriptor belongs to . If not
* provided , the current browsing context is used .
* @ returns { Promise } fulfilled after the GATT descriptor response
* is simulated , or rejected if the operation fails .
*/
simulate_descriptor_response: function (params) {
return window.test_driver_internal.bidi.bluetooth
.simulate_descriptor_response(params);
},
/**
* ` bluetooth . RequestDevicePromptUpdatedParameters < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-requestdevicepromptupdated-event>`_
* event .
*/
request_device_prompt_updated: {
/**
* @ typedef { object } RequestDevicePromptUpdated
* ` bluetooth . RequestDevicePromptUpdatedParameters < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-requestdevicepromptupdated-event>`_
* event .
*/
/**
* Subscribes to the event . Events will be emitted only if
* there is a subscription for the event . This method does
* not add actual listeners . To listen to the event , use the
* ` on ` or ` once ` methods . The buffered events will be
* emitted before the command promise is resolved .
*
* @ param { object } [ params ] Parameters for the subscription .
* @ param { null | Array . < ( Context ) > } [ params . contexts ] The
* optional contexts parameter specifies which browsing
* contexts to subscribe to the event on . It should be
* either an array of Context objects , or null . If null , the
* event will be subscribed to globally . If omitted , the
* event will be subscribed to on the current browsing
* context .
* @ returns { Promise < ( function ( ) : Promise < void > ) > } Callback
* for unsubscribing from the created subscription .
*/
subscribe: async function (params = {}) {
assertBidiIsEnabled();
return window.test_driver_internal.bidi.bluetooth
.request_device_prompt_updated.subscribe(params);
},
/**
* Adds an event listener for the event .
*
* @ param { function ( RequestDevicePromptUpdated ) : void } callback The
* callback to be called when the event is emitted . The
* callback is called with the event object as a parameter .
* @ returns { function ( ) : void } A function that removes the
* added event listener when called .
*/
on: function (callback) {
assertBidiIsEnabled();
return window.test_driver_internal.bidi.bluetooth
.request_device_prompt_updated.on(callback);
},
/**
* Adds an event listener for the event that is only called
* once and removed afterward .
*
* @ return { Promise < RequestDevicePromptUpdated > } The promise which
* is resolved with the event object when the event is emitted .
*/
once: function () {
assertBidiIsEnabled();
return new Promise(resolve => {
const remove_handler =
window.test_driver_internal.bidi.bluetooth
.request_device_prompt_updated.on(event => {
resolve(event);
remove_handler();
});
});
},
},
/**
* ` bluetooth . GattConnectionAttemptedParameters < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-gattConnectionAttempted-event>`_
* event .
*/
gatt_connection_attempted: {
/**
* @ typedef { object } GattConnectionAttempted
* ` bluetooth . GattConnectionAttempted < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-gattConnectionAttempted-event>`_
* event .
*/
/**
* Subscribes to the event . Events will be emitted only if
* there is a subscription for the event . This method does
* not add actual listeners . To listen to the event , use the
* ` on ` or ` once ` methods . The buffered events will be
* emitted before the command promise is resolved .
*
* @ param { object } [ params ] Parameters for the subscription .
* @ param { null | Array . < ( Context ) > } [ params . contexts ] The
* optional contexts parameter specifies which browsing
* contexts to subscribe to the event on . It should be
* either an array of Context objects , or null . If null , the
* event will be subscribed to globally . If omitted , the
* event will be subscribed to on the current browsing
* context .
* @ returns { Promise < ( function ( ) : Promise < void > ) > } Callback
* for unsubscribing from the created subscription .
*/
subscribe: async function (params = {}) {
assertBidiIsEnabled();
return window.test_driver_internal.bidi.bluetooth
.gatt_connection_attempted.subscribe(params);
},
/**
* Adds an event listener for the event .
*
* @ param { function ( GattConnectionAttempted ) : void } callback The
* callback to be called when the event is emitted . The
* callback is called with the event object as a parameter .
* @ returns { function ( ) : void } A function that removes the
* added event listener when called .
*/
on: function (callback) {
assertBidiIsEnabled();
return window.test_driver_internal.bidi.bluetooth
.gatt_connection_attempted.on(callback);
},
/**
* Adds an event listener for the event that is only called
* once and removed afterward .
*
* @ return { Promise < GattConnectionAttempted > } The promise which
* is resolved with the event object when the event is emitted .
*/
once: function () {
assertBidiIsEnabled();
return new Promise(resolve => {
const remove_handler =
window.test_driver_internal.bidi.bluetooth
.gatt_connection_attempted.on(event => {
resolve(event);
remove_handler();
});
});
},
},
/**
* ` bluetooth . CharacteristicEventGeneratedParameters < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-characteristiceventgenerated-event>`_
* event .
*/
characteristic_event_generated: {
/**
* @ typedef { object } CharacteristicEventGenerated
* ` bluetooth . CharacteristicEventGenerated < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-characteristiceventgenerated-event>`_
* event .
*/
/**
* Subscribes to the event . Events will be emitted only if
* there is a subscription for the event . This method does
* not add actual listeners . To listen to the event , use the
* ` on ` or ` once ` methods . The buffered events will be
* emitted before the command promise is resolved .
*
* @ param { object } [ params ] Parameters for the subscription .
* @ param { null | Array . < ( Context ) > } [ params . contexts ] The
* optional contexts parameter specifies which browsing
* contexts to subscribe to the event on . It should be
* either an array of Context objects , or null . If null , the
* event will be subscribed to globally . If omitted , the
* event will be subscribed to on the current browsing
* context .
* @ returns { Promise < ( function ( ) : Promise < void > ) > } Callback
* for unsubscribing from the created subscription .
*/
subscribe: async function (params = {}) {
assertBidiIsEnabled();
return window.test_driver_internal.bidi.bluetooth
.characteristic_event_generated.subscribe(params);
},
/**
* Adds an event listener for the event .
*
* @ param { function ( CharacteristicEventGenerated ) : void } callback The
* callback to be called when the event is emitted . The
* callback is called with the event object as a parameter .
* @ returns { function ( ) : void } A function that removes the
* added event listener when called .
*/
on: function (callback) {
assertBidiIsEnabled();
return window.test_driver_internal.bidi.bluetooth
.characteristic_event_generated.on(callback);
},
/**
* Adds an event listener for the event that is only called
* once and removed afterward .
*
* @ return { Promise < CharacteristicEventGenerated > } The promise which
* is resolved with the event object when the event is emitted .
*/
once: function () {
assertBidiIsEnabled();
return new Promise(resolve => {
const remove_handler =
window.test_driver_internal.bidi.bluetooth
.characteristic_event_generated.on(event => {
resolve(event);
remove_handler();
});
});
},
},
/**
* ` bluetooth . DescriptorEventGeneratedParameters < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-descriptoreventgenerated-event>`_
* event .
*/
descriptor_event_generated: {
/**
* @ typedef { object } DescriptorEventGenerated
* ` bluetooth . DescriptorEventGenerated < https : //webbluetoothcg.github.io/web-bluetooth/#bluetooth-descriptoreventgenerated-event>`_
* event .
*/
/**
* Subscribes to the event . Events will be emitted only if
* there is a subscription for the event . This method does
* not add actual listeners . To listen to the event , use the
* ` on ` or ` once ` methods . The buffered events will be
* emitted before the command promise is resolved .
*
* @ param { object } [ params ] Parameters for the subscription .
* @ param { null | Array . < ( Context ) > } [ params . contexts ] The
* optional contexts parameter specifies which browsing
* contexts to subscribe to the event on . It should be
* either an array of Context objects , or null . If null , the
* event will be subscribed to globally . If omitted , the
* event will be subscribed to on the current browsing
* context .
* @ returns { Promise < ( function ( ) : Promise < void > ) > } Callback
* for unsubscribing from the created subscription .
*/
subscribe: async function (params = {}) {
assertBidiIsEnabled();
return window.test_driver_internal.bidi.bluetooth
.descriptor_event_generated.subscribe(params);
},
/**
* Adds an event listener for the event .
*
* @ param { function ( DescriptorEventGenerated ) : void } callback The
* callback to be called when the event is emitted . The
* callback is called with the event object as a parameter .
* @ returns { function ( ) : void } A function that removes the
* added event listener when called .
*/
on: function (callback) {
assertBidiIsEnabled();
return window.test_driver_internal.bidi.bluetooth
.descriptor_event_generated.on(callback);
},
/**
* Adds an event listener for the event that is only called
* once and removed afterward .
*
* @ return { Promise < DescriptorEventGenerated > } The promise which
* is resolved with the event object when the event is emitted .
*/
once: function () {
assertBidiIsEnabled();
return new Promise(resolve => {
const remove_handler =
window.test_driver_internal.bidi.bluetooth
.descriptor_event_generated.on(event => {
resolve(event);
remove_handler();
});
});
},
}
},
/**
* ` speculation < https : //wicg.github.io/nav-speculation/prefetch.html>`_ module.
*/
speculation: {
/**
* ` speculation . PrefetchStatusUpdated < https : //wicg.github.io/nav-speculation/prefetch.html#speculation-prefetchstatusupdated-event>`_
* event .
*/
prefetch_status_updated: {
/**
* @ typedef { object } PrefetchStatusUpdated
* ` speculation . PrefetchStatusUpdatedParameters < https : //wicg.github.io/nav-speculation/prefetch.html#cddl-type-speculationprefetchstatusupdatedparameters>`_
* event .
*/
/**
* Subscribes to the event . Events will be emitted only if
* there is a subscription for the event . This method does
* not add actual listeners . To listen to the event , use the
* ` on ` or ` once ` methods . The buffered events will be
* emitted before the command promise is resolved .
*
* @ param { object } [ params ] Parameters for the subscription .
* @ param { null | Array . < ( Context ) > } [ params . contexts ] The
* optional contexts parameter specifies which browsing
* contexts to subscribe to the event on . It should be
* either an array of Context objects , or null . If null , the
* event will be subscribed to globally . If omitted , the
* event will be subscribed to on the current browsing
* context .
* @ returns { Promise < ( function ( ) : Promise < void > ) > } Callback
* for unsubscribing from the created subscription .
*/
subscribe: async function (params = {}) {
assertBidiIsEnabled();
return window.test_driver_internal.bidi.speculation
.prefetch_status_updated.subscribe(params);
},
/**
* Adds an event listener for the event .
*
* @ param { function ( PrefetchStatusUpdated ) : void } callback The
* callback to be called when the event is emitted . The
* callback is called with the event object as a parameter .
* @ returns { function ( ) : void } A function that removes the
* added event listener when called .
*/
on: function (callback) {
assertBidiIsEnabled();
return window.test_driver_internal.bidi.speculation
.prefetch_status_updated.on(callback);
},
/**
* Adds an event listener for the event that is only called
* once and removed afterward .
*
* @ return { Promise < PrefetchStatusUpdated > } The promise which
* is resolved with the event object when the event is emitted .
*/
once: function () {
assertBidiIsEnabled();
return new Promise(resolve => {
const remove_handler =
window.test_driver_internal.bidi.speculation
.prefetch_status_updated.on(event => {
resolve(event);
remove_handler();
});
});
}
}
},
/**
* ` emulation < https : //www.w3.org/TR/webdriver-bidi/#module-emulation>`_ module.
*/
emulation: {
/**
* Overrides the geolocation coordinates for the specified
* browsing contexts .
* Matches the ` emulation . setGeolocationOverride
* < https : //w3c.github.io/webdriver-bidi/#command-emulation-setGeolocationOverride>`_
* WebDriver BiDi command .
*
* @ example
* await test_driver . bidi . emulation . set_geolocation_override ( {
* coordinates : {
* latitude : 52 . 51 ,
* longitude : 13 . 39 ,
* accuracy : 0 . 5 ,
* altitude : 34 ,
* altitudeAccuracy : 0 . 75 ,
* heading : 180 ,
* speed : 2 . 77
* }
* } ) ;
*
* @ param { object } params - Parameters for the command .
* @ param { null | object } params . coordinates - The optional
* geolocation coordinates to set . Matches the
* ` emulation . GeolocationCoordinates < https : //w3c.github.io/webdriver-bidi/#commands-emulationsetgeolocationoverride>`_
* value . If null or omitted and the ` params . error ` is set , the
* emulation will be removed . Mutually exclusive with
* ` params . error ` .
* @ param { object } params . error - The optional
* geolocation error to emulate . Matches the
* ` emulation . GeolocationPositionError < https : //w3c.github.io/webdriver-bidi/#commands-emulationsetgeolocationoverride>`_
* value . Mutually exclusive with ` params . coordinates ` .
* @ param { null | Array . < ( Context ) > } [ params . contexts ] The
* optional contexts parameter specifies which browsing contexts
* to set the geolocation override on . It should be either an
* array of Context objects ( window or browsing context id ) , or
* null . If null or omitted , the override will be set on the
* current browsing context .
* @ returns { Promise < void > } Resolves when the geolocation
* override is successfully set .
*/
set_geolocation_override: function (params) {
// Ensure the bidi feature is enabled before calling the internal method
assertBidiIsEnabled();
return window.test_driver_internal.bidi.emulation.set_geolocation_override(
params);
},
/**
* Overrides the locale for the specified browsing contexts .
* Matches the ` emulation . setLocaleOverride
* < https : //www.w3.org/TR/webdriver-bidi/#commands-emulationsetlocaleoverride>`_
* WebDriver BiDi command .
*
* @ example
* await test_driver . bidi . emulation . set_locale_override ( {
* locale : ' de - DE '
* } ) ;
*
* @ param { object } params - Parameters for the command .
* @ param { null | string } params . locale - The optional
* locale to set .
* @ param { null | Array . < ( Context ) > } [ params . contexts ] The
* optional contexts parameter specifies which browsing contexts
* to set the locale override on . It should be either an array
* of Context objects ( window or browsing context id ) , or null .
* If null or omitted , the override will be set on the current
* browsing context .
* @ returns { Promise < void > } Resolves when the locale override
* is successfully set .
*/
set_locale_override: function (params) {
assertBidiIsEnabled();
return window.test_driver_internal.bidi.emulation.set_locale_override(
params);
},
/**
* Overrides the screen orientation for the specified browsing
* contexts .
* Matches the ` emulation . setScreenOrientationOverride
* < https : //www.w3.org/TR/webdriver-bidi/#commands-emulationsetscreenorientationoverride>`_
* WebDriver BiDi command .
*
* @ example
* await test_driver . bidi . emulation . set_screen_orientation_override ( {
* screenOrientation : {
* natural : ' portrait ' ,
* type : ' landscape - secondary '
* }
* } ) ;
*
* @ param { object } params - Parameters for the command .
* @ param { null | object } params . screenOrientation - The optional
* screen orientation . Matches the
* ` emulation . ScreenOrientation < https : //www.w3.org/TR/webdriver-bidi/#cddl-type-emulationscreenorientation>`_
* type . If null or omitted , the override will be removed .
* @ param { null | Array . < ( Context ) > } [ params . contexts ] The
* optional contexts parameter specifies which browsing contexts
* to set the screen orientation override on . It should be
* either an array of Context objects ( window or browsing
* context id ) , or null . If null or omitted , the override will
* be set on the current browsing context .
* @ returns { Promise < void > } Resolves when the screen orientation
* override is successfully set .
*/
set_screen_orientation_override: function (params) {
// Ensure the bidi feature is enabled before calling the internal method
assertBidiIsEnabled();
return window.test_driver_internal.bidi.emulation.set_screen_orientation_override(
params);
},
/**
* Overrides the touch configuration for the specified browsing
* contexts .
* Matches the ` emulation . setTouchOverride
* < https : //w3c.github.io/webdriver-bidi/#command-emulation-setTouchOverride>`_
* WebDriver BiDi command .
*
* @ example
* await test_driver . bidi . emulation . set_touch_override ( {
* maxTouchPoints : 5
* } ) ;
*
* @ param { object } params - Parameters for the command .
* @ param { null | number } params . maxTouchPoints - The
* maximum number of simultaneous touch points to support .
* If null or omitted , the override will be removed .
* @ param { null | Array . < ( Context ) > } [ params . contexts ] The
* optional contexts parameter specifies which browsing contexts
* to set the touch override on . It should be either an array of
* Context objects ( window or browsing context id ) , or null . If
* null or omitted , the override will be set on the current
* browsing context .
* @ returns { Promise < void > } Resolves when the touch
* override is successfully set .
*/
set_touch_override: function (params) {
assertBidiIsEnabled();
return window.test_driver_internal.bidi.emulation.set_touch_override(
params);
},
},
/**
* ` user_agent_client_hints < https : //wicg.github.io/ua-client-hints/#automation>`_ module.
*/
user_agent_client_hints: {
/**
* Overrides the user agent client hints configuration for the specified browsing
* contexts . Matches the ` userAgentClientHints . setClientHintsOverride
* < https : //wicg.github.io/ua-client-hints/#emulation-setclienthintsoverride>`_
* WebDriver BiDi command .
*
* @ param { object } params - Parameters for the command .
* @ param { null | object } params . clientHints - The client hints to override .
* Matches the ` userAgentClientHints . ClientHints ` type .
* If null or omitted , the override will be removed .
* @ param { null | Array . < ( Context ) > } [ params . contexts ] The
* optional contexts parameter specifies which browsing contexts
* to set the override on .
* @ returns { Promise < void > } Resolves when the override is successfully set .
*/
set_client_hints_override: function (params) {
assertBidiIsEnabled();
return window.test_driver_internal.bidi.user_agent_client_hints.set_client_hints_override(
params);
}
},
/**
* ` log < https : //www.w3.org/TR/webdriver-bidi/#module-log>`_ module.
*/
log: {
entry_added: {
/**
* @ typedef { object } LogEntryAdded ` log . entryAdded < https : //www.w3.org/TR/webdriver-bidi/#event-log-entryAdded>`_ event.
*/
/**
* Subscribes to the event . Events will be emitted only if
* there is a subscription for the event . This method does
* not add actual listeners . To listen to the event , use the
* ` on ` or ` once ` methods . The buffered events will be
* emitted before the command promise is resolved .
*
* @ param { object } [ params ] Parameters for the subscription .
* @ param { null | Array . < ( Context ) > } [ params . contexts ] The
* optional contexts parameter specifies which browsing
* contexts to subscribe to the event on . It should be
* either an array of Context objects , or null . If null , the
* event will be subscribed to globally . If omitted , the
* event will be subscribed to on the current browsing
* context .
* @ returns { Promise < ( function ( ) : Promise < void > ) > } Callback
* for unsubscribing from the created subscription .
*/
subscribe: async function (params = {}) {
assertBidiIsEnabled();
return window.test_driver_internal.bidi.log.entry_added.subscribe(params);
},
/**
* Adds an event listener for the event .
*
* @ param { function ( LogEntryAdded ) : void } callback The
* callback to be called when the event is emitted . The
* callback is called with the event object as a parameter .
* @ returns { function ( ) : void } A function that removes the
* added event listener when called .
*/
on: function (callback) {
assertBidiIsEnabled();
return window.test_driver_internal.bidi.log.entry_added.on(callback);
},
/**
* Adds an event listener for the event that is only called
* once and removed afterward .
*
* @ return { Promise < LogEntryAdded > } The promise which is resolved
* with the event object when the event is emitted .
*/
once: function () {
assertBidiIsEnabled();
return new Promise(resolve => {
const remove_handler = window.test_driver_internal.bidi.log.entry_added.on(
event => {
resolve(event);
remove_handler();
});
});
},
}
},
/**
* ` permissions < https : //www.w3.org/TR/permissions/>`_ module.
*/
permissions: {
/**
* Sets the state of a permission
*
* This function causes permission requests and queries for the status
* of a certain permission type ( e . g . " push " , or " background - fetch " ) to
* always return ` ` state ` ` for the specific origin .
*
* Matches the ` permissions . setPermission < https : //w3c.github.io/permissions/#webdriver-bidi-command-permissions-setPermission>`_
* WebDriver BiDi command .
*
* @ example
* await test_driver . bidi . permissions . set_permission ( {
* { name : " geolocation " } ,
* state : " granted " ,
* } ) ;
*
* @ param { object } params - Parameters for the command .
* @ param { PermissionDescriptor } params . descriptor - a ` PermissionDescriptor
* < https : //w3c.github.io/permissions/#dom-permissiondescriptor>`_
* or derived object .
* @ param { PermissionState } params . state - a ` PermissionState
* < https : //w3c.github.io/permissions/#dom-permissionstate>`_
* value .
* @ param { string } [ params . origin ] - an optional top - level ` origin ` string to set the
* permission for . If omitted , the permission is set for the
* current window ' s origin .
* @ param { string } [ params . embeddedOrigin ] - an optional embedded ` origin ` string to set the
* permission for . If omitted , the top - level ` origin ` is used as the
* embedded origin .
* @ returns { Promise } fulfilled after the permission is set , or rejected if setting
* the permission fails .
*/
set_permission: function (params) {
assertBidiIsEnabled();
return window.test_driver_internal.bidi.permissions.set_permission(
params);
}
}
},
/**
* Set the context in which testharness . js is loaded
*
* @ param { WindowProxy } context - the window containing testharness . js
**/
set_test_context: function (context) {
if (window.test_driver_internal.set_test_context) {
window.test_driver_internal.set_test_context(context);
}
testharness_context = context;
},
/**
* postMessage to the context containing testharness . js
*
* @ param { Object } msg - the data to POST
**/
message_test: function (msg) {
let target = testharness_context;
if (testharness_context === null ) {
target = window;
}
target.postMessage(msg, "*" );
},
/**
* Trigger user interaction in order to grant additional privileges to
* a provided function .
*
* See ` Tracking user activation
* < https : //html.spec.whatwg.org/multipage/interaction.html#tracking-user-activation>`_.
*
* @ example
* var mediaElement = document . createElement ( ' video ' ) ;
*
* test_driver . bless ( ' initiate media playback ' , function ( ) {
* mediaElement . play ( ) ;
* } ) ;
*
* @ param { String } intent - a description of the action which must be
* triggered by user interaction
* @ param { Function } action - code requiring escalated privileges
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } fulfilled following user interaction and
* execution of the provided ` action ` function ;
* rejected if interaction fails or the provided
* function throws an error
*/
bless: function (intent, action, context=null ) {
let contextDocument = context ? context.document : document;
var button = contextDocument.createElement("button" );
button.innerHTML = "This test requires user interaction.<br />" +
"Please click here to allow " + intent + "." ;
button.id = "wpt-test-driver-bless-" + (idCounter += 1 );
const elem = contextDocument.body || contextDocument.documentElement;
elem.appendChild(button);
let wait_click = new Promise(resolve => button.addEventListener("click" , resolve));
return test_driver.click(button)
.then(() => wait_click)
.then(() => {
button.remove();
if (typeof action === "function" ) {
return action();
}
return null ;
});
},
/**
* Triggers a user - initiated mouse click .
*
* If ` ` element ` ` isn ' t inside the viewport , it will be
* scrolled into view before the click occurs .
*
* If ` ` element ` ` is from a different browsing context , the
* command will be run in that context .
*
* Matches the behaviour of the ` Element Click
* < https : //w3c.github.io/webdriver/#element-click>`_
* WebDriver command .
*
* * * Note : * * If the element to be clicked does not have a
* unique ID , the document must not have any DOM mutations
* made between the function being called and the promise
* settling .
*
* @ param { Element } element - element to be clicked
* @ returns { Promise } fulfilled after click occurs , or rejected in
* the cases the WebDriver command errors
*/
click: function (element) {
if (!inView(element)) {
element.scrollIntoView({behavior: "instant" ,
block: "end" ,
inline: "nearest" });
}
var pointerInteractablePaintTree = getPointerInteractablePaintTree(element);
if (pointerInteractablePaintTree.length === 0 ||
!element.contains(pointerInteractablePaintTree[0 ])) {
return Promise.reject(new Error("element click intercepted error" ));
}
var rect = element.getClientRects()[0 ];
var centerPoint = getInViewCenterPoint(rect);
return window.test_driver_internal.click(element,
{x: centerPoint[0 ],
y: centerPoint[1 ]});
},
/**
* Deletes all cookies .
*
* Matches the behaviour of the ` Delete All Cookies
* < https : //w3c.github.io/webdriver/#delete-all-cookies>`_
* WebDriver command .
*
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } fulfilled after cookies are deleted , or rejected in
* the cases the WebDriver command errors
*/
delete_all_cookies: function (context=null ) {
return window.test_driver_internal.delete_all_cookies(context);
},
/**
* Get details for all cookies in the current context .
* See https : //w3c.github.io/webdriver/#get-all-cookies
*
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } Returns an array of cookies objects as defined in the spec :
* https : //w3c.github.io/webdriver/#cookies
*/
get_all_cookies: function (context=null ) {
return window.test_driver_internal.get_all_cookies(context);
},
/**
* Get details for a cookie in the current context by name if it exists .
* See https : //w3c.github.io/webdriver/#get-named-cookie
*
* @ param { String } name - The name of the cookie to get .
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } Returns the matching cookie as defined in the spec :
* https : //w3c.github.io/webdriver/#cookies
* Rejected if no such cookie exists .
*/
get_named_cookie: async function (name, context=null ) {
let cookie = await window.test_driver_internal.get_named_cookie(name, context);
if (!cookie) {
throw new Error("no such cookie" );
}
return cookie;
},
/**
* Get Computed Label for an element .
*
* This matches the behaviour of the
* ` Get Computed Label
* < https : //w3c.github.io/webdriver/#dfn-get-computed-label>`_
* WebDriver command .
*
* @ param { Element } element
* @ returns { Promise } fulfilled after the computed label is returned , or
* rejected in the cases the WebDriver command errors
*/
get_computed_label: async function (element) {
let label = await window.test_driver_internal.get_computed_label(element);
return label;
},
/**
* Get Computed Role for an element .
*
* This matches the behaviour of the
* ` Get Computed Label
* < https : //w3c.github.io/webdriver/#dfn-get-computed-role>`_
* WebDriver command .
*
* @ param { Element } element
* @ returns { Promise } fulfilled after the computed role is returned , or
* rejected in the cases the WebDriver command errors
*/
get_computed_role: async function (element) {
let role = await window.test_driver_internal.get_computed_role(element);
return role;
},
/**
* Get accessibility properties for a DOM element .
*
* @ param { Element } element
* @ returns { Promise } fulfilled after the accessibility properties are
* returned , or rejected in the cases the WebDriver
* command errors
*/
get_accessibility_properties_for_element: async function (element) {
assertTestIsTentative();
let acc = await window.test_driver_internal.get_accessibility_properties_for_element(element);
return acc;
},
/**
* Get properties for an accessibility node .
*
* @ param { String } accId
* @ returns { Promise } fulfilled after the accessibility properties are
* returned , or rejected in the cases the WebDriver
* command errors
*/
get_accessibility_properties_for_accessibility_node: async function (accId) {
assertTestIsTentative();
let acc = await window.test_driver_internal.get_accessibility_properties_for_accessibility_node(accId);
return acc;
},
/**
* Send keys to an element .
*
* If ` ` element ` ` isn ' t inside the
* viewport , it will be scrolled into view before the click
* occurs .
*
* If ` ` element ` ` is from a different browsing context , the
* command will be run in that context . The test must not depend
* on the ` ` window . name ` ` property being unset on the target
* window .
*
* To send special keys , send the respective key ' s codepoint ,
* as defined by ` WebDriver
* < https : //w3c.github.io/webdriver/#keyboard-actions>`_. For
* example , the " tab " key is represented as " ` ` \ uE004 ` ` " .
*
* * * Note : * * these special - key codepoints are not necessarily
* what you would expect . For example , < kbd > Esc < / kbd > is the
* invalid Unicode character ` ` \ uE00C ` ` , not the ` ` \ u001B ` ` Escape
* character from ASCII .
*
* This matches the behaviour of the
* ` Send Keys
* < https : //w3c.github.io/webdriver/#element-send-keys>`_
* WebDriver command .
*
* * * Note : * * If the element to be clicked does not have a
* unique ID , the document must not have any DOM mutations
* made between the function being called and the promise
* settling .
*
* @ param { Element } element - element to send keys to
* @ param { String } keys - keys to send to the element
* @ returns { Promise } fulfilled after keys are sent , or rejected in
* the cases the WebDriver command errors
*/
send_keys: function (element, keys) {
if (!inView(element)) {
element.scrollIntoView({behavior: "instant" ,
block: "end" ,
inline: "nearest" });
}
return window.test_driver_internal.send_keys(element, keys);
},
/**
* Freeze the current page
*
* The freeze function transitions the page from the HIDDEN state to
* the FROZEN state as described in ` Lifecycle API for Web Pages
* < https : //github.com/WICG/page-lifecycle/blob/master/README.md>`_.
*
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } fulfilled after the freeze request is sent , or rejected
* in case the WebDriver command errors
*/
freeze: function (context=null ) {
return window.test_driver_internal.freeze();
},
/**
* Minimizes the browser window .
*
* Matches the behaviour of the ` Minimize
* < https : //www.w3.org/TR/webdriver/#minimize-window>`_
* WebDriver command
*
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } fulfilled with the previous ` WindowRect
* < https : //www.w3.org/TR/webdriver/#dfn-windowrect-object>`_
* value , after the window is minimized .
*/
minimize_window: function (context=null ) {
return window.test_driver_internal.minimize_window(context);
},
/**
* Restore the window from minimized / maximized state to a given rect .
*
* Matches the behaviour of the ` Set Window Rect
* < https : //www.w3.org/TR/webdriver/#set-window-rect>`_
* WebDriver command
*
* @ param { Object } rect - A ` WindowRect
* < https : //www.w3.org/TR/webdriver/#dfn-windowrect-object>`_
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } fulfilled after the window is restored to the given rect .
*/
set_window_rect: function (rect, context=null ) {
return window.test_driver_internal.set_window_rect(rect, context);
},
/**
* Gets a rect with the size and position on the screen from the current window state .
*
* Matches the behaviour of the ` Get Window Rect
* < https : //www.w3.org/TR/webdriver/#get-window-rect>`_
* WebDriver command
*
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } fulfilled after the window rect is returned , or rejected
* in cases the WebDriver command returns errors . Returns a
* ` WindowRect < https : //www.w3.org/TR/webdriver/#dfn-windowrect-object>`_
*/
get_window_rect: function (context=null ) {
return window.test_driver_internal.get_window_rect(context);
},
/**
* Send a sequence of actions
*
* This function sends a sequence of actions to perform .
*
* Matches the behaviour of the ` Actions
* < https : //w3c.github.io/webdriver/#actions>`_ feature in
* WebDriver .
*
* Authors are encouraged to use the
* : js : class : ` test_driver . Actions ` builder rather than
* invoking this API directly .
*
* @ param { Array } actions - an array of actions . The format is
* the same as the actions property
* of the ` Perform Actions
* < https : //w3c.github.io/webdriver/#perform-actions>`_
* WebDriver command . Each element is
* an object representing an input
* source and each input source
* itself has an actions property
* detailing the behaviour of that
* source at each timestep ( or
* tick ) . Authors are not expected to
* construct the actions sequence by
* hand , but to use the builder api
* provided in testdriver - actions . js
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } fulfilled after the actions are performed , or rejected in
* the cases the WebDriver command errors
*/
action_sequence: function (actions, context=null ) {
return window.test_driver_internal.action_sequence(actions, context);
},
/**
* Generates a test report on the current page
*
* The generate_test_report function generates a report ( to be
* observed by ReportingObserver ) for testing purposes .
*
* Matches the ` Generate Test Report
* < https : //w3c.github.io/reporting/#generate-test-report-command>`_
* WebDriver command .
*
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } fulfilled after the report is generated , or
* rejected if the report generation fails
*/
generate_test_report: function (message, context=null ) {
return window.test_driver_internal.generate_test_report(message, context);
},
/**
* Sets the state of a permission
*
* This function causes permission requests and queries for the status
* of a certain permission type ( e . g . " push " , or " background - fetch " ) to
* always return ` ` state ` ` .
*
* Matches the ` Set Permission
* < https : //w3c.github.io/permissions/#set-permission-command>`_
* WebDriver command .
*
* @ example
* await test_driver . set_permission ( { name : " background - fetch " } , " denied " ) ;
* await test_driver . set_permission ( { name : " push " , userVisibleOnly : true } , " granted " ) ;
*
* @ param { PermissionDescriptor } descriptor - a ` PermissionDescriptor
* < https : //w3c.github.io/permissions/#dom-permissiondescriptor>`_
* or derived object .
* @ param { PermissionState } state - a ` PermissionState
* < https : //w3c.github.io/permissions/#dom-permissionstate>`_
* value .
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
* @ returns { Promise } fulfilled after the permission is set , or rejected if setting the
* permission fails
*/
set_permission: function (descriptor, state, context=null ) {
let permission_params = {
descriptor,
state,
};
return window.test_driver_internal.set_permission(permission_params, context);
},
/**
* Creates a virtual authenticator
*
* This function creates a virtual authenticator for use with
* the U2F and WebAuthn APIs .
*
* Matches the ` Add Virtual Authenticator
* < https : //w3c.github.io/webauthn/#sctn-automation-add-virtual-authenticator>`_
* WebDriver command .
*
* @ param { Object } config - an ` Authenticator Configuration
* < https : //w3c.github.io/webauthn/#authenticator-configuration>`_
* object
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } fulfilled after the authenticator is added , or
* rejected in the cases the WebDriver command
* errors . Returns the ID of the authenticator
*/
add_virtual_authenticator: function (config, context=null ) {
return window.test_driver_internal.add_virtual_authenticator(config, context);
},
/**
* Removes a virtual authenticator
*
* This function removes a virtual authenticator that has been
* created by : js : func : ` add_virtual_authenticator ` .
*
* Matches the ` Remove Virtual Authenticator
* < https : //w3c.github.io/webauthn/#sctn-automation-remove-virtual-authenticator>`_
* WebDriver command .
*
* @ param { String } authenticator_id - the ID of the authenticator to be
* removed .
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } fulfilled after the authenticator is removed , or
* rejected in the cases the WebDriver command
* errors
*/
remove_virtual_authenticator: function (authenticator_id, context=null ) {
return window.test_driver_internal.remove_virtual_authenticator(authenticator_id, context);
},
/**
* Adds a credential to a virtual authenticator
*
* Matches the ` Add Credential
* < https : //w3c.github.io/webauthn/#sctn-automation-add-credential>`_
* WebDriver command .
*
* @ param { String } authenticator_id - the ID of the authenticator
* @ param { Object } credential - A ` Credential Parameters
* < https : //w3c.github.io/webauthn/#credential-parameters>`_
* object
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } fulfilled after the credential is added , or
* rejected in the cases the WebDriver command
* errors
*/
add_credential: function (authenticator_id, credential, context=null ) {
return window.test_driver_internal.add_credential(authenticator_id, credential, context);
},
/**
* Gets all the credentials stored in an authenticator
*
* This function retrieves all the credentials ( added via the U2F API ,
* WebAuthn , or the add_credential function ) stored in a virtual
* authenticator
*
* Matches the ` Get Credentials
* < https : //w3c.github.io/webauthn/#sctn-automation-get-credentials>`_
* WebDriver command .
*
* @ param { String } authenticator_id - the ID of the authenticator
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } fulfilled after the credentials are
* returned , or rejected in the cases the
* WebDriver command errors . Returns an
* array of ` Credential Parameters
* < https : //w3c.github.io/webauthn/#credential-parameters>`_
*/
get_credentials: function (authenticator_id, context=null ) {
return window.test_driver_internal.get_credentials(authenticator_id, context=null );
},
/**
* Remove a credential stored in an authenticator
*
* Matches the ` Remove Credential
* < https : //w3c.github.io/webauthn/#sctn-automation-remove-credential>`_
* WebDriver command .
*
* @ param { String } authenticator_id - the ID of the authenticator
* @ param { String } credential_id - the ID of the credential
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } fulfilled after the credential is removed , or
* rejected in the cases the WebDriver command
* errors .
*/
remove_credential: function (authenticator_id, credential_id, context=null ) {
return window.test_driver_internal.remove_credential(authenticator_id, credential_id, context);
},
/**
* Removes all the credentials stored in a virtual authenticator
*
* Matches the ` Remove All Credentials
* < https : //w3c.github.io/webauthn/#sctn-automation-remove-all-credentials>`_
* WebDriver command .
*
* @ param { String } authenticator_id - the ID of the authenticator
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } fulfilled after the credentials are removed , or
* rejected in the cases the WebDriver command
* errors .
*/
remove_all_credentials: function (authenticator_id, context=null ) {
return window.test_driver_internal.remove_all_credentials(authenticator_id, context);
},
/**
* Sets the User Verified flag on an authenticator
*
* Sets whether requests requiring user verification will succeed or
* fail on a given virtual authenticator
*
* Matches the ` Set User Verified
* < https : //w3c.github.io/webauthn/#sctn-automation-set-user-verified>`_
* WebDriver command .
*
* @ param { String } authenticator_id - the ID of the authenticator
* @ param { boolean } uv - the User Verified flag
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*/
set_user_verified: function (authenticator_id, uv, context=null ) {
return window.test_driver_internal.set_user_verified(authenticator_id, uv, context);
},
/**
* Sets the storage access rule for an origin when embedded
* in a third - party context .
*
* Matches the ` Set Storage Access
* < https : //privacycg.github.io/storage-access/#set-storage-access-command>`_
* WebDriver command .
*
* @ param { String } origin - A third - party origin to block or allow .
* May be " * " to indicate all origins .
* @ param { String } embedding_origin - an embedding ( first - party ) origin
* on which { origin } ' s access should
* be blocked or allowed .
* May be " * " to indicate all origins .
* @ param { String } state - The storage access setting .
* Must be either " allowed " or " blocked " .
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } Fulfilled after the storage access rule has been
* set , or rejected if setting the rule fails .
*/
set_storage_access: function (origin, embedding_origin, state, context=null ) {
if (state !== "allowed" && state !== "blocked" ) {
throw new Error("storage access status must be 'allowed' or 'blocked'" );
}
const blocked = state === "blocked" ;
return window.test_driver_internal.set_storage_access(origin, embedding_origin, blocked, context);
},
/**
* Sets the current transaction automation mode for Secure Payment
* Confirmation .
*
* This function places ` Secure Payment
* Confirmation < https : //w3c.github.io/secure-payment-confirmation>`_ into
* an automated ' autoAccept ' or ' autoReject ' mode , to allow testing
* without user interaction with the transaction UX prompt .
*
* Matches the ` Set SPC Transaction Mode
* < https : //w3c.github.io/secure-payment-confirmation/#sctn-automation-set-spc-transaction-mode>`_
* WebDriver command .
*
* @ example
* await test_driver . set_spc_transaction_mode ( " autoaccept " ) ;
* test . add_cleanup ( ( ) = > {
* return test_driver . set_spc_transaction_mode ( " none " ) ;
* } ) ;
*
* // Assumption: `request` is a PaymentRequest with a secure-payment-confirmation
* // payment method.
* const response = await request . show ( ) ;
*
* @ param { String } mode - The ` transaction mode
* < https : //w3c.github.io/secure-payment-confirmation/#enumdef-transactionautomationmode>`_
* to set . Must be one of " ` ` none ` ` " ,
* " ` ` autoAccept ` ` " , or
* " ` ` autoReject ` ` " .
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } Fulfilled after the transaction mode has been set ,
* or rejected if setting the mode fails .
*/
set_spc_transaction_mode: function (mode, context=null ) {
return window.test_driver_internal.set_spc_transaction_mode(mode, context);
},
/**
* Sets the current registration automation mode for Register Protocol Handlers .
*
* This function places ` Register Protocol Handlers
* < https : //html.spec.whatwg.org/multipage/system-state.html#custom-handlers>`_ into
* an automated ' autoAccept ' or ' autoReject ' mode , to allow testing
* without user interaction with the transaction UX prompt .
*
* Matches the ` Set Register Protocol Handler Mode
* < https : //html.spec.whatwg.org/multipage/system-state.html#set-rph-registration-mode>`_
* WebDriver command .
*
* @ example
* await test_driver . set_rph_registration_mode ( " autoAccept " ) ;
* test . add_cleanup ( ( ) = > {
* return test_driver . set_rph_registration_mode ( " none " ) ;
* } ) ;
*
* navigator . registerProtocolHandler ( ' web + soup ' , ' soup ? url = % s ' ) ;
*
* @ param { String } mode - The ` registration mode
* < https : //html.spec.whatwg.org/multipage/system-state.html#registerprotocolhandler()-automation-mode>`_
* to set . Must be one of " ` ` none ` ` " ,
* " ` ` autoAccept ` ` " , or
* " ` ` autoReject ` ` " .
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } Fulfilled after the transaction mode has been set ,
* or rejected if setting the mode fails .
*/
set_rph_registration_mode: function (mode, context=null ) {
return window.test_driver_internal.set_rph_registration_mode(mode, context);
},
/**
* Cancels the Federated Credential Management dialog
*
* Matches the ` Cancel dialog
* < https : //fedidcg.github.io/FedCM/#webdriver-canceldialog>`_
* WebDriver command .
*
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } Fulfilled after the dialog is canceled , or rejected
* in case the WebDriver command errors
*/
cancel_fedcm_dialog: function (context=null ) {
return window.test_driver_internal.cancel_fedcm_dialog(context);
},
/**
* Clicks a button on the Federated Credential Management dialog
*
* Matches the ` Click dialog button
* < https : //fedidcg.github.io/FedCM/#webdriver-clickdialogbutton>`_
* WebDriver command .
*
* @ param { String } dialog_button - String enum representing the dialog button to click .
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } Fulfilled after the button is clicked ,
* or rejected in case the WebDriver command errors
*/
click_fedcm_dialog_button: function (dialog_button, context=null ) {
return window.test_driver_internal.click_fedcm_dialog_button(dialog_button, context);
},
/**
* Selects an account from the Federated Credential Management dialog
*
* Matches the ` Select account
* < https : //fedidcg.github.io/FedCM/#webdriver-selectaccount>`_
* WebDriver command .
*
* @ param { number } account_index - Index of the account to select .
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } Fulfilled after the account is selected ,
* or rejected in case the WebDriver command errors
*/
select_fedcm_account: function (account_index, context=null ) {
return window.test_driver_internal.select_fedcm_account(account_index, context);
},
/**
* Gets the account list from the Federated Credential Management dialog
*
* Matches the ` Account list
* < https : //fedidcg.github.io/FedCM/#webdriver-accountlist>`_
* WebDriver command .
*
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } fulfilled after the account list is returned , or
* rejected in case the WebDriver command errors
*/
get_fedcm_account_list: function (context=null ) {
return window.test_driver_internal.get_fedcm_account_list(context);
},
/**
* Gets the title of the Federated Credential Management dialog
*
* Matches the ` Get title
* < https : //fedidcg.github.io/FedCM/#webdriver-gettitle>`_
* WebDriver command .
*
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } Fulfilled after the title is returned , or rejected
* in case the WebDriver command errors
*/
get_fedcm_dialog_title: function (context=null ) {
return window.test_driver_internal.get_fedcm_dialog_title(context);
},
/**
* Gets the type of the Federated Credential Management dialog
*
* Matches the ` Get dialog type
* < https : //fedidcg.github.io/FedCM/#webdriver-getdialogtype>`_
* WebDriver command .
*
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } Fulfilled after the dialog type is returned , or
* rejected in case the WebDriver command errors
*/
get_fedcm_dialog_type: function (context=null ) {
return window.test_driver_internal.get_fedcm_dialog_type(context);
},
/**
* Sets whether promise rejection delay is enabled for the Federated Credential Management dialog
*
* Matches the ` Set delay enabled
* < https : //fedidcg.github.io/FedCM/#webdriver-setdelayenabled>`_
* WebDriver command .
*
* @ param { boolean } enabled - Whether to delay FedCM promise rejection .
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } Fulfilled after the delay has been enabled or disabled ,
* or rejected in case the WebDriver command errors
*/
set_fedcm_delay_enabled: function (enabled, context=null ) {
return window.test_driver_internal.set_fedcm_delay_enabled(enabled, context);
},
/**
* Resets the Federated Credential Management dialog ' s cooldown
*
* Matches the ` Reset cooldown
* < https : //fedidcg.github.io/FedCM/#webdriver-resetcooldown>`_
* WebDriver command .
*
* @ param { WindowProxy } context - Browsing context in which
* to run the call , or null for the current
* browsing context .
*
* @ returns { Promise } Fulfilled after the cooldown has been reset ,
* or rejected in case the WebDriver command errors
*/
reset_fedcm_cooldown: function (context=null ) {
return window.test_driver_internal.reset_fedcm_cooldown(context);
},
/**
* Creates a virtual sensor for use with the Generic Sensors APIs .
*
* Matches the ` Create Virtual Sensor
* < https : //w3c.github.io/sensors/#create-virtual-sensor-command>`_
* WebDriver command .
*
* Once created , a virtual sensor is available to all navigables under
* the same top - level traversable ( i . e . all frames in the same page ,
* regardless of origin ) .
*
* @ param { String } sensor_type - A ` virtual sensor type
* < https : //w3c.github.io/sensors/#virtual-sensor-metadata-virtual-sensor-type>`_
* such as " accelerometer " .
* @ param { Object } [ sensor_params = { } ] - Optional parameters described
* in ` Create Virtual Sensor
* < https : //w3c.github.io/sensors/#create-virtual-sensor-command>`_.
* @ param { WindowProxy } [ context = null ] - Browsing context in which to
* run the call , or null for the
* current browsing context .
*
* @ returns { Promise } Fulfilled when virtual sensor is created .
* Rejected in case the WebDriver command errors out
* ( including if a virtual sensor of the same type
* already exists ) .
*/
create_virtual_sensor: function (sensor_type, sensor_params={}, context=null ) {
return window.test_driver_internal.create_virtual_sensor(sensor_type, sensor_params, context);
},
/**
* Causes a virtual sensor to report a new reading to any connected
* platform sensor .
*
* Matches the ` Update Virtual Sensor Reading
* < https : //w3c.github.io/sensors/#update-virtual-sensor-reading-command>`_
* WebDriver command .
*
* Note : The ` ` Promise ` ` it returns may fulfill before or after a
* " reading " event is fired . When using
* : js : func : ` EventWatcher . wait_for ` , it is necessary to take this into
* account :
*
* Note : New values may also be discarded due to the checks in ` update
* latest reading
* < https : //w3c.github.io/sensors/#update-latest-reading>`_.
*
* @ example
* // Avoid races between EventWatcher and update_virtual_sensor().
* // This assumes you are sure this reading will be processed (see
* // the example below otherwise).
* const reading = { x : 1 , y : 2 , z : 3 } ;
* await Promise . all ( [
* test_driver . update_virtual_sensor ( ' gyroscope ' , reading ) ,
* watcher . wait_for ( ' reading ' )
* ] ) ;
*
* @ example
* // Do not wait forever if you are not sure the reading will be
* // processed.
* const readingPromise = watcher . wait_for ( ' reading ' ) ;
* const timeoutPromise = new Promise ( resolve = > {
* t . step_timeout ( ( ) = > resolve ( ' TIMEOUT ' , 3000 ) )
* } ) ;
*
* const reading = { x : 1 , y : 2 , z : 3 } ;
* await test_driver . update_virtual_sensor ( ' gyroscope ' , ' reading ' ) ;
*
* const value =
* await Promise . race ( [ timeoutPromise , readingPromise ] ) ;
* if ( value ! = = ' TIMEOUT ' ) {
* // Do something. The "reading" event was fired.
* }
*
* @ param { String } sensor_type - A ` virtual sensor type
* < https : //w3c.github.io/sensors/#virtual-sensor-metadata-virtual-sensor-type>`_
* such as " accelerometer " .
* @ param { Object } reading - An Object describing a reading in a format
* dependent on ` ` sensor_type ` ` ( e . g . ` ` { x :
* 1 , y : 2 , z : 3 } ` ` or ` ` { illuminance : 42
* } ` ` ) .
* @ param { WindowProxy } [ context = null ] - Browsing context in which to
* run the call , or null for the
* current browsing context .
*
* @ returns { Promise } Fulfilled after the reading update reaches the
* virtual sensor . Rejected in case the WebDriver
* command errors out ( including if a virtual sensor
* of the given type does not exist ) .
*/
update_virtual_sensor: function (sensor_type, reading, context=null ) {
return window.test_driver_internal.update_virtual_sensor(sensor_type, reading, context);
},
/**
* Triggers the removal of a virtual sensor if it exists .
*
* Matches the ` Delete Virtual Sensor
* < https : //w3c.github.io/sensors/#delete-virtual-sensor-command>`_
* WebDriver command .
*
* @ param { String } sensor_type - A ` virtual sensor type
* < https : //w3c.github.io/sensors/#virtual-sensor-metadata-virtual-sensor-type>`_
* such as " accelerometer " .
* @ param { WindowProxy } [ context = null ] - Browsing context in which to
* run the call , or null for the
* current browsing context .
*
* @ returns { Promise } Fulfilled after the virtual sensor has been
* removed or if a sensor of the given type does not
* exist . Rejected in case the WebDriver command
* errors out .
*/
remove_virtual_sensor: function (sensor_type, context=null ) {
return window.test_driver_internal.remove_virtual_sensor(sensor_type, context);
},
/**
* Returns information about a virtual sensor .
*
* Matches the ` Get Virtual Sensor Information
* < https : //w3c.github.io/sensors/#get-virtual-sensor-information-command>`_
* WebDriver command .
*
* @ param { String } sensor_type - A ` virtual sensor type
* < https : //w3c.github.io/sensors/#virtual-sensor-metadata-virtual-sensor-type>`_
* such as " accelerometer " .
* @ param { WindowProxy } [ context = null ] - Browsing context in which to
* run the call , or null for the
* current browsing context .
*
* @ returns { Promise } Fulfilled with an Object with the properties
* described in ` Get Virtual Sensor Information
* < https : //w3c.github.io/sensors/#get-virtual-sensor-information-command>`_.
* Rejected in case the WebDriver command errors out
* ( including if a virtual sensor of the given type
* does not exist ) .
*/
get_virtual_sensor_information: function (sensor_type, context=null ) {
return window.test_driver_internal.get_virtual_sensor_information(sensor_type, context);
},
/**
* Overrides device posture set by hardware .
*
* Matches the ` Set device posture
* < https : //w3c.github.io/device-posture/#set-device-posture>`_
* WebDriver command .
*
* @ param { String } posture - A ` DevicePostureType
* < https : //w3c.github.io/device-posture/#dom-deviceposturetype>`_
* either " continuous " or " folded " .
* @ param { WindowProxy } [ context = null ] - Browsing context in which to
* run the call , or null for the
* current browsing context .
*
* @ returns { Promise } Fulfilled when device posture is set .
* Rejected in case the WebDriver command errors out
* ( including if a device posture of the given type
* does not exist ) .
*/
set_device_posture: function (posture, context=null ) {
return window.test_driver_internal.set_device_posture(posture, context);
},
/**
* Removes device posture override and returns device posture control
* back to hardware .
*
* Matches the ` Clear device posture
* < https : //w3c.github.io/device-posture/#clear-device-posture>`_
* WebDriver command .
*
* @ param { WindowProxy } [ context = null ] - Browsing context in which to
* run the call , or null for the
* current browsing context .
*
* @ returns { Promise } Fulfilled after the device posture override has
* been removed . Rejected in case the WebDriver
* command errors out .
*/
clear_device_posture: function (context=null ) {
return window.test_driver_internal.clear_device_posture(context);
},
/**
* Runs the ` bounce tracking timer algorithm
* < https : //privacycg.github.io/nav-tracking-mitigations/#bounce-tracking-timer>`_,
* which removes all hosts from the stateful bounce tracking map , without
* regard for the bounce tracking grace period and returns a list of the
* deleted hosts .
*
* Matches the ` Run Bounce Tracking Mitigations
* < https : //privacycg.github.io/nav-tracking-mitigations/#run-bounce-tracking-mitigations-command>`_
* WebDriver command .
*
* @ param { WindowProxy } [ context = null ] - Browsing context in which to
* run the call , or null for the
* current browsing context .
* @ returns { Promise } Fulfilled after the bounce tracking timer
* algorithm has finished running . Returns an array
* of all hosts that were in the stateful bounce
* tracking map before deletion occurred .
*/
run_bounce_tracking_mitigations: function (context = null ) {
return window.test_driver_internal.run_bounce_tracking_mitigations(context);
},
/**
* Creates a virtual pressure source .
*
* Matches the ` Create virtual pressure source
* < https : //w3c.github.io/compute-pressure/#create-virtual-pressure-source>`_
* WebDriver command .
*
* @ param { String } source_type - A ` virtual pressure source type
* < https : //w3c.github.io/compute-pressure/#dom-pressuresource>`_
* such as " cpu " .
* @ param { Object } [ metadata = { } ] - Optional parameters described
* in ` Create virtual pressure source
* < https : //w3c.github.io/compute-pressure/#create-virtual-pressure-source>`_.
* @ param { WindowProxy } [ context = null ] - Browsing context in which to
* run the call , or null for the
* current browsing context .
*
* @ returns { Promise } Fulfilled when virtual pressure source is created .
* Rejected in case the WebDriver command errors out
* ( including if a virtual pressure source of the
* same type already exists ) .
*/
create_virtual_pressure_source: function (source_type, metadata={}, context=null ) {
return window.test_driver_internal.create_virtual_pressure_source(source_type, metadata, context);
},
/**
* Causes a virtual pressure source to report a new reading .
*
* Matches the ` Update virtual pressure source
* < https : //w3c.github.io/compute-pressure/?experimental=1#update-virtual-pressure-source>`_
* WebDriver command .
*
* @ param { String } source_type - A ` virtual pressure source type
* < https : //w3c.github.io/compute-pressure/#dom-pressuresource>`_
* such as " cpu " .
* @ param { String } sample - A ` virtual pressure state
* < https : //w3c.github.io/compute-pressure/#dom-pressurestate>`_
* such as " critical " .
* @ param { number } own_contribution_estimate - Optional , A ` virtual own contribution estimate `
* < https : //w3c.github.io/compute-pressure/?experimental=1#the-owncontributionestimate-attribute>`_
* @ param { WindowProxy } [ context = null ] - Browsing context in which to
* run the call , or null for the
* current browsing context .
*
* @ returns { Promise } Fulfilled after the reading update reaches the
* virtual pressure source . Rejected in case the
* WebDriver command errors out ( including if a
* virtual pressure source of the given type does not
* exist ) .
*/
update_virtual_pressure_source: function (source_type, sample, own_contribution_estimate, context=null ) {
return window.test_driver_internal.update_virtual_pressure_source(source_type, sample, own_contribution_estimate, context);
},
/**
* Removes created virtual pressure source .
*
* Matches the ` Delete virtual pressure source
* < https : //w3c.github.io/compute-pressure/#delete-virtual-pressure-source>`_
* WebDriver command .
*
* @ param { String } source_type - A ` virtual pressure source type
* < https : //w3c.github.io/compute-pressure/#dom-pressuresource>`_
* such as " cpu " .
* @ param { WindowProxy } [ context = null ] - Browsing context in which to
* run the call , or null for the
* current browsing context .
*
* @ returns { Promise } Fulfilled after the virtual pressure source has
* been removed or if a pressure source of the given
* type does not exist . Rejected in case the
* WebDriver command errors out .
*/
remove_virtual_pressure_source: function (source_type, context=null ) {
return window.test_driver_internal.remove_virtual_pressure_source(source_type, context);
},
/**
* Sets which hashes are considered k - anonymous for the Protected
* Audience interest group with specified ` owner ` and ` name ` .
*
* Matches the ` Set Protected Audience K - Anonymity
* < https : //wicg.github.io/turtledove/#sctn-automation-set-protected-audience-k-anonymity>
* WebDriver command .
*
* @ param { String } owner - Origin of the owner of the interest group
* to modify
* @ param { String } name - Name of the interest group to modify
* @ param { Array } hashes - An array of strings , each of which is a
* base64 ecoded hash to consider k - anonymous .
*
* @ returns { Promise } Fulfilled after the k - anonymity status for the
* specified Protected Audience interest group has
* been updated .
*
*/
set_protected_audience_k_anonymity: function (owner, name, hashes, context = null ) {
return window.test_driver_internal.set_protected_audience_k_anonymity(owner, name, hashes, context);
},
/**
* Overrides the display features provided by the hardware so the viewport segments
* can be emulated .
*
* Matches the ` Set display features
* < https : //drafts.csswg.org/css-viewport/#set-display-features>`_
* WebDriver command .
*
* @ param { Array } features - An array of ` DisplayFeatureOverride
* < https : //drafts.csswg.org/css-viewport/#display-feature-override>`.
* @ param { WindowProxy } [ context = null ] - Browsing context in which to
* run the call , or null for the
* current browsing context .
*
* @ returns { Promise } Fulfilled when the display features are set .
* Rejected in case the WebDriver command errors out
* ( including if the array is malformed ) .
*/
set_display_features: function (features, context=null ) {
return window.test_driver_internal.set_display_features(features, context);
},
/**
* Removes display features override and returns the control
* back to hardware .
*
* Matches the ` Clear display features
* < https : //drafts.csswg.org/css-viewport/#clear-display-features>`_
* WebDriver command .
*
* @ param { WindowProxy } [ context = null ] - Browsing context in which to
* run the call , or null for the
* current browsing context .
*
* @ returns { Promise } Fulfilled after the display features override has
* been removed . Rejected in case the WebDriver
* command errors out .
*/
clear_display_features: function (context=null ) {
return window.test_driver_internal.clear_display_features(context);
},
/**
* Gets the current globally - applied privacy control status
*
* @ returns { Promise } Fulfils with an object with boolean property ` gpc `
* that encodes the current " do not sell or share "
* signal the browser is configured to convey .
*/
get_global_privacy_control: function () {
return window.test_driver_internal.get_global_privacy_control();
},
/**
* Gets the current globally - applied privacy control status
*
* @ param { bool } newValue - The a boolean that is true if the browers
* should convey a " do not sell or share " signal
* and false otherwise
*
* @ returns { Promise } Fulfils with an object with boolean property ` gpc `
* that encodes the new " do not sell or share "
* after applying the new value .
*/
set_global_privacy_control: function (newValue) {
return window.test_driver_internal.set_global_privacy_control(newValue);
},
/**
* Installs a WebExtension .
*
* Matches the ` Install WebExtension
* < https : //github.com/w3c/webextensions/blob/main/specification/webdriver-classic.bs>`_
* WebDriver command .
*
* @ param { Object } params - Parameters for loading the extension .
* @ param { String } params . type - A type such as " path " , " archivePath " , or " base64 " .
*
* @ param { String } params . path - The path to the extension ' s resources if type " path " or " archivePath " is specified .
*
* @ param { String } params . value - The base64 encoded value of the extension ' s resources if type " base64 " is specified .
*
* @ returns { Promise } Returns the extension identifier as defined in the spec .
* Rejected if the extension fails to load .
*/
install_web_extension: function (params) {
return window.test_driver_internal.install_web_extension(params);
},
/**
* Uninstalls a WebExtension .
*
* Matches the ` Uninstall WebExtension
* < https : //github.com/w3c/webextensions/blob/main/specification/webdriver-classic.bs>`_
* WebDriver command .
*
* @ param { String } extension_id - The extension identifier .
*
* @ returns { Promise } Fulfilled after the extension has been removed .
* Rejected in case the WebDriver command errors out .
*/
uninstall_web_extension: function (extension_id) {
return window.test_driver_internal.uninstall_web_extension(extension_id);
}
};
window.test_driver_internal = {
/**
* This flag should be set to ` true ` by any code which implements the
* internal methods defined below for automation purposes . Doing so
* allows the library to signal failure immediately when an automated
* implementation of one of the methods is not available .
*/
in_automation: false ,
bidi: {
bluetooth: {
handle_request_device_prompt: function () {
throw new Error(
'bidi.bluetooth.handle_request_device_prompt is not implemented by testdriver-vendor.js' );
},
simulate_adapter: function () {
throw new Error(
"bidi.bluetooth.simulate_adapter is not implemented by testdriver-vendor.js" );
},
disable_simulation: function () {
throw new Error(
"bidi.bluetooth.disable_simulation is not implemented by testdriver-vendor.js" );
},
simulate_preconnected_peripheral: function () {
throw new Error(
'bidi.bluetooth.simulate_preconnected_peripheral is not implemented by testdriver-vendor.js' );
},
request_device_prompt_updated: {
async subscribe() {
throw new Error(
'bidi.bluetooth.request_device_prompt_updated.subscribe is not implemented by testdriver-vendor.js' );
},
on() {
throw new Error(
'bidi.bluetooth.request_device_prompt_updated.on is not implemented by testdriver-vendor.js' );
}
},
gatt_connection_attempted: {
async subscribe() {
throw new Error(
'bidi.bluetooth.gatt_connection_attempted.subscribe is not implemented by testdriver-vendor.js' );
},
on() {
throw new Error(
'bidi.bluetooth.gatt_connection_attempted.on is not implemented by testdriver-vendor.js' );
}
},
characteristic_event_generated: {
async subscribe() {
throw new Error(
'bidi.bluetooth.characteristic_event_generated.subscribe is not implemented by testdriver-vendor.js' );
},
on() {
throw new Error(
'bidi.bluetooth.characteristic_event_generated.on is not implemented by testdriver-vendor.js' );
}
},
descriptor_event_generated: {
async subscribe() {
throw new Error(
'bidi.bluetooth.descriptor_event_generated.subscribe is not implemented by testdriver-vendor.js' );
},
on() {
throw new Error(
'bidi.bluetooth.descriptor_event_generated.on is not implemented by testdriver-vendor.js' );
}
}
},
emulation: {
set_geolocation_override: function (params) {
throw new Error(
"bidi.emulation.set_geolocation_override is not implemented by testdriver-vendor.js" );
},
set_locale_override: function (params) {
throw new Error(
"bidi.emulation.set_locale_override is not implemented by testdriver-vendor.js" );
},
set_screen_orientation_override: function (params) {
throw new Error(
"bidi.emulation.set_screen_orientation_override is not implemented by testdriver-vendor.js" );
},
set_touch_override: function (params) {
throw new Error(
"bidi.emulation.set_touch_override is not implemented by testdriver-vendor.js" );
}
},
user_agent_client_hints: {
set_client_hints_override: function (params) {
throw new Error(
"bidi.user_agent_client_hints.set_client_hints_override is not implemented by testdriver-vendor.js" );
}
},
log: {
entry_added: {
async subscribe() {
throw new Error(
"bidi.log.entry_added.subscribe is not implemented by testdriver-vendor.js" );
},
on() {
throw new Error(
"bidi.log.entry_added.on is not implemented by testdriver-vendor.js" );
}
}
},
permissions: {
async set_permission() {
throw new Error(
"bidi.permissions.set_permission() is not implemented by testdriver-vendor.js" );
}
},
speculation: {
prefetch_status_updated: {
async subscribe() {
throw new Error(
'bidi.speculation.prefetch_status_updated.subscribe is not implemented by testdriver-vendor.js' );
},
on() {
throw new Error(
'bidi.speculation.prefetch_status_updated.on is not implemented by testdriver-vendor.js' );
}
},
}
},
async click(element, coords) {
if (this .in_automation) {
throw new Error("click() is not implemented by testdriver-vendor.js" );
}
return new Promise(function (resolve, reject) {
element.addEventListener("click" , resolve);
});
},
async delete_all_cookies(context=null ) {
throw new Error("delete_all_cookies() is not implemented by testdriver-vendor.js" );
},
async get_all_cookies(context=null ) {
throw new Error("get_all_cookies() is not implemented by testdriver-vendor.js" );
},
async get_named_cookie(name, context=null ) {
throw new Error("get_named_cookie() is not implemented by testdriver-vendor.js" );
},
async get_computed_role(element) {
throw new Error("get_computed_role is a testdriver.js function which cannot be run in this context." );
},
async get_computed_name(element) {
throw new Error("get_computed_name is a testdriver.js function which cannot be run in this context." );
},
async get_accessibility_properties_for_element(element) {
throw new Error("get_accessibility_properties_for_element is a testdriver.js function which cannot be run in this context." );
},
async get_accessibility_properties_for_accessibility_node(accId) {
throw new Error("get_accessibility_properties_for_accessibility_node is a testdriver.js function which cannot be run in this context." );
},
async send_keys(element, keys) {
if (this .in_automation) {
throw new Error("send_keys() is not implemented by testdriver-vendor.js" );
}
return new Promise(function (resolve, reject) {
var seen = "" ;
function remove() {
element.removeEventListener("keydown" , onKeyDown);
}
function onKeyDown(event) {
if (event.key.length > 1 ) {
return;
}
seen += event.key;
if (keys.indexOf(seen) !== 0 ) {
reject(new Error("Unexpected key sequence: " + seen));
remove();
} else if (seen === keys) {
resolve();
remove();
}
}
element.addEventListener("keydown" , onKeyDown);
});
},
async freeze(context=null ) {
throw new Error("freeze() is not implemented by testdriver-vendor.js" );
},
async minimize_window(context=null ) {
throw new Error("minimize_window() is not implemented by testdriver-vendor.js" );
},
async set_window_rect(rect, context=null ) {
throw new Error("set_window_rect() is not implemented by testdriver-vendor.js" );
},
async get_window_rect(context=null ) {
throw new Error("get_window_rect() is not implemented by testdriver-vendor.js" );
},
async action_sequence(actions, context=null ) {
throw new Error("action_sequence() is not implemented by testdriver-vendor.js" );
},
async generate_test_report(message, context=null ) {
throw new Error("generate_test_report() is not implemented by testdriver-vendor.js" );
},
async set_permission(permission_params, context=null ) {
throw new Error("set_permission() is not implemented by testdriver-vendor.js" );
},
async add_virtual_authenticator(config, context=null ) {
throw new Error("add_virtual_authenticator() is not implemented by testdriver-vendor.js" );
},
async remove_virtual_authenticator(authenticator_id, context=null ) {
throw new Error("remove_virtual_authenticator() is not implemented by testdriver-vendor.js" );
},
async add_credential(authenticator_id, credential, context=null ) {
throw new Error("add_credential() is not implemented by testdriver-vendor.js" );
},
async get_credentials(authenticator_id, context=null ) {
throw new Error("get_credentials() is not implemented by testdriver-vendor.js" );
},
async remove_credential(authenticator_id, credential_id, context=null ) {
throw new Error("remove_credential() is not implemented by testdriver-vendor.js" );
},
async remove_all_credentials(authenticator_id, context=null ) {
throw new Error("remove_all_credentials() is not implemented by testdriver-vendor.js" );
},
async set_user_verified(authenticator_id, uv, context=null ) {
throw new Error("set_user_verified() is not implemented by testdriver-vendor.js" );
},
async set_storage_access(origin, embedding_origin, blocked, context=null ) {
throw new Error("set_storage_access() is not implemented by testdriver-vendor.js" );
},
async set_spc_transaction_mode(mode, context=null ) {
throw new Error("set_spc_transaction_mode() is not implemented by testdriver-vendor.js" );
},
set_rph_registration_mode: function (mode, context=null ) {
return Promise.reject(new Error("unimplemented" ));
},
async cancel_fedcm_dialog(context=null ) {
throw new Error("cancel_fedcm_dialog() is not implemented by testdriver-vendor.js" );
},
async click_fedcm_dialog_button(dialog_button, context=null ) {
throw new Error("click_fedcm_dialog_button() is not implemented by testdriver-vendor.js" );
},
async select_fedcm_account(account_index, context=null ) {
throw new Error("select_fedcm_account() is not implemented by testdriver-vendor.js" );
},
async get_fedcm_account_list(context=null ) {
throw new Error("get_fedcm_account_list() is not implemented by testdriver-vendor.js" );
},
async get_fedcm_dialog_title(context=null ) {
throw new Error("get_fedcm_dialog_title() is not implemented by testdriver-vendor.js" );
},
async get_fedcm_dialog_type(context=null ) {
throw new Error("get_fedcm_dialog_type() is not implemented by testdriver-vendor.js" );
},
async set_fedcm_delay_enabled(enabled, context=null ) {
throw new Error("set_fedcm_delay_enabled() is not implemented by testdriver-vendor.js" );
},
async reset_fedcm_cooldown(context=null ) {
throw new Error("reset_fedcm_cooldown() is not implemented by testdriver-vendor.js" );
},
async create_virtual_sensor(sensor_type, sensor_params, context=null ) {
throw new Error("create_virtual_sensor() is not implemented by testdriver-vendor.js" );
},
async update_virtual_sensor(sensor_type, reading, context=null ) {
throw new Error("update_virtual_sensor() is not implemented by testdriver-vendor.js" );
},
async remove_virtual_sensor(sensor_type, context=null ) {
throw new Error("remove_virtual_sensor() is not implemented by testdriver-vendor.js" );
},
async get_virtual_sensor_information(sensor_type, context=null ) {
throw new Error("get_virtual_sensor_information() is not implemented by testdriver-vendor.js" );
},
async set_device_posture(posture, context=null ) {
throw new Error("set_device_posture() is not implemented by testdriver-vendor.js" );
},
async clear_device_posture(context=null ) {
throw new Error("clear_device_posture() is not implemented by testdriver-vendor.js" );
},
async run_bounce_tracking_mitigations(context=null ) {
throw new Error("run_bounce_tracking_mitigations() is not implemented by testdriver-vendor.js" );
},
async create_virtual_pressure_source(source_type, metadata={}, context=null ) {
throw new Error("create_virtual_pressure_source() is not implemented by testdriver-vendor.js" );
},
async update_virtual_pressure_source(source_type, sample, own_contribution_estimate, context=null ) {
throw new Error("update_virtual_pressure_source() is not implemented by testdriver-vendor.js" );
},
async remove_virtual_pressure_source(source_type, context=null ) {
throw new Error("remove_virtual_pressure_source() is not implemented by testdriver-vendor.js" );
},
async set_protected_audience_k_anonymity(owner, name, hashes, context=null ) {
throw new Error("set_protected_audience_k_anonymity() is not implemented by testdriver-vendor.js" );
},
async set_display_features(features, context=null ) {
throw new Error("set_display_features() is not implemented by testdriver-vendor.js" );
},
async clear_display_features(context=null ) {
throw new Error("clear_display_features() is not implemented by testdriver-vendor.js" );
},
async set_global_privacy_control(newValue) {
throw new Error("set_global_privacy_control() is not implemented by testdriver-vendor.js" );
},
async get_global_privacy_control() {
throw new Error("get_global_privacy_control() is not implemented by testdriver-vendor.js" );
}
};
})();
Messung V0.5 in Prozent C=91 H=100 G=95
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.229Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-09-04)
¤
*Eine klare Vorstellung vom Zielzustand
2026-08-25
Neuigkeiten
Aktuelles
Motto des Tages
letze Version des Elbe Quellennavigators
Jenseits des Üblichen ....
Besucher
Statistik
#Sources=1019539
#Domains=764034