t.selectEditableContent Method
Selects editable content on the page. Chainable.
t.selectEditableContent(startSelector, endSelector [, options]) → this | Promise<any>
Parameter | Type | Description |
---|---|---|
startSelector |
Function | String | Selector | Snapshot | Promise | Identifies a webpage element from which selection starts. The start position of selection is the first character of the element’s text. See Select Target Elements. |
endSelector |
Function | String | Selector | Snapshot | Promise | Identifies a webpage element at which selection ends. The end position of selection is the last character of the element’s text. See Select Target Elements. |
options (optional) |
Object | Additional action options (see Options). |
This function works for HTML elements that have the contentEditable
attribute enabled.
Important
According to Web standards, start and end elements must have a common ancestor with the contentEditable
attribute set to true
- the range root.
The example below shows how to select several sections within a contentEditable
area.
import { Selector } from 'testcafe';
fixture`TestController.selectEditableContent`
.page`./index.html`;
test('Delete text within a contentEditable element', async t => {
await t
.selectEditableContent('#foreword', '#chapter-3')
.pressKey('delete')
.expect(Selector('#chapter-2').exists).notOk()
.expect(Selector('#chapter-4').exists).ok();
});
Note
If the HTML element defined by endSelector
is located on a higher level of the page hierarchy than the one defined by startSelector
, the action will perform a backward selection.
You can also select <textarea>
content with the t.selectTextareaContent method and editable content with the t.selectEditableContent method.
Select Target Elements
Use the selector
parameter to identify the target of a DOM event.
You can pass any of the following objects as a selector
:
A CSS selector string.
test('Click submit', async t => { // Click will be performed on the first element // that matches the CSS selector. await t.click('#submit-button'); });
A selector.
import { Selector } from 'testcafe'; fixture`Parameter as Selector` .page`https://devexpress.github.io/testcafe/example/`; const lastCheckbox = Selector('fieldset p:last-child [type="checkbox"]'); test('Click last checkbox', async t => { // Click will be performed on the element selected by // the 'getLastItem' selector. await t.click(lastCheckbox); });
A client-side function that returns a DOM element.
test('Click first child of the body', async t => { // Click will be performed on the element returned by the function, // which is the third child of the document's body. await t.click(() => document.body.children[0]); });
-
import { Selector } from 'testcafe'; fixture`Parameter as DOM node snapshot` .page`https://devexpress.github.io/testcafe/example/`; test('Click preferred interface', async t => { const preferredInterface = await Selector('#preferred-interface'); // Click will be performed on the element whose snapshot // is specified. This is an element with the '#preferred-interface' ID. await t.click(preferredInterface); });
A Promise returned by a selector.
import { Selector } from 'testcafe'; const submitButton = Selector('#submit-button'); fixture`Parameter as Promise by Selector` .page`https://devexpress.github.io/testcafe/example/`; test('Click submit', async t => { // Click will be performed on the element specified by the selector // as soon as the promise is resolved. await t.click(submitButton()); });
TestCafe waits for the target element to become visible before it executes an action. If this does not happen within the selector timeout, the test fails.
TestCafe cannot interact with background elements. If a different element overlaps the action target, TestCafe waits for this element to disappear. If this does not happen within the selector timeout, TestCafe performs the action with the element on top of the original target. Learn more about stacking and z-index on MDN.
Note
The upload action is an exception to this rule — it does not check the visibility of the target input
.
Options
Basic action options provide additional parameters for the t.pressKey
, t.selectText
, t.selectTextAreaContent
and t.selectEditableContent
actions.
export interface BasicOption {
speed: number;
}
Parameter | Type | Description | Default |
---|---|---|---|
speed |
Number | The speed of action emulation. Number between 1 (the maximum speed) and 0.01 (the minimum speed). Overrides all other speed settings (CLI, Runner, and test code) for the duration of the action. |
1 |
confidential |
Boolean | Replace the action payload with asterisks in TestCafe Dashboard reports. | true when the action target is a password type input; false otherwise. |
Example
import { Selector } from 'testcafe';
const nameInput = Selector('#developer-name');
fixture`Action speed`
.page`https://devexpress.github.io/testcafe/example/`;
test('Type name', async t => {
await t
.typeText(nameInput, 'Peter')
.typeText(nameInput, ' Parker', { speed: 0.1 });
});