UNPKG

nightwatch

Version:

Easy to use Node.js based end-to-end testing solution for web applications using the W3C WebDriver API.

264 lines (202 loc) 12.8 kB
import {expectAssignable, expectError, expectType} from "tsd"; import { Element, ElementAssertions, ElementValue, Elements, ScopedElement, ScopedElementRect, ValueAssertions } from ".."; import { WebElement, WebElementPromise } from "selenium-webdriver"; describe('new element() api', function () { test('test element()', async function () { const elem = browser.element('selector'); expectType<ScopedElement>(elem); expectType<WebElement>(await elem); // accepts WebElement expectType<ScopedElement>(browser.element(await elem)); // accepts By selector expectType<ScopedElement>(browser.element(by.xpath('//tagname'))); // accepts RelativeBy selector expectType<ScopedElement>(browser.element(locateWith(by.css('selector')).above(await elem))); // accepts ElementProperties expectType<ScopedElement>(browser.element({selector: 'selector', locateStrategy: 'css selector', abortOnFailure: false})); // accepts ElementProperties with Appium-specific locate strategies expectType<ScopedElement>(browser.element({selector: 'selector', locateStrategy: '-android uiautomator', abortOnFailure: false})); // accepts Element (ScopedElement is also assignable to Element) expectType<ScopedElement>(browser.element(elem)); // accepts WebElementPromise expectType<ScopedElement>(browser.element(elem.webElement)); // accepts Promise<WebElement> expectType<ScopedElement>(browser.element(Promise.resolve(await elem))); // backward compatibility expectType<ScopedElement>(browser.element('css selector', 'selector', function (result) { expectType<never>(result); })); }); test('test element.methodName()', async function () { const elementActive = browser.element.findActive(); expectType<ScopedElement>(elementActive); expectType<WebElement>(await elementActive); const elementFind = browser.element.find('selector'); expectType<ScopedElement>(elementFind); expectType<WebElement>(await elementFind); expectType<ScopedElement>(browser.element.get('selector')); expectType<ScopedElement>(browser.element.findElement('selector')); const elementFindByText = browser.element.findByText('some-text', {exact: true, abortOnFailure: false}); expectType<ScopedElement>(elementFindByText); const elementFindByRole = browser.element.findByRole('heading', {level: 2, expanded: true, retryInterval: 100}); expectType<ScopedElement>(elementFindByRole); browser.element.findByRole('button', {current: false, expanded: true, index: 2}); expectError(browser.element.findByRole('button', {level: 2, expanded: true, retryInterval: 100})); const elementFindByPlaceholderText = browser.element.findByPlaceholderText('some-text', {exact: true, abortOnFailure: false}); expectType<ScopedElement>(elementFindByPlaceholderText); const elementFindByLabelText = browser.element.findByLabelText('some-text', {exact: true, abortOnFailure: false}); expectType<ScopedElement>(elementFindByLabelText); const elementFindByAltText = browser.element.findByAltText('some-text', {exact: false, abortOnFailure: false}); expectType<ScopedElement>(elementFindByAltText); // findAll const elementFindAll = browser.element.findAll('selector'); expectType<Elements>(elementFindAll); expectType<WebElement[]>(await elementFindAll); expectType<ScopedElement>(elementFindAll.nth(2)); expectType<number>(await elementFindAll.count()); expectType<Elements>(browser.element.getAll('selector')); expectType<Elements>(browser.element.findElements('selector')); const elementFindAllByText = browser.element.findAllByText('some-text', {exact: true, abortOnFailure: false}); expectType<Elements>(elementFindAllByText); const elementFindAllByRole = browser.element.findAllByRole('heading', {level: 2, expanded: true, retryInterval: 100}); expectType<Elements>(elementFindAllByRole); browser.element.findAllByRole('button', {current: false, expanded: true, index: 2}); expectError(browser.element.findAllByRole('button', {level: 2, expanded: true, retryInterval: 100})); const elementFindAllByPlaceholderText = browser.element.findAllByPlaceholderText('some-text', {exact: true, abortOnFailure: false}); expectType<Elements>(elementFindAllByPlaceholderText); const elementFindAllByAltText = browser.element.findAllByAltText('some-text', {exact: false, abortOnFailure: false}); expectType<Elements>(elementFindAllByAltText); }); test('test ScopedElement has Element class properties', async function () { const elem = browser.element('selector'); expectType<ScopedElement>(elem); expectAssignable<Element>(elem); expectAssignable<WebElement>(await elem); expectType<string | undefined>(elem.selector); expectType<number>(elem.index); expectType<string | null>(elem.resolvedElement); }); test('test properties/methods in ScopedElement', async function () { const elem = browser.element('selector'); expectType<ScopedElement>(elem); expectType<WebElementPromise>(elem.webElement); expectType<ScopedElement>(elem.find('selector')); expectType<ScopedElement>(elem.get('selector')); expectType<ScopedElement>(elem.findElement('selector')); expectType<ScopedElement>(elem.findByText('some-text', {exact: true, abortOnFailure: false})); expectType<ScopedElement>(elem.findByRole('heading', {level: 2, expanded: true, retryInterval: 100})); expectType<ScopedElement>(elem.findByRole('button', {current: false, expanded: true, index: 2})); expectError(elem.findByRole('button', {level: 2, expanded: true, retryInterval: 100})); expectType<ScopedElement>(elem.findByPlaceholderText('some-text', {exact: true, abortOnFailure: false})); expectType<ScopedElement>(elem.findByLabelText('some-text', {exact: true, abortOnFailure: false})); expectType<ScopedElement>(elem.findByAltText('some-text', {exact: true, abortOnFailure: false})); expectType<Elements>(elem.findAll('selector')); expectType<Elements>(elem.findElements('selector')); expectType<Elements>(elem.getAll('selector')); expectType<Elements>(elem.findAllByText('some-text', {exact: true, abortOnFailure: false})); expectType<Elements>(elem.findAllByRole('heading', {level: 2, expanded: true, retryInterval: 100})); expectType<Elements>(elem.findAllByRole('button', {current: false, expanded: true, index: 2})); expectError(elem.findAllByRole('button', {level: 2, expanded: true, retryInterval: 100})); expectType<Elements>(elem.findAllByPlaceholderText('some-text', {exact: true, abortOnFailure: false})); expectType<Elements>(elem.findAllByAltText('some-text', {exact: true, abortOnFailure: false})); expectType<ScopedElement>(elem.getFirstElementChild()); expectType<ScopedElement>(elem.getLastElementChild()); expectType<ScopedElement>(elem.getNextElementSibling()); expectType<ScopedElement>(elem.getPreviousElementSibling()); expectType<Omit<ScopedElement, 'then'> & PromiseLike<ShadowRoot>>(elem.getShadowRoot()); expectType<ShadowRoot>(await elem.getShadowRoot()); expectType<ElementValue<string>>(elem.getId()); expectType<ElementValue<string>>(elem.getTagName()); expectType<ElementValue<string>>(elem.tagName()); expectType<ElementValue<string>>(elem.getText()); expectType<ElementValue<string>>(elem.text()); expectType<ElementValue<string | null>>(elem.getProperty('property-name')); expectType<ElementValue<string | null>>(elem.prop('property-name')); expectType<ElementValue<string | null>>(elem.property('property-name')); expectType<ElementValue<string | null>>(elem.getAttribute('attrib-name')); expectType<ElementValue<string | null>>(elem.attr('attrib-name')); expectType<ElementValue<string | null>>(elem.attribute('attrib-name')); expectType<ElementValue<string | null>>(elem.getValue()); expectType<ElementValue<boolean>>(elem.isEnabled()); expectType<ElementValue<boolean>>(elem.isPresent()); expectType<ElementValue<boolean>>(elem.isSelected()); expectType<ElementValue<boolean>>(elem.isVisible()); expectType<ElementValue<boolean>>(elem.isDisplayed()); expectType<ElementValue<boolean>>(elem.isActive()); expectType<ElementValue<ScopedElementRect>>(elem.getRect()); expectType<ElementValue<ScopedElementRect>>(elem.rect()); expectType<ElementValue<ScopedElementRect>>(elem.getSize()); expectType<ElementValue<ScopedElementRect>>(elem.getLocation()); expectType<ElementValue<string>>(elem.getAccessibleName()); expectType<ElementValue<string>>(elem.accessibleName()); expectType<ElementValue<string>>(elem.getComputedLabel()); expectType<ElementValue<string>>(elem.getAriaRole()); expectType<ElementValue<string>>(elem.ariaRole()); expectType<ElementValue<string>>(elem.getComputedRole()); expectType<ElementValue<string>>(elem.getCssProperty('height')); expectType<ElementValue<string>>(elem.css('height')); expectType<ElementValue<string>>(elem.getCssValue('height')); expectType<ElementValue<string>>(elem.takeScreenshot()); expectType<Promise<WebElement>>(elem.click()); expectType<Promise<WebElement>>(elem.clear()); expectType<Promise<WebElement>>(elem.check()); expectType<Promise<WebElement>>(elem.uncheck()); expectType<Promise<WebElement>>(elem.sendKeys('something', 1)); expectType<Promise<WebElement>>(elem.update('something', 1)); expectType<Promise<WebElement>>(elem.setValue('something', 1)); expectType<Promise<WebElement>>(elem.submit()); expectType<Promise<WebElement>>(elem.setProperty('type', 'text')); expectType<Promise<WebElement>>(elem.setAttribute('role', 'button')); expectType<Promise<WebElement>>(elem.dragAndDrop({x: 150, y: 500})); expectType<Promise<WebElement>>(elem.dragAndDrop(elem.webElement)); expectType<Promise<WebElement>>(elem.moveTo(100, 100)); expectType<Promise<WebElement>>(elem.clickAndHold()); expectType<Promise<WebElement>>(elem.doubleClick()); expectType<Promise<WebElement>>(elem.rightClick()); expectType<Promise<WebElement>>(elem.waitUntil('visible', {timeout: 5000})); }); test('test element assertions', async function () { const elem = browser.element('selector'); expectType<ScopedElement>(elem); expectType<ElementAssertions>(elem.assert) expectType<ElementAssertions>(elem.assert.not); expectType<Promise<WebElement>>(elem.assert.enabled('some message')); expectType<WebElement>(await elem.assert.not.enabled()); expectType<Promise<WebElement>>(elem.assert.not.present()); expectType<WebElement>(await elem.assert.selected('some message')); expectType<Promise<WebElement>>(elem.assert.not.selected('some message')); expectType<WebElement>(await elem.assert.selected()); expectType<Promise<WebElement>>(elem.assert.visible()); expectType<WebElement>(await elem.assert.not.visible('some message')); expectType<Promise<WebElement>>(elem.assert.not.hasClass('some-class')); expectType<WebElement>(await elem.assert.hasClass('some-class', 'some message')); expectType<Promise<WebElement>>(elem.assert.hasAttribute('some-attribute', 'some message')); expectType<WebElement>(await elem.assert.not.hasAttribute('some-attribute')); expectType<Promise<WebElement>>(elem.assert.hasDescendants()); expectType<WebElement>(await elem.assert.not.hasDescendants('some message')); }); test('test ElementValue methods/properties', async function () { const elem = browser.element('selector'); expectType<ScopedElement>(elem); const elemId = elem.getId(); expectType<ElementValue<string>>(elemId); expectType<string>(await elemId); expectType<Promise<string>>(elemId.value); expectType<string>(await elemId.value); expectType<ValueAssertions<string>>(elemId.assert); expectType<Promise<string>>(elemId.assert.equals('elem-id')); }); test('test ValueAssertions methods/properties', async function () { const elem = browser.element('selector'); expectType<ScopedElement>(elem); const elemId = elem.getId(); expectType<ValueAssertions<string>>(elemId.assert); expectType<ValueAssertions<string>>(elemId.assert.not); expectType<Promise<string>>(elemId.assert.equals('some text')); expectType<string>(await elemId.assert.not.equals('some text', 'some message')); expectType<Promise<string>>(elemId.assert.not.contains('text', 'some message')); expectType<string>(await elemId.assert.contains('some')); expectType<Promise<string>>(elemId.assert.matches(/^some text/, 'some message')); expectType<string>(await elemId.assert.not.matches(/some t[a-z]{3}$/)); }); });