t.selectText Method
Selects text in input elements of various types. Can be chained with other TestController
methods.
t.selectText(selector [, startPos] [, endPos] [, options]) → this | Promise<any>
Parameter | Type | Description | Default |
---|---|---|---|
selector |
Function | String | Selector | Snapshot | Promise | Identifies the webpage element whose text will be selected. See Select Target Elements. | |
startPos (optional) |
Number | The start position of the selection. A zero-based integer. | 0 |
endPos (optional) |
Number | The end position of the selection. A zero-based integer. | Length of the visible text content. |
options (optional) |
Object | A set of options that provide additional parameters for the action. See Options. |
You can use
t.selectText
for<textarea>
andcontentEditable
elements as well. However, the t.selectTextAreaContent and t.selectEditableContent actions allow you to specify the selection range in a way that is more relevant for these elements.
The following example demonstrates text selection in an input element.
import { ClientFunction, Selector } from 'testcafe';
fixture `My fixture`
.page `http://devexpress.github.io/testcafe/example/`;
const developerNameInput = Selector('#developer-name');
const getElementSelectionStart = ClientFunction(selector => selector().selectionStart);
const getElementSelectionEnd = ClientFunction(selector => selector().selectionEnd);
test('Select text within input', async t => {
await t
.typeText(developerNameInput, 'Test Cafe', { caretPos: 0 })
.selectText(developerNameInput, 7, 1);
await t
.expect(await getElementSelectionStart(developerNameInput)).eql(1)
.expect(await getElementSelectionEnd(developerNameInput)).eql(7);
});
If the
startPos
value is greater than theendPos
value, 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 #
For actions that target DOM elements, use the selector
parameter to identify the desired element.
You can pass any of the following objects as a selector
.
A CSS selector string.
test('My Test', 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 `My fixture` .page `http://www.example.com/`; const lastItem = Selector('.toc-item:last-child'); test('My Test', async t => { // Click will be performed on the element selected by // the 'getLastItem' selector. await t.click(lastItem); });
A client-side function that returns a DOM element.
test('My Test', 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[2]); });
-
import { Selector } from 'testcafe'; fixture `My fixture` .page `http://www.example.com/`; test('My Test', async t => { const topMenuSnapshot = await Selector('#top-menu'); // Click will be performed on the element whose snapshot // is specified. This is an element with the '#top-menu' ID. await t.click(topMenuSnapshot); });
A Promise returned by a selector.
import { Selector } from 'testcafe'; const submitButton = Selector('#submit-button'); fixture `My fixture` .page `http://www.example.com/`; test('My Test', async t => { // Click will be performed on the element specified by the selector // as soon as the promise is resolved. await t.click(submitButton()); });
Before executing an action, TestCafe waits for the target element to appear in the DOM and become visible. If this does not happen within the selector timeout, the test fails.
Note that TestCafe cannot interact with page elements under other elements. If the target element is not on top when an action is triggered, TestCafe waits for this element to appear in the foreground. If this does not happen within the selector timeout, the action is performed with an overlaying element. For information on why the target element can be overlaid, see the stacking description in the z-index topic.
Upload action is the only method that does not require the target
input
to be visible. You can also perform the upload action when theinput
is overlaid.
Options #
Basic action options provide additional parameters for the t.pressKey
, t.selectText
, t.selectTextAreaContent
and t.selectEditableContent
actions.
{
speed: Number
}
Parameter | Type | Description | Default |
---|---|---|---|
speed |
Number | The speed of action emulation. Defines how fast TestCafe performs the action when running tests. A number between 1 (the maximum speed) and 0.01 (the minimum speed). If test speed is also specified in the CLI, API or in test code, the action speed setting overrides test speed. |
1 |
Example
import { Selector } from 'testcafe';
const nameInput = Selector('#developer-name');
fixture `My Fixture`
.page `http://devexpress.github.io/testcafe/example/`
test('My Test', async t => {
await t
.typeText(nameInput, 'Peter')
.typeText(nameInput, ' Parker', { speed: 0.1 });
});