# Taiko Automation

Using [Taiko](https://github.com/getgauge/taiko) for user journey automation.

## Software needed for script execution

- Operating System - **Microsoft Windows 10**  
- IDE - **[Microsoft Visual Studio Code](https://code.visualstudio.com/Download)**  
- JavaScript runtime - **[Node.js](https://nodejs.org/en/download/)**  
- Browser - **[Chromium](https://github.com/chromium/chromium)** (downloaded during installation of Taiko)

## Programming language used

- [JavaScript (JS)](https://developer.mozilla.org/en-US/docs/Web/JavaScript)

## Node package needed for script execution

- [Taiko](https://www.npmjs.com/package/taiko) - Install globally on your machine using the code

```
    npm install -g taiko
    ```  
- [Lighthouse](https://www.npmjs.com/package/lighthouse) - This is for generating Google Lighthouse reports. Install globally on your machine using the code below.

```
    npm install -g lighthouse
    ```  
- [dotenv](https://www.npmjs.com/package/dotenv) - This is for using variables in your code. Install globally on your machine using the code below.

```
    npm install -g dotenv
    ```  
- [Taiko Screencast plugin](https://www.npmjs.com/package/taiko-screencast) - This is for creating a gif for your code execution. Install globally on your machine using the code below.

```
    npm install -g taiko-screencast
    ```  
- [Taiko Diagnostics plugin](https://www.npmjs.com/package/taiko-diagnostics) - This provides some diagnostics features like measuring speedindex, performance metrics of webpage. Install globally on your machine using the code below.

```
    npm install -g taiko-diagnostics
    ```

## Check installed node packages

```bash
npm list -g --depth 0
```

## How to execute

- Type the following in your terminal if you are executing the code from the **folder in which the script exists**

```
    taiko <filename>
    ```  
- Type the following in your terminal if you are executing the code from the **folder in which the script doesn't exist**

```
    taiko <full file path with filename>
    ```

## How to execute with plugin

- Type the following in your terminal if you are executing the code from the **folder in which the script exists**

```
    taiko <filename> --plugin <plugin name>
    ```  
- Type the following in your terminal if you are executing the code from the **folder in which the script doesn't exist**

```
    taiko <full file path with filename> --plugin <plugin name>
    ```

## How to use environment variables

- Variables you can use - [Taiko environment variables](https://docs.taiko.dev/#taiko-env-variables)
- How to use variables - [Set an Environment Variable in Windows - GUI](http://www.dowdandassociates.com/blog/content/howto-set-an-environment-variable-in-windows-gui/)  
- Screenshot for reference below -

- Alternatively try this command on Windows

```
    setx <variable name> "value"
    ```

## Code execution demo on YouTube

- [Rapha.cc](https://www.youtube.com/watch?v=0ErzwZyZDgY) - _Taiko-Rapha.js_
- [BT.com](https://www.youtube.com/watch?v=-orYOGBYRQc) - _Taiko-BT.js_
- [The-Internet.Herokuapp.com](https://www.youtube.com/watch?v=dp1PeXhXYI4) - _Taiko-InternetHerokuApp.js_

## Container execution

#### NOTE - Please make sure the script you want to execute is running in headless mode

1. Clone this repo to your local machine
2. Change to repo directory
3. Build a docker image using the command

```
    docker build -t <name-of-docker-image> .
    ```  
   Sample output

```
    neo@ubuntu:~/Downloads/Taiko-Scripts$ sudo docker build -t taiko-new .
    Sending build context to Docker daemon  166.4kB
    Step 1/11 : FROM node:12.18.0-stretch-slim AS builder
    ---> 775e76326355
    ...
    Successfully tagged taiko-new:latest
    ```

1. Verify image created successfully by running following code

```
    docker run -it <name-of-docker-image> bash
    ```
    Sample output

```
    neo@ubuntu:~/Downloads/Taiko-Scripts$ sudo docker run -it taiko-new bash
    test@f0c2a6f3b48f:~/Taiko-Scripts$ ls -ltr
    total 108
    -rw-rw-r-- 1 test test 2516 Jun 26 13:16 Taiko-UltimateQA.js
    ...
    -rw-rw-r-- 1 test test 1463 Jun 26 13:16 Taiko-BT-Headless.js
    -rw-rw-r-- 1 test test 1739 Jun 26 13:16 README.md
    -rw-rw-r-- 1 test test  894 Jun 26 13:16 OB.ico
    -rw-rw-r-- 1 test test 1068 Jun 26 13:16 LICENSE
    -rw-rw-r-- 1 test test 1506 Jun 26 14:56 Dockerfile
    ```

1. Run Docker image using the command

```
    docker run -t <name-of-docker-image>
    ```
    Sample output

```
    neo@ubuntu:~/Downloads/Taiko-Scripts$ sudo docker run -t taiko-new
    ✔ Browser opened
    ✔ Navigated to URL http://google.com
    ...
    ✔ Browser closed
    ```

1. Run another Taiko script using the command

```
    docker run -t <name-of-docker-image> taiko <name-of-taiko-script>
    ```
    Sample output

```
    neo@ubuntu:~/Downloads/Taiko-Scripts$ sudo docker run -t taiko-new taiko Taiko-BT-Headless.js
    ✔ Browser opened
    ✔ Navigated to URL http://bt.com
    ...
    ✔ Browser closed
    ```

## Remove all docker resources

Clean all docker images/containers/volumes using this [bash script](https://gist.github.com/rafaelaazevedo/bec6cf339888bbac60336d01193ae923) by [Rafaela Azevedo](https://github.com/rafaelaazevedo)

## Syntax help

[Taiko documentation](https://docs.taiko.dev/)  
On this page
