<commit_before>[url-webdriver]: https://www.w3.org/TR/webdriver/
[url-wiki]: https://en.wikipedia.org/wiki/Etaoin_shrdlu#Literature
[url-tests]: https://github.com/igrishaev/etaoin/blob/master/test/etaoin/api_test.clj
[url-doc]: http://grishaev.me/etaoin/
[url-slack]: https://clojurians.slack.com/messages/C7KDM0EKW/

# Etaion

Pure Clojure implementation of [Webdriver][url-webdriver] protocol. Use that
library to automate a browser, test your frontend behaviour, simulate human
actions or whatever you want.

It's named after [Etaoin Shrdlu][url-wiki] -- a typing machine that became alive
after a mysteries note was produced on it.

# Table of Contents

<!-- toc -->

- [Benefits](#benefits)
- [Capabilities](#capabilities)
- [Who uses it?](#who-uses-it)
- [Documentation](#documentation)
- [Installation](#installation)
- [Basic Usage](#basic-usage)
  * [From REPL](#from-repl)
- [Advanced Usage](#advanced-usage)
  * [Working with multiple elements](#working-with-multiple-elements)
  * [File uploading](#file-uploading)
  * [Using headless drivers](#using-headless-drivers)
  * [Postmortem: auto-save artifacts in case of exception](#postmortem-auto-save-artifacts-in-case-of-exception)
  * [Reading browser's logs](#reading-browsers-logs)
  * [Additional parameters](#additional-parameters)
  * [Setting browser profile](#setting-browser-profile)
    + [Create and find a profile in Chrome](#create-and-find-a-profile-in-chrome)
    + [Create and find a profile in Firefox](#create-and-find-a-profile-in-firefox)
    + [Running a driver with a profile](#running-a-driver-with-a-profile)
  * [Scrolling](#scrolling)
  * [Working with frames and iframes](#working-with-frames-and-iframes)
  * [Wait functions](#wait-functions)
- [Writing Integration Tests For Your Application](#writing-integration-tests-for-your-application)
  * [Basic fixture](#basic-fixture)
  * [Multi-Driver Fixtures](#multi-driver-fixtures)
  * [Postmortem Handler To Collect Artifacts](#postmortem-handler-to-collect-artifacts)
  * [Running Tests By Tag](#running-tests-by-tag)
- [Installing Drivers](#installing-drivers)
- [Troubleshooting](#troubleshooting)
  * [Calling maximize function throws an error](#calling-maximize-function-throws-an-error)
  * [Clicking On Non-Visible Element](#clicking-on-non-visible-element)
  * [Unpredictable errors in Chrome when window is not active](#unpredictable-errors-in-chrome-when-window-is-not-active)
- [Contributors](#contributors)
- [Other materials](#other-materials)
- [License](#license)

<!-- tocstop -->
<commit_msg>88 toc updated<commit_after>[url-webdriver]: https://www.w3.org/TR/webdriver/
[url-wiki]: https://en.wikipedia.org/wiki/Etaoin_shrdlu#Literature
[url-tests]: https://github.com/igrishaev/etaoin/blob/master/test/etaoin/api_test.clj
[url-doc]: http://grishaev.me/etaoin/
[url-slack]: https://clojurians.slack.com/messages/C7KDM0EKW/

# Etaion

Pure Clojure implementation of [Webdriver][url-webdriver] protocol. Use that
library to automate a browser, test your frontend behaviour, simulate human
actions or whatever you want.

It's named after [Etaoin Shrdlu][url-wiki] -- a typing machine that became alive
after a mysteries note was produced on it.

# Table of Contents

<!-- toc -->

- [Benefits](#benefits)
- [Capabilities](#capabilities)
- [Who uses it?](#who-uses-it)
- [Documentation](#documentation)
- [Installation](#installation)
- [Basic Usage](#basic-usage)
  * [From REPL](#from-repl)
- [Advanced Usage](#advanced-usage)
  * [Working with multiple elements](#working-with-multiple-elements)
  * [File uploading](#file-uploading)
  * [Using headless drivers](#using-headless-drivers)
  * [Postmortem: auto-save artifacts in case of exception](#postmortem-auto-save-artifacts-in-case-of-exception)
  * [Reading browser's logs](#reading-browsers-logs)
  * [Additional parameters](#additional-parameters)
  * [Setting browser profile](#setting-browser-profile)
    + [Create and find a profile in Chrome](#create-and-find-a-profile-in-chrome)
    + [Create and find a profile in Firefox](#create-and-find-a-profile-in-firefox)
    + [Running a driver with a profile](#running-a-driver-with-a-profile)
  * [Scrolling](#scrolling)
  * [Working with frames and iframes](#working-with-frames-and-iframes)
  * [Executing Javascript](#executing-javascript)
    + [Asynchronous scripts](#asynchronous-scripts)
  * [Wait functions](#wait-functions)
- [Writing Integration Tests For Your Application](#writing-integration-tests-for-your-application)
  * [Basic fixture](#basic-fixture)
  * [Multi-Driver Fixtures](#multi-driver-fixtures)
  * [Postmortem Handler To Collect Artifacts](#postmortem-handler-to-collect-artifacts)
  * [Running Tests By Tag](#running-tests-by-tag)
- [Installing Drivers](#installing-drivers)
- [Troubleshooting](#troubleshooting)
  * [Calling maximize function throws an error](#calling-maximize-function-throws-an-error)
  * [Clicking On Non-Visible Element](#clicking-on-non-visible-element)
  * [Unpredictable errors in Chrome when window is not active](#unpredictable-errors-in-chrome-when-window-is-not-active)
- [Contributors](#contributors)
- [Other materials](#other-materials)
- [License](#license)

<!-- tocstop -->

{'fraction_non_alphanumeric': 0.1518354795310398, 'fraction_numerical': 0.001537574476263694, 'mean_word_length': 5.1295641931684335, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 8, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1903603', 'n_tokens_mistral': 1791, 'n_tokens_neox': 1633, 'n_words': 344}