---
title: Protractor
layout: default
toc: true
nav: rule
---
<!-- *********************
  DO NOT EDIT THIS FILE
  It is a generated build output from Stardoc.
  Instead you must edit the .bzl file where the rules are declared,
  or possibly a markdown file next to the .bzl file
 ********************* -->

# Protractor rules for Bazel

The Protractor rules run tests under the Protractor framework with Bazel.

## Installation

Add the `@bazel/protractor` npm package to your `devDependencies` in `package.json`.


## protractor_web_test

**USAGE**

<pre>
protractor_web_test(<a href="#protractor_web_test-name">name</a>, <a href="#protractor_web_test-configuration">configuration</a>, <a href="#protractor_web_test-on_prepare">on_prepare</a>, <a href="#protractor_web_test-srcs">srcs</a>, <a href="#protractor_web_test-deps">deps</a>, <a href="#protractor_web_test-data">data</a>, <a href="#protractor_web_test-server">server</a>, <a href="#protractor_web_test-tags">tags</a>, <a href="#protractor_web_test-peer_deps">peer_deps</a>,
                    <a href="#protractor_web_test-protractor_entry_point">protractor_entry_point</a>, <a href="#protractor_web_test-kwargs">kwargs</a>)
</pre>

Runs a protractor test in a browser.

**PARAMETERS**


<h4 id="protractor_web_test-name">name</h4>

The name of the test



<h4 id="protractor_web_test-configuration">configuration</h4>

Protractor configuration file.

Defaults to `None`

<h4 id="protractor_web_test-on_prepare">on_prepare</h4>

A file with a node.js script to run once before all tests run.
If the script exports a function which returns a promise, protractor
will wait for the promise to resolve before beginning tests.

Defaults to `None`

<h4 id="protractor_web_test-srcs">srcs</h4>

JavaScript source files

Defaults to `[]`

<h4 id="protractor_web_test-deps">deps</h4>

Other targets which produce JavaScript such as `ts_library`

Defaults to `[]`

<h4 id="protractor_web_test-data">data</h4>

Runtime dependencies

Defaults to `[]`

<h4 id="protractor_web_test-server">server</h4>

Optional server executable target

Defaults to `None`

<h4 id="protractor_web_test-tags">tags</h4>

Standard Bazel tags, this macro adds one for ibazel

Defaults to `[]`

<h4 id="protractor_web_test-peer_deps">peer_deps</h4>

List of peer npm deps required by protractor_web_test

Defaults to `["@npm//@bazel/protractor", "@npm//protractor"]`

<h4 id="protractor_web_test-protractor_entry_point">protractor_entry_point</h4>

A label providing the protractor entry point
Default to `:node_modules/protractor/bin/protractor`.

Defaults to `"@npm//:node_modules/protractor/bin/protractor"`

<h4 id="protractor_web_test-kwargs">kwargs</h4>

passed through to `protractor_web_test`




## protractor_web_test_suite

**USAGE**

<pre>
protractor_web_test_suite(<a href="#protractor_web_test_suite-name">name</a>, <a href="#protractor_web_test_suite-browsers">browsers</a>, <a href="#protractor_web_test_suite-web_test_data">web_test_data</a>, <a href="#protractor_web_test_suite-wrapped_test_tags">wrapped_test_tags</a>, <a href="#protractor_web_test_suite-kwargs">kwargs</a>)
</pre>

Defines a test_suite of web_test targets that wrap a protractor_web_test target.

**PARAMETERS**


<h4 id="protractor_web_test_suite-name">name</h4>

The base name of the test



<h4 id="protractor_web_test_suite-browsers">browsers</h4>

A sequence of labels specifying the browsers to use.

Defaults to `None`

<h4 id="protractor_web_test_suite-web_test_data">web_test_data</h4>

Data dependencies for the wrapper web_test targets.

Defaults to `[]`

<h4 id="protractor_web_test_suite-wrapped_test_tags">wrapped_test_tags</h4>

A list of test tag strings to use for the wrapped
karma_web_test target.

Defaults to `["manual", "noci"]`

<h4 id="protractor_web_test_suite-kwargs">kwargs</h4>

Arguments for the wrapped karma_web_test target.




