(xpath, assertion)
| 372 | |
| 373 | // Assert element conditions |
| 374 | assertElement(xpath, assertion) { |
| 375 | const element = this.findElement(xpath); |
| 376 | |
| 377 | const result = { |
| 378 | xpath: xpath, |
| 379 | assertion: assertion, |
| 380 | success: false, |
| 381 | element: null, |
| 382 | message: '' |
| 383 | }; |
| 384 | |
| 385 | if (!element) { |
| 386 | result.message = `Element not found: ${xpath}`; |
| 387 | return result; |
| 388 | } |
| 389 | |
| 390 | result.element = { |
| 391 | exists: true, |
| 392 | tagName: element.tagName, |
| 393 | id: element.id, |
| 394 | className: element.className |
| 395 | }; |
| 396 | |
| 397 | switch (assertion.type) { |
| 398 | case 'exists': |
| 399 | result.success = true; |
| 400 | result.message = 'Element exists'; |
| 401 | break; |
| 402 | |
| 403 | case 'visible': |
| 404 | result.success = this.isElementVisible(element); |
| 405 | result.message = result.success ? 'Element is visible' : 'Element is not visible'; |
| 406 | break; |
| 407 | |
| 408 | case 'enabled': |
| 409 | result.success = !element.disabled; |
| 410 | result.message = result.success ? 'Element is enabled' : 'Element is disabled'; |
| 411 | break; |
| 412 | |
| 413 | case 'text_equals': |
| 414 | const actualText = element.textContent.trim(); |
| 415 | result.success = actualText === assertion.value; |
| 416 | result.actualValue = actualText; |
| 417 | result.message = result.success ? |
| 418 | 'Text matches expected value' : |
| 419 | `Text mismatch. Expected: "${assertion.value}", Actual: "${actualText}"`; |
| 420 | break; |
| 421 | |
| 422 | case 'text_contains': |
| 423 | const elementText = element.textContent.trim(); |
| 424 | result.success = elementText.includes(assertion.value); |
| 425 | result.actualValue = elementText; |
| 426 | result.message = result.success ? |
| 427 | 'Text contains expected value' : |
| 428 | `Text does not contain "${assertion.value}"`; |
| 429 | break; |
| 430 | |
| 431 | case 'value_equals': |
no test coverage detected