[![npm version](https://img.shields.io/npm/v/chrominator.svg?style=flat-square)](https://www.npmjs.com/package/chrominator)

[![Build Status](https://travis-ci.org/jesg/chrominator.svg?branch=master)](https://travis-ci.org/jesg/chrominator)

a high level api to chrome debugger for automation.

currently working on core api built on promises.  might provide a high level fluent api similar to nightmarejs in the future.

```javascript
const Chrominator = require('chrominator');

Chrominator(async (driver) => {
    await driver.navigate('https://www.google.com')
    const search = await driver.querySelector('input[name="q"]')
    await search.sendKeys('yellow\n');
    await driver.delay(1000);
    await driver.screenshot('screenshot.png')
});
```

# API

<!-- Generated by documentation.js. Update this documentation by updating the source code. -->

## Driver

Abstraction to drive a webpage

### setSize

Set the window size

Warning: depends on an unstable api

**Parameters**

-   `options` **[object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

**Examples**

```javascript
await driver.setSize({width: 1366 , height: 768})
```

### navigate

Navigate to a page and wait for the page to load.

available page load strategies:

-   none
-   loading
-   interactive
-   complete (default)

All the page load strategies but none correspond to the `document.readyState`.  The none strategy does not wait for anything.

The default page load strategy can be overridden globally by setting `driver.pageLoadStrategy`.

The default timeout is 300,000 ms (5 minutes).  It can be overridded globally by setting `driver.timeouts.pageLoad`.

**Parameters**

-   `args`  

**Examples**

```javascript
await driver.navigate({url: 'http://google.com', pageLoadStrategy: 'interactive', timeout: 1000})
// or
await driver.navigate('http://google.com')
```

### waitForPageLoad

Wait for an action to trigger a page load.

The action should return a `Promise`.

**Parameters**

-   `args`  

**Examples**

```javascript
await driver.waitForPageLoad({action: () => { return driver.reload() }, pageLoadStrategy: 'interactive', timeout: 200})
or
await driver.waitForPageLoad(() => { return node.click() })
```

### title

Get the title of the current page

**Examples**

```javascript
title = await driver.title()
```

Returns **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 

### handleJavaScriptDialog

Handle a javascript dialog

**Parameters**

-   `options` **[object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

**Examples**

```javascript
await driver.handleJavaScriptDialog({accept: true})
// or accept and enter prompt text
await driver.handleJavaScriptDialog({accept: true, promptText: 'hello'})
```

### triggerDialog

Trigger and wait for a dialog to open.

Warning: upstream alert handling is broken.

**Parameters**

-   `options`  

**Examples**

```javascript
await driver.driver.triggerDialog(() => { return node.click() })
// or
await driver.driver.triggerDialog({action: () => { return node.click() }})
```

Returns **[Alert](https://developer.mozilla.org/en-US/docs/Web/API/Window/alert)** 

### waitForEvent

Simple utility to convert a one time event listener into a Promise.

**Parameters**

-   `eventName` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** name of the event in chrome remote debugger
-   `options` **([object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) \| [function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function))** 

**Examples**

```javascript
const waiter = driver.waitForEvent('Page.javascriptDialogOpening')
await node.click()
const dialog = await waiter
// or
const dialog = await driver.waitForEvent('Page.javascriptDialogOpening', () => { node.click() })
```

### querySelector

Search for a Node in the current document

**Parameters**

-   `args` **([Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) \| [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String))** selector arguments or selector

**Examples**

```javascript
node = await driver.querySelector({selector: '#my-id'})
node = await driver.querySelector('#my-id')
```

Returns **[Node](#node)** 

### querySelectorAll

Search for Nodes in the current document

**Parameters**

-   `args` **([Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) \| [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String))** selector arguments or selector

**Examples**

```javascript
nodes = await driver.querySelectorAll({selector: 'a'})
nodes = await driver.querySelectorAll('a')
```

Returns **[Node](#node)** 

### reload

Reload the current page

available page load strategies:

-   none
-   loading
-   interactive
-   complete (default)

All the page load strategies but none correspond to the `document.readyState`.  The none strategy does not wait for anything.

The default page load strategy can be overridden globally by setting `driver.pageLoadStrategy`.

The default timeout is 300,000 ms (5 minutes).  It can be overridded globally by setting `driver.timeouts.pageLoad`.

**Parameters**

-   `args`  

**Examples**

```javascript
await driver.reload()
or
await driver.reload({pageLoadStrategy: 'interactive', timeout: 200})
```

### pdf

Print the current page to pdf.

**Parameters**

-   `options` **([Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) \| [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [undefined](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined))** pdf options

**Examples**

```javascript
// writes image to file
driver.pdf({path: '/opt/save.pdf'})

// writes image to file
driver.pdf('/opt/save.pdf')

// returns base64 encoding
driver.pdf()
```

### screenshot

Take a screenshot

**Parameters**

-   `options` **([Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) \| [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [undefined](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined))** image options

**Examples**

```javascript
// writes image to file
driver.screenshot({path: 'screenshot.png'});

// writes image to file
driver.screenshot('screenshot.png');

// returns base64 encoding.
driver.screenshot();
```

### setUserAgent

Set the browsers user agent

**Parameters**

-   `args` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

**Examples**

```javascript
driver.setUserAgent({userAgent: 'chrominator'})
```

### getCookies

Get cookies

**Parameters**

-   `args` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

**Examples**

```javascript
cookies = await driver.getCookies({urls: ['https://www.google.com/intl/en/ads']})
```

### getCurrentCookies

Get cookies for the current page

**Examples**

```javascript
cookies = await driver.getCookies()
```

### getAllCookies

Get All cookies

### deleteCookie

Delete a cookie.

The second parameter `url` is optional.  The current url is used
if nothing is provided.

**Parameters**

-   `name` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** The cookie name
-   `url` **([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [undefined](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined))** The url the cookie is on

**Examples**

```javascript
// delete cookie on a specific url
await driver.deleteCookie('_ga', 'https://www.google.com/intl')
or
// delete cookie on the current url
await driver.deleteCookie('_ga')
```

### deleteAllCookies

Delete All cookies

### setCookie

Set a cookie

**Parameters**

-   `args`  

**Examples**

```javascript
// set a cookie to a value on the current page
await driver.setCookie({name: 'foo', value: 'bar'})
or
await driver.setCookie({name: 'foo', value: 'bar', url: 'https://www.google.com/intl'})
```

### setContent

Set the page content

**Parameters**

-   `html`  

**Examples**

```javascript
driver.setContent('<div>hello</div>')
```

### delay

Async delay.

**Parameters**

-   `ms` **[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** number of milliseconds

**Examples**

```javascript
await driver.delay(500)
```

### evaluate

Evaluate javascript

**Parameters**

-   `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

**Examples**

```javascript
result = await node.evaluate({
    functionDeclaration: function(n) {
        return n + 1;
    },
    args: [n],
});
```

Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** resolved object

### evaluateAsync

Evaluate Asynchronous javascript

The `functionDeclaration` must call either `resolve` to resolve the promise or `reject` to reject the promise.

**Parameters**

-   `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** resolved object

### currentUrl

Get the url of the current page

**Examples**

```javascript
url = await driver.currentUrl()
```

Returns **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** the current url

### until

Wait for a condition to be satisfied.

**Parameters**

-   `condition` **[function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** The condition to wait for.

**Examples**

```javascript
node = await driver.until(ExpectedConditions.isNodePresent({selector: 'button[value="Search"]'}))
```

### until_not

Wait for a condition to not be satisfied.

**Parameters**

-   `condition` **[function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** The condition to wait for.

**Examples**

```javascript
node = await driver.until_not(ExpectedConditions.isNodePresent({selector: 'button[value="Search"]'}))
```

### waitForNodePresent

Wait for a Node to be present

**Parameters**

-   `selector` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** css selector

**Examples**

```javascript
node = await driver.waitForNodePresent('button[value="Search"]')
```

Returns **[Node](#node)** 

### waitForNodeNotPresent

Wait for a Node to not be present

**Parameters**

-   `selector` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** css selector

**Examples**

```javascript
node = await driver.waitForNodeNotPresent('button[value="Search"]')
```

### waitForNodeClickable

Wait for a Node to be clickable

**Parameters**

-   `selector` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** css selector

**Examples**

```javascript
node = await driver.waitForNodeClickable('button[value="Search"]')
```

Returns **[Node](#node)** 

### waitForNodeNotClickable

Wait for a Node to not be clickable

**Parameters**

-   `selector` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** css selector

**Examples**

```javascript
node = await driver.waitForNodeNotClickable('button[value="Search"]')
```

Returns **[Node](#node)** 

### waitForTitle

Wait for title

**Parameters**

-   `title` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** page title

**Examples**

```javascript
await driver.waitForTitle('Google')
```

### createDriver

Create and initialize the driver.

**Parameters**

-   `crd` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** an instance of chrome remote debugger

**Examples**

```javascript
Driver.createDriver(crd)
```

## Dialog

**Parameters**

-   `driver` **[Driver](#driver)** 
-   `data`  
-   `alert` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** alert meta-data

### dismiss

Dismiss a JavaScript Dialog

**Examples**

```javascript
await alert.dismiss()
```

### accept

Accept a JavaScript Dialog

**Examples**

```javascript
await alert.accept()
```

### handle

Handle a JavaScript Dialog

**Parameters**

-   `options`  

**Examples**

```javascript
await alert.handle({accept: true})
// or
await alert.handle({accept: true, promptText: 'hello'})
```

## Dialog

Abstract JavaScript Dialog

Warning: broken upstream

**Parameters**

-   `driver`  
-   `data`  

### dismiss

Dismiss a JavaScript Dialog

**Examples**

```javascript
await alert.dismiss()
```

### accept

Accept a JavaScript Dialog

**Examples**

```javascript
await alert.accept()
```

### handle

Handle a JavaScript Dialog

**Parameters**

-   `options`  

**Examples**

```javascript
await alert.handle({accept: true})
// or
await alert.handle({accept: true, promptText: 'hello'})
```

## Node

Abstract DOM Element

**Parameters**

-   `driver`  
-   `nodeId`  

### getAttributes

Get the Node's attributes.

**Examples**

```javascript
attributes = await node.getAttributes()
```

Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** The attributes as key-value pairs.

### getAttribute

Get an attribute on the node.

**Parameters**

-   `name` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** attribute name

**Examples**

```javascript
value = await node.getAttribute('class')
```

Returns **([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) | null)** attribute value or null if the attribute does not exist

### querySelector

Search for a descendent of the current Node.

**Parameters**

-   `args` **([Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) \| [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String))** selector arguments or selector

**Examples**

```javascript
node = await node.querySelector({selector: '#my-id'})
node = await node.querySelector('#my-id')
```

Returns **[Node](#node)** 

### querySelectorAll

Search for descendents of the current Node.

**Parameters**

-   `args` **([Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) \| [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String))** selector arguments or selector

**Examples**

```javascript
nodes = await node.querySelectorAll({selector: 'a'})
nodes = await node.querySelectorAll('a')
```

Returns **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)&lt;[Node](#node)>** 

### setFileInput

Set file selection on a file input element.

**Parameters**

-   `args` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

**Examples**

```javascript
node.setFileInput({files: ['/opt/my-file.txt']})
```

### focus

Focus on the Node

**Examples**

```javascript
node.focus()
```

### clickableAt

Test if the Node is clickable at a given location.

**Parameters**

-   `args` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

Returns **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** true if the element will directly receive a click event, otherwise false

### resolveNodeAtDefaultClickPoint

Resolve Node at default click point

**Parameters**

-   `args` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

Returns **[Node](#node)** Node to directly receive click

### isClickable

Determine if the Node will receive a click

**Parameters**

-   `args` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

Returns **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** 

### getClickCoords

Calculate coordinates at the center of the Node for the click event.

Returns **{x: [Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number), y: [Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)}** coordinates for the click event.

### click

Click on the Node.

**Parameters**

-   `args`  
-   `Object`  

**Examples**

```javascript
node.click()
```

### hover

Hover on the Node.

**Parameters**

-   `args`  
-   `Object`  

**Examples**

```javascript
node.hover()
```

### sendKeys

Type text to the Node

**Parameters**

-   `text` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** text to type into the node

**Examples**

```javascript
node.sendKeys('jesg')
```

### setProperty

Set a property on the Node

**Parameters**

-   `name` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** properties name
-   `value` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** properties value

**Examples**

```javascript
node.setProperty('value', 'jesg')
```

### getProperty

Get a property on the Node

**Parameters**

-   `name` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** properties name

**Examples**

```javascript
value = await node.getProperty('value')
```

Returns **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** properties value

### getProperties

Get the Node's properties

**Examples**

```javascript
properties = await node.getProperties()
```

Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** properties as key-value pairs

### evaluate

Evaluate javascript in the context of this Node.

**Parameters**

-   `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

**Examples**

```javascript
propertyValue = await node.evaluate({
    functionDeclaration: function(name) {
        return this[name];
    },
    args: [name],
});
```

Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** resolved object

### evaluateAsync

Evaluate Asynchronous javascript in the context of this Node.

The `functionDeclaration` must call either `resolve` to resolve the promise or `reject` to reject the promise.

**Parameters**

-   `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** resolved object

### equal

Test if the Node is equal to another Node.

**Parameters**

-   `node` **[Node](#node)** The Node to test against

Returns **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** 

### text

Get visible text.

The current implementation does not clean whitespace.

**Parameters**

-   `node`  

Returns **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 

## Node

**Parameters**

-   `driver` **[Driver](#driver)** 
-   `nodeId` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** The nodes node id

### getAttributes

Get the Node's attributes.

**Examples**

```javascript
attributes = await node.getAttributes()
```

Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** The attributes as key-value pairs.

### getAttribute

Get an attribute on the node.

**Parameters**

-   `name` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** attribute name

**Examples**

```javascript
value = await node.getAttribute('class')
```

Returns **([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) | null)** attribute value or null if the attribute does not exist

### querySelector

Search for a descendent of the current Node.

**Parameters**

-   `args` **([Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) \| [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String))** selector arguments or selector

**Examples**

```javascript
node = await node.querySelector({selector: '#my-id'})
node = await node.querySelector('#my-id')
```

Returns **[Node](#node)** 

### querySelectorAll

Search for descendents of the current Node.

**Parameters**

-   `args` **([Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) \| [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String))** selector arguments or selector

**Examples**

```javascript
nodes = await node.querySelectorAll({selector: 'a'})
nodes = await node.querySelectorAll('a')
```

Returns **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)&lt;[Node](#node)>** 

### setFileInput

Set file selection on a file input element.

**Parameters**

-   `args` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

**Examples**

```javascript
node.setFileInput({files: ['/opt/my-file.txt']})
```

### focus

Focus on the Node

**Examples**

```javascript
node.focus()
```

### clickableAt

Test if the Node is clickable at a given location.

**Parameters**

-   `args` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

Returns **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** true if the element will directly receive a click event, otherwise false

### resolveNodeAtDefaultClickPoint

Resolve Node at default click point

**Parameters**

-   `args` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

Returns **[Node](#node)** Node to directly receive click

### isClickable

Determine if the Node will receive a click

**Parameters**

-   `args` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

Returns **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** 

### getClickCoords

Calculate coordinates at the center of the Node for the click event.

Returns **{x: [Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number), y: [Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)}** coordinates for the click event.

### click

Click on the Node.

**Parameters**

-   `args`  
-   `Object`  

**Examples**

```javascript
node.click()
```

### hover

Hover on the Node.

**Parameters**

-   `args`  
-   `Object`  

**Examples**

```javascript
node.hover()
```

### sendKeys

Type text to the Node

**Parameters**

-   `text` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** text to type into the node

**Examples**

```javascript
node.sendKeys('jesg')
```

### setProperty

Set a property on the Node

**Parameters**

-   `name` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** properties name
-   `value` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** properties value

**Examples**

```javascript
node.setProperty('value', 'jesg')
```

### getProperty

Get a property on the Node

**Parameters**

-   `name` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** properties name

**Examples**

```javascript
value = await node.getProperty('value')
```

Returns **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** properties value

### getProperties

Get the Node's properties

**Examples**

```javascript
properties = await node.getProperties()
```

Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** properties as key-value pairs

### evaluate

Evaluate javascript in the context of this Node.

**Parameters**

-   `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

**Examples**

```javascript
propertyValue = await node.evaluate({
    functionDeclaration: function(name) {
        return this[name];
    },
    args: [name],
});
```

Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** resolved object

### evaluateAsync

Evaluate Asynchronous javascript in the context of this Node.

The `functionDeclaration` must call either `resolve` to resolve the promise or `reject` to reject the promise.

**Parameters**

-   `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 

Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** resolved object

### equal

Test if the Node is equal to another Node.

**Parameters**

-   `node` **[Node](#node)** The Node to test against

Returns **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** 

### text

Get visible text.

The current implementation does not clean whitespace.

**Parameters**

-   `node`  

Returns **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 

## ExpectedConditions

Common expected conditions.

### isNodePresent

Tests if a Node is present.

**Parameters**

-   `options`  

**Examples**

```javascript
// returns Node
driver.until(ExpectedConditions.isNodePresent({selector: 'button[value="Search"]'}))
```

### isNodeClickable

Tests if a Node is clickable.

**Parameters**

-   `options`  

**Examples**

```javascript
// returns Node
driver.until(ExpectedConditions.isNodeClickable({selector: 'button[value="Search"]'}))
```

### titleIs

Tests the page title

**Parameters**

-   `desiredTitle`  

**Examples**

```javascript
// returns Node
driver.until(ExpectedConditions.titleIs('Google'))
```

### nodeTextToEqual

Tests the nodes text

**Parameters**

-   `node`  
-   `desiredText`  

**Examples**

```javascript
await driver.until(ExpectedConditions.nodeTextToEqual(node, 'Google'))
```

### nodeValueToEqual

Tests the nodes value

**Parameters**

-   `node`  
-   `desiredValue`  

**Examples**

```javascript
await driver.until(ExpectedConditions.nodeValueToEqual(node, 'Google'))
```

# License

MIT
