or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

advanced-features.mdassertions-expectations.mdbrowser-control.mdelement-interaction.mdindex.mdmodern-element-api.mdpage-object-model.mdprogrammatic-api.mdprotocol-commands.md

assertions-expectations.mddocs/

0

# Assertions & Expectations

1

2

Comprehensive assertion library supporting both assert-style and expect-style validation patterns for test verification.

3

4

## Capabilities

5

6

### Assert-Style Assertions

7

8

Traditional assertion methods that throw errors on failure, suitable for immediate validation.

9

10

#### Element Existence Assertions

11

12

```javascript { .api }

13

/**

14

* Assert element exists in DOM

15

* @param selector - Element selector

16

* @param message - Optional custom message

17

* @returns Promise resolving when assertion passes

18

*/

19

browser.assert.elementPresent(selector: string, message?: string);

20

21

/**

22

* Assert element doesn't exist in DOM

23

* @param selector - Element selector

24

* @param message - Optional custom message

25

* @returns Promise resolving when assertion passes

26

*/

27

browser.assert.elementNotPresent(selector: string, message?: string);

28

```

29

30

#### Element Visibility Assertions

31

32

```javascript { .api }

33

/**

34

* Assert element is visible

35

* @param selector - Element selector

36

* @param message - Optional custom message

37

* @returns Promise resolving when assertion passes

38

*/

39

browser.assert.visible(selector: string, message?: string);

40

41

/**

42

* Assert element is hidden

43

* @param selector - Element selector

44

* @param message - Optional custom message

45

* @returns Promise resolving when assertion passes

46

*/

47

browser.assert.hidden(selector: string, message?: string);

48

```

49

50

#### Element State Assertions

51

52

```javascript { .api }

53

/**

54

* Assert element is enabled for interaction

55

* @param selector - Element selector

56

* @param message - Optional custom message

57

* @returns Promise resolving when assertion passes

58

*/

59

browser.assert.enabled(selector: string, message?: string);

60

61

/**

62

* Assert element is selected (checkboxes/radio buttons)

63

* @param selector - Element selector

64

* @param message - Optional custom message

65

* @returns Promise resolving when assertion passes

66

*/

67

browser.assert.selected(selector: string, message?: string);

68

```

69

70

#### Element Attribute & Class Assertions

71

72

```javascript { .api }

73

/**

74

* Assert element has specific CSS class

75

* @param selector - Element selector

76

* @param className - CSS class name

77

* @param message - Optional custom message

78

* @returns Promise resolving when assertion passes

79

*/

80

browser.assert.hasClass(selector: string, className: string, message?: string);

81

82

/**

83

* Assert element has specific attribute

84

* @param selector - Element selector

85

* @param attribute - Attribute name

86

* @param message - Optional custom message

87

* @returns Promise resolving when assertion passes

88

*/

89

browser.assert.hasAttribute(selector: string, attribute: string, message?: string);

90

91

/**

92

* Assert element has child elements

93

* @param selector - Element selector

94

* @param message - Optional custom message

95

* @returns Promise resolving when assertion passes

96

*/

97

browser.assert.hasDescendants(selector: string, message?: string);

98

```

99

100

#### Text Content Assertions

101

102

```javascript { .api }

103

/**

104

* Assert element text contains specified string

105

* @param selector - Element selector

106

* @param text - Expected text content

107

* @param message - Optional custom message

108

* @returns Promise resolving when assertion passes

109

*/

110

browser.assert.textContains(selector: string, text: string, message?: string);

111

112

/**

113

* Assert element text equals specified string

114

* @param selector - Element selector

115

* @param text - Expected text content

116

* @param message - Optional custom message

117

* @returns Promise resolving when assertion passes

118

*/

119

browser.assert.textEquals(selector: string, text: string, message?: string);

120

121

/**

122

* Assert element text matches regular expression

123

* @param selector - Element selector

124

* @param regex - Regular expression pattern

125

* @param message - Optional custom message

126

* @returns Promise resolving when assertion passes

127

*/

128

browser.assert.textMatches(selector: string, regex: RegExp, message?: string);

129

130

/**

131

* Assert element contains specified text (deprecated)

132

* @param selector - Element selector

133

* @param text - Expected text content

134

* @param message - Optional custom message

135

* @returns Promise resolving when assertion passes

136

*/

137

browser.assert.containsText(selector: string, text: string, message?: string);

138

```

139

140

#### Attribute & Property Assertions

141

142

```javascript { .api }

143

/**

144

* Assert element attribute contains specified value

145

* @param selector - Element selector

146

* @param attr - Attribute name

147

* @param text - Expected attribute content

148

* @param message - Optional custom message

149

* @returns Promise resolving when assertion passes

150

*/

151

browser.assert.attributeContains(selector: string, attr: string, text: string, message?: string);

152

153

/**

154

* Assert element attribute equals specified value

155

* @param selector - Element selector

156

* @param attr - Attribute name

157

* @param value - Expected attribute value

158

* @param message - Optional custom message

159

* @returns Promise resolving when assertion passes

160

*/

161

browser.assert.attributeEquals(selector: string, attr: string, value: string, message?: string);

162

163

/**

164

* Assert element attribute matches regular expression

165

* @param selector - Element selector

166

* @param attr - Attribute name

167

* @param regex - Regular expression pattern

168

* @param message - Optional custom message

169

* @returns Promise resolving when assertion passes

170

*/

171

browser.assert.attributeMatches(selector: string, attr: string, regex: RegExp, message?: string);

172

173

/**

174

* Assert element CSS property has specified value

175

* @param selector - Element selector

176

* @param property - CSS property name

177

* @param value - Expected property value

178

* @param message - Optional custom message

179

* @returns Promise resolving when assertion passes

180

*/

181

browser.assert.cssProperty(selector: string, property: string, value: string, message?: string);

182

183

/**

184

* Assert DOM property contains specified value

185

* @param selector - Element selector

186

* @param prop - Property name

187

* @param value - Expected property content

188

* @param message - Optional custom message

189

* @returns Promise resolving when assertion passes

190

*/

191

browser.assert.domPropertyContains(selector: string, prop: string, value: any, message?: string);

192

193

/**

194

* Assert DOM property equals specified value

195

* @param selector - Element selector

196

* @param prop - Property name

197

* @param value - Expected property value

198

* @param message - Optional custom message

199

* @returns Promise resolving when assertion passes

200

*/

201

browser.assert.domPropertyEquals(selector: string, prop: string, value: any, message?: string);

202

203

/**

204

* Assert DOM property matches regular expression

205

* @param selector - Element selector

206

* @param prop - Property name

207

* @param regex - Regular expression pattern

208

* @param message - Optional custom message

209

* @returns Promise resolving when assertion passes

210

*/

211

browser.assert.domPropertyMatches(selector: string, prop: string, regex: RegExp, message?: string);

212

```

213

214

#### Form Value Assertions

215

216

```javascript { .api }

217

/**

218

* Assert form element value (deprecated)

219

* @param selector - Element selector

220

* @param expected - Expected value

221

* @param message - Optional custom message

222

* @returns Promise resolving when assertion passes

223

*/

224

browser.assert.value(selector: string, expected: string, message?: string);

225

226

/**

227

* Assert element value contains specified text

228

* @param selector - Element selector

229

* @param text - Expected value content

230

* @param message - Optional custom message

231

* @returns Promise resolving when assertion passes

232

*/

233

browser.assert.valueContains(selector: string, text: string, message?: string);

234

235

/**

236

* Assert element value equals expected value

237

* @param selector - Element selector

238

* @param expected - Expected value

239

* @param message - Optional custom message

240

* @returns Promise resolving when assertion passes

241

*/

242

browser.assert.valueEquals(selector: string, expected: string, message?: string);

243

```

244

245

#### Page-Level Assertions

246

247

```javascript { .api }

248

/**

249

* Assert page title (deprecated)

250

* @param expected - Expected title

251

* @param message - Optional custom message

252

* @returns Promise resolving when assertion passes

253

*/

254

browser.assert.title(expected: string, message?: string);

255

256

/**

257

* Assert page title contains specified text

258

* @param expected - Expected title content

259

* @param message - Optional custom message

260

* @returns Promise resolving when assertion passes

261

*/

262

browser.assert.titleContains(expected: string, message?: string);

263

264

/**

265

* Assert page title equals specified text

266

* @param expected - Expected title

267

* @param message - Optional custom message

268

* @returns Promise resolving when assertion passes

269

*/

270

browser.assert.titleEquals(expected: string, message?: string);

271

272

/**

273

* Assert page title matches regular expression

274

* @param regex - Regular expression pattern

275

* @param message - Optional custom message

276

* @returns Promise resolving when assertion passes

277

*/

278

browser.assert.titleMatches(regex: RegExp, message?: string);

279

280

/**

281

* Assert URL contains specified text

282

* @param expected - Expected URL content

283

* @param message - Optional custom message

284

* @returns Promise resolving when assertion passes

285

*/

286

browser.assert.urlContains(expected: string, message?: string);

287

288

/**

289

* Assert URL equals specified text

290

* @param expected - Expected URL

291

* @param message - Optional custom message

292

* @returns Promise resolving when assertion passes

293

*/

294

browser.assert.urlEquals(expected: string, message?: string);

295

296

/**

297

* Assert URL matches regular expression

298

* @param regex - Regular expression pattern

299

* @param message - Optional custom message

300

* @returns Promise resolving when assertion passes

301

*/

302

browser.assert.urlMatches(regex: RegExp, message?: string);

303

```

304

305

#### Element Count Assertions

306

307

```javascript { .api }

308

/**

309

* Assert number of elements matching selector

310

* @param selector - Element selector

311

* @param count - Expected element count

312

* @param message - Optional custom message

313

* @returns Promise resolving when assertion passes

314

*/

315

browser.assert.elementsCount(selector: string, count: number, message?: string);

316

```

317

318

**Usage Examples:**

319

320

```javascript

321

// Element existence and visibility

322

browser.assert.elementPresent("#login-form");

323

browser.assert.visible("#submit-button");

324

browser.assert.hidden("#error-message");

325

326

// Text content

327

browser.assert.textContains("#status", "Success");

328

browser.assert.textEquals("#title", "Welcome");

329

330

// Attributes and properties

331

browser.assert.hasClass("#alert", "error");

332

browser.assert.attributeEquals("input", "type", "email");

333

browser.assert.valueContains("#search", "nightwatch");

334

335

// Page-level assertions

336

browser.assert.titleContains("Dashboard");

337

browser.assert.urlContains("/dashboard");

338

339

// Element count

340

browser.assert.elementsCount(".menu-item", 5);

341

```

342

343

### Expect-Style Assertions

344

345

Fluent, chainable expectation API providing readable test assertions.

346

347

#### Expect Factory Functions

348

349

```javascript { .api }

350

/**

351

* Create element expectation for assertions

352

* @param selector - Element selector

353

* @returns Element expectation object

354

*/

355

browser.expect.element(selector: string): ElementExpectation;

356

357

/**

358

* Create elements collection expectation

359

* @param selector - Elements selector

360

* @returns Elements expectation object

361

*/

362

browser.expect.elements(selector: string): ElementsExpectation;

363

364

/**

365

* Create page object section expectation

366

* @param selector - Section selector

367

* @returns Section expectation object

368

*/

369

browser.expect.section(selector: string): SectionExpectation;

370

371

/**

372

* Create component expectation

373

* @param selector - Component selector

374

* @returns Component expectation object

375

*/

376

browser.expect.component(selector: string): ComponentExpectation;

377

378

/**

379

* Create cookie expectation

380

* @param name - Cookie name

381

* @returns Cookie expectation object

382

*/

383

browser.expect.cookie(name: string): CookieExpectation;

384

385

/**

386

* Create page title expectation

387

* @returns Title expectation object

388

*/

389

browser.expect.title(): TitleExpectation;

390

391

/**

392

* Create URL expectation

393

* @returns URL expectation object

394

*/

395

browser.expect.url(): UrlExpectation;

396

```

397

398

#### Element Property Expectations

399

400

```javascript { .api }

401

/**

402

* Element expectation with chainable properties and methods

403

*/

404

interface ElementExpectation {

405

// Element type/tag expectations

406

a(type: string): ElementExpectation;

407

an(type: string): ElementExpectation;

408

409

// Attribute expectations

410

attribute(name: string): AttributeExpectation;

411

412

// CSS property expectations

413

css(property: string): CssExpectation;

414

415

// DOM property expectations

416

property(name: string): PropertyExpectation;

417

418

// Content expectations

419

text: TextExpectation;

420

value: ValueExpectation;

421

422

// State expectations

423

active: StateExpectation;

424

enabled: StateExpectation;

425

present: StateExpectation;

426

selected: StateExpectation;

427

visible: StateExpectation;

428

}

429

```

430

431

#### Language Chain Properties

432

433

```javascript { .api }

434

/**

435

* Fluent language chains for readable assertions

436

*/

437

interface LanguageChains {

438

to: ExpectationChain;

439

be: ExpectationChain;

440

been: ExpectationChain;

441

is: ExpectationChain;

442

that: ExpectationChain;

443

which: ExpectationChain;

444

and: ExpectationChain;

445

has: ExpectationChain;

446

have: ExpectationChain;

447

with: ExpectationChain;

448

at: ExpectationChain;

449

does: ExpectationChain;

450

of: ExpectationChain;

451

same: ExpectationChain;

452

453

// Negation chain

454

not: ExpectationChain;

455

456

// Deep equality flag

457

deep: ExpectationChain;

458

}

459

```

460

461

#### Assertion Chain Methods

462

463

```javascript { .api }

464

/**

465

* Equality assertion methods

466

* @param value - Expected value

467

* @returns Promise resolving when assertion passes

468

*/

469

equal(value: any): Promise<void>;

470

equals(value: any): Promise<void>;

471

eq(value: any): Promise<void>;

472

473

/**

474

* Contains assertion methods

475

* @param value - Expected contained value

476

* @returns Promise resolving when assertion passes

477

*/

478

include(value: any): Promise<void>;

479

includes(value: any): Promise<void>;

480

contain(value: any): Promise<void>;

481

contains(value: any): Promise<void>;

482

483

/**

484

* Regex match assertion methods

485

* @param regex - Regular expression pattern

486

* @returns Promise resolving when assertion passes

487

*/

488

match(regex: RegExp): Promise<void>;

489

matches(regex: RegExp): Promise<void>;

490

491

/**

492

* String start assertion methods

493

* @param value - Expected start value

494

* @returns Promise resolving when assertion passes

495

*/

496

startWith(value: string): Promise<void>;

497

startsWith(value: string): Promise<void>;

498

499

/**

500

* String end assertion methods

501

* @param value - Expected end value

502

* @returns Promise resolving when assertion passes

503

*/

504

endWith(value: string): Promise<void>;

505

endsWith(value: string): Promise<void>;

506

507

/**

508

* Timeout assertion methods

509

* @param ms - Timeout in milliseconds

510

* @returns Promise resolving when assertion passes within timeout

511

*/

512

before(ms: number): Promise<void>;

513

after(ms: number): Promise<void>;

514

```

515

516

**Usage Examples:**

517

518

```javascript

519

// Element state expectations

520

browser.expect.element("#submit-button").to.be.visible;

521

browser.expect.element("#loading").to.not.be.present;

522

browser.expect.element("#checkbox").to.be.selected;

523

524

// Text content expectations

525

browser.expect.element("#status").text.to.contain("Success");

526

browser.expect.element("#title").text.to.equal("Welcome Dashboard");

527

browser.expect.element("#message").text.to.match(/^Success:/);

528

529

// Attribute expectations

530

browser.expect.element("input").to.have.attribute("type").equals("email");

531

browser.expect.element("#link").to.have.attribute("href").contains("example.com");

532

533

// CSS property expectations

534

browser.expect.element("#header").to.have.css("background-color").equals("rgb(255, 0, 0)");

535

browser.expect.element(".hidden").to.have.css("display").equals("none");

536

537

// Value expectations

538

browser.expect.element("#search").to.have.value.that.contains("nightwatch");

539

browser.expect.element("#email").to.have.value.that.matches(/^[^@]+@[^@]+$/);

540

541

// Page-level expectations

542

browser.expect.title().to.contain("Dashboard");

543

browser.expect.url().to.match(/\/dashboard$/);

544

545

// Cookie expectations

546

browser.expect.cookie("session_id").to.contain("abc");

547

548

// Negation expectations

549

browser.expect.element("#error").to.not.be.visible;

550

browser.expect.element("#disabled-button").to.not.be.enabled;

551

552

// Chained expectations

553

browser.expect.element("#form")

554

.to.be.present.and

555

.to.be.visible.and

556

.to.have.attribute("method").equals("POST");

557

```

558

559

### Promise-Based Assertions

560

561

Handle dynamic content and asynchronous operations.

562

563

```javascript { .api }

564

/**

565

* Assert promised value meets expectation

566

* @param promise - Promise resolving to value

567

* @param expected - Expected value

568

* @param message - Optional custom message

569

* @returns Promise resolving when assertion passes

570

*/

571

browser.assert.promisedValue(promise: Promise<any>, expected: any, message?: string);

572

```

573

574

**Usage Examples:**

575

576

```javascript

577

// Assert on promised values

578

const titlePromise = browser.getTitle();

579

browser.assert.promisedValue(titlePromise, "Expected Title");

580

581

// Use with async/await

582

const currentUrl = await browser.getCurrentUrl();

583

browser.assert.urlEquals(currentUrl, "https://example.com/dashboard");

584

```

585

586

### Advanced Expectation Patterns

587

588

Complex assertion scenarios and custom validation logic.

589

590

**Usage Examples:**

591

592

```javascript

593

// Multiple element expectations

594

browser.expect.elements(".menu-item").count.to.equal(5);

595

browser.expect.elements(".error").count.to.be.above(0);

596

597

// Timeout-based expectations

598

browser.expect.element("#loading").to.not.be.visible.before(5000);

599

browser.expect.element("#results").to.be.present.after(2000);

600

601

// Conditional expectations

602

const submitButton = browser.expect.element("#submit");

603

if (await browser.isVisible("#terms-checkbox")) {

604

submitButton.to.be.enabled.after(1000);

605

} else {

606

submitButton.to.be.enabled;

607

}

608

609

// Custom error messages in expect chains

610

browser.expect.element("#status")

611

.text.to.contain("Complete")

612

.before(10000, "Status should show Complete within 10 seconds");

613

```