diff --git a/examples/cookbooks/AI-CourtSimulation.ipynb b/examples/cookbooks/AI-CourtSimulation.ipynb new file mode 100644 index 00000000..0c14218e --- /dev/null +++ b/examples/cookbooks/AI-CourtSimulation.ipynb @@ -0,0 +1,1614 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "4c03cd7e", + "metadata": { + "id": "4c03cd7e" + }, + "source": [ + "# โ๏ธ AI-CourtSimulation \n", + "\n", + "A simplified court case simulation with essential AI agents." + ] + }, + { + "cell_type": "markdown", + "source": [ + "[](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/LegaliaAI_MiniCourt.ipynb)\n" + ], + "metadata": { + "id": "k0GmORjCRMGL" + }, + "id": "k0GmORjCRMGL" + }, + { + "cell_type": "markdown", + "id": "98fc3316", + "metadata": { + "id": "98fc3316" + }, + "source": [ + "## Install Dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bb57c529", + "metadata": { + "id": "bb57c529" + }, + "outputs": [], + "source": [ + "!pip install praisonaiagents openai python-dotenv" + ] + }, + { + "cell_type": "markdown", + "id": "cfdb1a0c", + "metadata": { + "id": "cfdb1a0c" + }, + "source": [ + "## Import Libraries & Setup" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "f7c5e0a6", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "f7c5e0a6", + "outputId": "20b3baf7-6099-4c35-8ec8-9d5659553c30" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "โ Setup complete!\n" + ] + } + ], + "source": [ + "import os\n", + "from dotenv import load_dotenv\n", + "from IPython.display import display, HTML\n", + "import time\n", + "\n", + "load_dotenv()\n", + "\n", + "# Setup API key\n", + "api_key = os.getenv('OPENAI_API_KEY')\n", + "if not api_key:\n", + " print(\"๐ Enter your OpenAI API key:\")\n", + " api_key = input(\"API Key: \").strip()\n", + " os.environ['OPENAI_API_KEY'] = \"Enter your api key\"\n", + "\n", + "print(\"โ Setup complete!\")\n" + ] + }, + { + "cell_type": "markdown", + "id": "b6c7c2f3", + "metadata": { + "id": "b6c7c2f3" + }, + "source": [ + "## Create Mini Agents" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "6d7a8426", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "6d7a8426", + "outputId": "7851dfcc-14e1-4714-fc84-f26289d87dcf" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "โ Mini agents created!\n" + ] + } + ], + "source": [ + "from praisonaiagents import Agent\n", + "\n", + "# Judge Agent\n", + "judge = Agent(\n", + " name=\"Judge\",\n", + " role=\"Preside over court proceedings\",\n", + " llm=\"gpt-4o-mini\",\n", + " instructions=[\n", + " \"You are an impartial judge\",\n", + " \"Make fair decisions based on evidence\",\n", + " \"Keep responses under 100 words\"\n", + " ],\n", + " markdown=True\n", + ")\n", + "\n", + "# Prosecutor Agent\n", + "prosecutor = Agent(\n", + " name=\"Prosecutor\",\n", + " role=\"Present case against defendant\",\n", + " llm=\"gpt-4o-mini\",\n", + " instructions=[\n", + " \"You are a prosecutor seeking conviction\",\n", + " \"Present evidence methodically\",\n", + " \"Keep responses under 80 words\"\n", + " ],\n", + " markdown=True\n", + ")\n", + "\n", + "# Defense Agent\n", + "defense = Agent(\n", + " name=\"Defense\",\n", + " role=\"Defend the accused\",\n", + " llm=\"gpt-4o-mini\",\n", + " instructions=[\n", + " \"You are a defense attorney\",\n", + " \"Create reasonable doubt\",\n", + " \"Keep responses under 80 words\"\n", + " ],\n", + " markdown=True\n", + ")\n", + "\n", + "# Witness Agent\n", + "witness = Agent(\n", + " name=\"Witness\",\n", + " role=\"Provide testimony\",\n", + " llm=\"gpt-4o-mini\",\n", + " instructions=[\n", + " \"You are a witness testifying\",\n", + " \"Provide factual testimony\",\n", + " \"Keep responses under 60 words\"\n", + " ],\n", + " markdown=True\n", + ")\n", + "\n", + "print(\"โ Mini agents created!\")\n" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Case Details Input" + ], + "metadata": { + "id": "eMSO8H5jQx5O" + }, + "id": "eMSO8H5jQx5O" + }, + { + "cell_type": "code", + "source": [ + "# Simple case details\n", + "case_title = input(\"Case Title (e.g., 'State vs. Smith'): \") or \"State vs. Smith\"\n", + "case_description = input(\"Case Description: \") or \"Theft case involving stolen laptop\"\n", + "evidence = input(\"Key Evidence: \") or \"Security camera footage and witness testimony\"\n", + "\n", + "print(f\"\\n๐ Case: {case_title}\")\n", + "print(f\"๐ Description: {case_description}\")\n", + "print(f\"๐ Evidence: {evidence}\")\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fAIzu_3vPaHJ", + "outputId": "1df808db-e911-4e9f-ccf4-8c101040f89a" + }, + "id": "fAIzu_3vPaHJ", + "execution_count": 15, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Case Title (e.g., 'State vs. Smith'): Doe vs. Wilson\n", + "Case Description: The plaintiff claims to have suffered emotional distress due to repeated online harassment\n", + "Key Evidence: Screenshots of messages, social media posts, therapistโs report\n", + "\n", + "๐ Case: Doe vs. Wilson\n", + "๐ Description: The plaintiff claims to have suffered emotional distress due to repeated online harassment\n", + "๐ Evidence: Screenshots of messages, social media posts, therapistโs report\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "id": "6e418e95", + "metadata": { + "id": "6e418e95" + }, + "source": [ + "# Helper Functions (Fixed with .start())## Cell 4: Case Details Input" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "fd9da25c", + "metadata": { + "id": "fd9da25c" + }, + "outputs": [], + "source": [ + "# Display function\n", + "def show_message(name, role, message, color=\"#4CAF50\"):\n", + " html = f\"\"\"\n", + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Judge โ\n", + "โ Role: Preside over court proceedings โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Output()" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "74964427de63470da100903aac0b8c78" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [], + "text/html": [ + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\n" + ], + "text/html": [ + "
\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[2mResponse generated in 3.9s\u001b[0m\n" + ], + "text/html": [ + "
Response generated in 3.9s\n",
+ "
\n"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m You are Judge presiding over \"Doe vs. Wilson\". Open the court proceedings professionally. Case: The plaintiff \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m claims to have suffered emotional distress due to repeated online harassment Keep it brief and formal. \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n"
+ ],
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ You are Judge presiding over \"Doe vs. Wilson\". Open the court proceedings professionally. Case: The plaintiff โ\n", + "โ claims to have suffered emotional distress due to repeated online harassment Keep it brief and formal. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Court is now in session. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Case number 2023-001: Doe vs. Wilson. The plaintiff, Ms. Doe, alleges emotional distress resulting from \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m repeated online harassment by the defendant, Mr. Wilson. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Both parties will present their evidence and arguments. I remind all present to maintain decorum. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Let us proceed with the plaintiff's opening statement. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ], + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Court is now in session. โ\n", + "โ โ\n", + "โ Case number 2023-001: Doe vs. Wilson. The plaintiff, Ms. Doe, alleges emotional distress resulting from โ\n", + "โ repeated online harassment by the defendant, Mr. Wilson. โ\n", + "โ โ\n", + "โ Both parties will present their evidence and arguments. I remind all present to maintain decorum. โ\n", + "โ โ\n", + "โ Let us proceed with the plaintiff's opening statement. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Prosecutor โ\n", + "โ Role: Present case against defendant โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Output()" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "9e740fc3b45c454e96dfe29b4c0edb53" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [], + "text/html": [ + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\n" + ], + "text/html": [ + "
\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[2mResponse generated in 3.1s\u001b[0m\n" + ], + "text/html": [ + "
Response generated in 3.1s\n",
+ "
\n"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m You are the Prosecutor for \"Doe vs. Wilson\". Give your opening statement. Evidence: Screenshots of messages, \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m social media posts, therapistโs report Be confident and factual. \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n"
+ ],
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ You are the Prosecutor for \"Doe vs. Wilson\". Give your opening statement. Evidence: Screenshots of messages, โ\n", + "โ social media posts, therapistโs report Be confident and factual. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Ladies and gentlemen of the jury, today we present clear evidence against the defendant, Wilson. We will show \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m you screenshots of messages that reveal intent and motive, alongside social media posts that further \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m corroborate this behavior. Additionally, a therapistโs report will demonstrate the psychological impact on the \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m victim, Doe. This evidence will establish a pattern of harassment and intimidation. We ask you to consider the \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m facts carefully and deliver a just verdict. Thank you. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ], + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Ladies and gentlemen of the jury, today we present clear evidence against the defendant, Wilson. We will show โ\n", + "โ you screenshots of messages that reveal intent and motive, alongside social media posts that further โ\n", + "โ corroborate this behavior. Additionally, a therapistโs report will demonstrate the psychological impact on the โ\n", + "โ victim, Doe. This evidence will establish a pattern of harassment and intimidation. We ask you to consider the โ\n", + "โ facts carefully and deliver a just verdict. Thank you. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Defense โ\n", + "โ Role: Defend the accused โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Output()" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "c0c194ce705f4418961c84f0bacb1acf" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [], + "text/html": [ + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\n" + ], + "text/html": [ + "
\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[2mResponse generated in 3.3s\u001b[0m\n" + ], + "text/html": [ + "
Response generated in 3.3s\n",
+ "
\n"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m You are the Defense Attorney for \"Doe vs. Wilson\". Give your opening statement. Challenge the prosecution's \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m case. Emphasize presumption of innocence. \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n"
+ ],
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ You are the Defense Attorney for \"Doe vs. Wilson\". Give your opening statement. Challenge the prosecution's โ\n", + "โ case. Emphasize presumption of innocence. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Ladies and gentlemen of the jury, today you will hear the prosecution's case against my client, Mr. Wilson. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m However, I urge you to remember that the burden of proof lies with them. They must prove guilt beyond a \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m reasonable doubt. We will show that the evidence is circumstantial, unreliable, and lacks credibility. Mr. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Wilson is presumed innocent until proven guilty, and we will demonstrate that reasonable doubt exists in this \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m case. Thank you. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ], + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Ladies and gentlemen of the jury, today you will hear the prosecution's case against my client, Mr. Wilson. โ\n", + "โ However, I urge you to remember that the burden of proof lies with them. They must prove guilt beyond a โ\n", + "โ reasonable doubt. We will show that the evidence is circumstantial, unreliable, and lacks credibility. Mr. โ\n", + "โ Wilson is presumed innocent until proven guilty, and we will demonstrate that reasonable doubt exists in this โ\n", + "โ case. Thank you. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Witness โ\n", + "โ Role: Provide testimony โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Output()" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "f4d166f4a67e41679066f05d4f224c31" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [], + "text/html": [ + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\n" + ], + "text/html": [ + "
\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[2mResponse generated in 2.3s\u001b[0m\n" + ], + "text/html": [ + "
Response generated in 2.3s\n",
+ "
\n"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m You are a witness in \"Doe vs. Wilson\". Provide your testimony about what you saw. Evidence: Screenshots of \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m messages, social media posts, therapistโs report Be factual and clear. \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n"
+ ],
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ You are a witness in \"Doe vs. Wilson\". Provide your testimony about what you saw. Evidence: Screenshots of โ\n", + "โ messages, social media posts, therapistโs report Be factual and clear. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m On March 15, 2023, I observed a series of messages exchanged between Doe and Wilson on social media, indicating \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m a heated argument. The screenshots show Wilson making threatening remarks. Additionally, the therapist's report \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m dated March 20, 2023, confirms Doe's emotional distress linked to these interactions. I can confirm the \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m authenticity of these documents. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ], + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ On March 15, 2023, I observed a series of messages exchanged between Doe and Wilson on social media, indicating โ\n", + "โ a heated argument. The screenshots show Wilson making threatening remarks. Additionally, the therapist's report โ\n", + "โ dated March 20, 2023, confirms Doe's emotional distress linked to these interactions. I can confirm the โ\n", + "โ authenticity of these documents. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Judge โ\n", + "โ Role: Preside over court proceedings โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Output()" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "801192cdda5e4736bc53dba478e1dcc1" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [], + "text/html": [ + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\n" + ], + "text/html": [ + "
\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[2mResponse generated in 2.3s\u001b[0m\n" + ], + "text/html": [ + "
Response generated in 2.3s\n",
+ "
\n"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m You are Judge presiding over \"Doe vs. Wilson\". Deliver your final verdict. Consider all evidence: Screenshots \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m of messages, social media posts, therapistโs report Be fair and explain your reasoning. \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n"
+ ],
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ You are Judge presiding over \"Doe vs. Wilson\". Deliver your final verdict. Consider all evidence: Screenshots โ\n", + "โ of messages, social media posts, therapistโs report Be fair and explain your reasoning. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m After careful consideration of the evidence presented, including the screenshots of messages, social media \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m posts, and the therapist's report, I find that the plaintiff, Ms. Doe, has demonstrated a credible case of \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m emotional distress due to the defendant's actions. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m The evidence shows a pattern of harassment that has significantly impacted Ms. Doe's mental well-being. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Therefore, I rule in favor of the plaintiff. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Mr. Wilson is ordered to cease all forms of contact with Ms. Doe and to pay damages for the emotional distress \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m caused. Court is adjourned. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ], + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ After careful consideration of the evidence presented, including the screenshots of messages, social media โ\n", + "โ posts, and the therapist's report, I find that the plaintiff, Ms. Doe, has demonstrated a credible case of โ\n", + "โ emotional distress due to the defendant's actions. โ\n", + "โ โ\n", + "โ The evidence shows a pattern of harassment that has significantly impacted Ms. Doe's mental well-being. โ\n", + "โ Therefore, I rule in favor of the plaintiff. โ\n", + "โ โ\n", + "โ Mr. Wilson is ordered to cease all forms of contact with Ms. Doe and to pay damages for the emotional distress โ\n", + "โ caused. Court is adjourned. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Generating... 3.8s โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\nโ Court is now in session. โ\nโ โ\nโ Case number 2023-001: Doe vs. Wilson. The plaintiff, Ms. Doe, alleges emotional distress resulting from โ\nโ repeated online harassment by the defendant, Mr. Wilson. โ\nโ โ\nโ Both parties will present their evidence and arguments. I remind all present to maintain decorum. โ\nโ โ\nโ Let us proceed with the plaintiff's โ\nโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n\n" + }, + "metadata": {} + } + ] + } + }, + "45ff535d008a4b30b53a0e72edee016b": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "9e740fc3b45c454e96dfe29b4c0edb53": { + "model_module": "@jupyter-widgets/output", + "model_name": "OutputModel", + "model_module_version": "1.0.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_c04a2ce5fcc544d8ac72aa67776c0fd0", + "msg_id": "", + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Generating... 2.9s \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n\u001b[32mโ\u001b[0m Ladies and gentlemen of the jury, today we present clear evidence against the defendant, Wilson. We will show \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m you screenshots of messages that reveal intent and motive, alongside social media posts that further \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m corroborate this behavior. Additionally, a therapistโs report will demonstrate the psychological impact on the \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m victim, Doe. This evidence will establish a pattern of harassment and intimidation. We ask you to consider the \u001b[32mโ\u001b[0m\n\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n", + "text/html": "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Generating... 2.9s โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\nโ Ladies and gentlemen of the jury, today we present clear evidence against the defendant, Wilson. We will show โ\nโ you screenshots of messages that reveal intent and motive, alongside social media posts that further โ\nโ corroborate this behavior. Additionally, a therapistโs report will demonstrate the psychological impact on the โ\nโ victim, Doe. This evidence will establish a pattern of harassment and intimidation. We ask you to consider the โ\nโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n\n" + }, + "metadata": {} + } + ] + } + }, + "c04a2ce5fcc544d8ac72aa67776c0fd0": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c0c194ce705f4418961c84f0bacb1acf": { + "model_module": "@jupyter-widgets/output", + "model_name": "OutputModel", + "model_module_version": "1.0.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_4ef74a10d03747608c9011027bfa877c", + "msg_id": "", + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Generating... 3.1s \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n\u001b[32mโ\u001b[0m Ladies and gentlemen of the jury, today you will hear the prosecution's case against my client, Mr. Wilson. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m However, I urge you to remember that the burden of proof lies with them. They must prove guilt beyond a \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m reasonable doubt. We will show that the evidence is circumstantial, unreliable, and lacks credibility. Mr. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m Wilson is presumed innocent until proven guilty, and we \u001b[32mโ\u001b[0m\n\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n", + "text/html": "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Generating... 3.1s โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\nโ Ladies and gentlemen of the jury, today you will hear the prosecution's case against my client, Mr. Wilson. โ\nโ However, I urge you to remember that the burden of proof lies with them. They must prove guilt beyond a โ\nโ reasonable doubt. We will show that the evidence is circumstantial, unreliable, and lacks credibility. Mr. โ\nโ Wilson is presumed innocent until proven guilty, and we โ\nโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n\n" + }, + "metadata": {} + } + ] + } + }, + "4ef74a10d03747608c9011027bfa877c": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f4d166f4a67e41679066f05d4f224c31": { + "model_module": "@jupyter-widgets/output", + "model_name": "OutputModel", + "model_module_version": "1.0.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_f47eec09409e440091431311f3048518", + "msg_id": "", + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Generating... 2.1s \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n\u001b[32mโ\u001b[0m On March 15, 2023, I observed a series of messages exchanged between Doe and Wilson on social media, indicating \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m a heated argument. The screenshots show Wilson making threatening remarks. Additionally, the therapist's report \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m dated March 20, 2023, confirms Doe's emotional distress linked to these \u001b[32mโ\u001b[0m\n\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n", + "text/html": "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Generating... 2.1s โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\nโ On March 15, 2023, I observed a series of messages exchanged between Doe and Wilson on social media, indicating โ\nโ a heated argument. The screenshots show Wilson making threatening remarks. Additionally, the therapist's report โ\nโ dated March 20, 2023, confirms Doe's emotional distress linked to these โ\nโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n\n" + }, + "metadata": {} + } + ] + } + }, + "f47eec09409e440091431311f3048518": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "801192cdda5e4736bc53dba478e1dcc1": { + "model_module": "@jupyter-widgets/output", + "model_name": "OutputModel", + "model_module_version": "1.0.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_1928c67194d4409a9528a796bbe1fce1", + "msg_id": "", + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Generating... 2.1s \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n\u001b[32mโ\u001b[0m After careful consideration of the evidence presented, including the screenshots of messages, social media \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m posts, and the therapist's report, I find that the plaintiff, Ms. Doe, has demonstrated a credible case of \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m emotional distress due to the defendant's actions. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m The evidence shows a pattern of harassment that has significantly impacted Ms. Doe's mental well-being. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m Therefore, I rule in favor of the plaintiff. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m Mr. Wilson is ordered to cease all forms of contact with Ms. Doe and to pay damages \u001b[32mโ\u001b[0m\n\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n", + "text/html": "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Generating... 2.1s โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\nโ After careful consideration of the evidence presented, including the screenshots of messages, social media โ\nโ posts, and the therapist's report, I find that the plaintiff, Ms. Doe, has demonstrated a credible case of โ\nโ emotional distress due to the defendant's actions. โ\nโ โ\nโ The evidence shows a pattern of harassment that has significantly impacted Ms. Doe's mental well-being. โ\nโ Therefore, I rule in favor of the plaintiff. โ\nโ โ\nโ Mr. Wilson is ordered to cease all forms of contact with Ms. Doe and to pay damages โ\nโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n\n" + }, + "metadata": {} + } + ] + } + }, + "1928c67194d4409a9528a796bbe1fce1": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + } + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/cookbooks/Cybersecurity-PoC Agent.ipynb b/examples/cookbooks/Cybersecurity-PoC Agent.ipynb new file mode 100644 index 00000000..81f4e375 --- /dev/null +++ b/examples/cookbooks/Cybersecurity-PoC Agent.ipynb @@ -0,0 +1,233 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Pocky Query Tool: Automated CVE PoC Search & Validation\n", + "\n", + "A lightweight, web-scale agent that helps you find, filter, and fetch real-world PoC exploits โ so you don't have to.\n", + "\n", + "**Features:**\n", + "- Automatically searches multiple security-related websites\n", + "- Intelligently analyzes and extracts PoC code\n", + "- Automatically selects the most reliable PoC samples\n", + "- Supports collection of PoCs from multiple sources" + ], + "metadata": { + "id": "BdX56iM1r5aB" + } + }, + { + "cell_type": "markdown", + "source": [ + "[](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Pocky_Cybersecurity_PoC_Agent.ipynb)\n" + ], + "metadata": { + "id": "VW766102tUUY" + } + }, + { + "cell_type": "markdown", + "source": [ + "# Install Dependencies" + ], + "metadata": { + "id": "cBu2iXmJsVqE" + } + }, + { + "cell_type": "code", + "source": [ + "!pip install praisonaiagents exa-py python-dotenv requests beautifulsoup4" + ], + "metadata": { + "id": "VvbA3A7XsTFm" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# Set API Keys" + ], + "metadata": { + "id": "Q6B2VEkFsB32" + } + }, + { + "cell_type": "code", + "source": [ + "import os\n", + "\n", + "# Set your API keys here (replace with your actual keys)\n", + "os.environ[\"EXA_API_KEY\"] = \"your api key\"\n", + "os.environ[\"OPENAI_API_KEY\"] = \"your api key\"\n", + "os.environ[\"OPENAI_BASE_URL\"] = \"https://api.openai.com/v1\" # Optional, for custom OpenAI endpoints" + ], + "metadata": { + "id": "OlOI3yc_sAkN" + }, + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# Tools (Core Functions)" + ], + "metadata": { + "id": "1BvjjjJdsanO" + } + }, + { + "cell_type": "code", + "source": [ + "import json\n", + "from openai import OpenAI\n", + "from exa_py import Exa\n", + "\n", + "# Dummy/Minimal agent classes for notebook demo\n", + "class ValidationAgent:\n", + " def __init__(self, input_json):\n", + " self.input_json = input_json\n", + " def run(self):\n", + " # Dummy validation logic for notebook demo\n", + " data = json.loads(self.input_json)\n", + " return True if \"attack_intent\" in data and \"poc_sample\" in data else False\n", + "\n", + "class AttackIntentAgent:\n", + " def __init__(self, description):\n", + " self.description = description\n", + " def run(self):\n", + " # Dummy intent extraction for notebook demo\n", + " return f\"Intent for: {self.description[:50]}...\"" + ], + "metadata": { + "id": "GYfAJLXOsbga" + }, + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## YAML Prompt (Validation Example)\n", + "This is the prompt used for PoC validation." + ], + "metadata": { + "id": "THrET8-psjx-" + } + }, + { + "cell_type": "code", + "source": [ + "validation_prompt = \"\"\"\n", + "You are a highly skilled technical assistant with deep expertise in PoC sample validation.\n", + "\n", + "Given the attack intent of a CVE vulnerability and a PoC sample gathered from public sources, your task is to analyze whether the PoC correctly implements the intended attack behavior.\n", + "\n", + "Specifically:\n", + "- Understand the CVE's attack intent, including the attack goal and the underlying exploitation mechanism.\n", + "- Analyze the PoC to determine whether it is designed to achieve this intent.\n", + "- Check whether the payloads, request structures, and overall logic of the PoC align with the described attack intent.\n", + "- You do not need to execute the PoC. Focus on static validation through reasoning and consistency.\n", + "\n", + "Your output must be a JSON object with two fields:\n", + "- \"valid\": a boolean indicating whether the PoC correctly reflects the attack intent.\n", + "- \"reasoning\": a brief explanation of your judgment. If \"valid\" is false, the reasoning must clearly explain what is incorrect or inconsistent in the PoC compared to the attack intent, so that the PoC can be revised accordingly.\n", + "\"\"\"\n", + "print(validation_prompt)" + ], + "metadata": { + "id": "9q3aKl1xshrb" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# Main (Query and Validate a CVE PoC)" + ], + "metadata": { + "id": "531EZgcLsqP6" + } + }, + { + "cell_type": "code", + "source": [ + "def run_pocky_for_cve(cve_id):\n", + " # Example: Simulate fetching a description and PoC (replace with real logic)\n", + " description = f\"Description for {cve_id} (replace with real Exa/OpenAI search)\"\n", + " poc_sample = f\"PoC code for {cve_id} (replace with real PoC search)\"\n", + "\n", + " # Stage 2: Attack Intent\n", + " intent = AttackIntentAgent(description).run()\n", + " print(f\"Attack Intent: {intent}\")\n", + "\n", + " # Stage 3: Validation\n", + " validation_input = json.dumps({\"attack_intent\": intent, \"poc_sample\": poc_sample}, indent=2)\n", + " valid = ValidationAgent(validation_input).run()\n", + " print(f\"Validation Result: {valid}\")\n", + " if valid:\n", + " print(f\"PoC for {cve_id} is valid and ready to use.\")\n", + " else:\n", + " print(f\"PoC for {cve_id} failed validation.\")" + ], + "metadata": { + "id": "PQvtF-RqsrP6" + }, + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# Example Usage" + ], + "metadata": { + "id": "XiQOiSz8su3u" + } + }, + { + "cell_type": "code", + "source": [ + "run_pocky_for_cve(\"CVE-2023-4450\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "39w-qpecswjw", + "outputId": "cdcb3b29-7338-4e3e-b160-5f9568c194ca" + }, + "execution_count": 6, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Attack Intent: Intent for: Description for CVE-2023-4450 (replace with real E...\n", + "Validation Result: True\n", + "PoC for CVE-2023-4450 is valid and ready to use.\n" + ] + } + ] + } + ] +} diff --git a/examples/cookbooks/Government-Services-Assistant.ipynb b/examples/cookbooks/Government-Services-Assistant.ipynb new file mode 100644 index 00000000..d1e380b8 --- /dev/null +++ b/examples/cookbooks/Government-Services-Assistant.ipynb @@ -0,0 +1,300 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "ZH_nR-SvvkDG" + }, + "source": [ + "# Government Services Assistant - AI Chatbot" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "w8B741JgvpFj" + }, + "source": [ + "This notebook demonstrates how to use an AI-powered assistant to answer questions about government services and procedures, using the Firecrawl API and a friendly, step-by-step conversational approach." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "y8jiJYf4FA0m" + }, + "source": [ + "[](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Chile_Government_Services_Assistant.ipynb)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RRw8sPG89KNb" + }, + "source": [ + "# Install dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "rW8ltqCICV8o" + }, + "outputs": [], + "source": [ + "!pip install flask firecrawl praisonaiagents google-genai python-dotenv deep-translator" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XGjyt-B_EfbM" + }, + "source": [ + "# Set API Keys" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qf8B_YltDiIe" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "os.environ['FIRECRAWL_API_KEY'] = \"your api key here\"\n", + "os.environ['OPENAI_API_KEY'] = \"your api key here\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ccO0vwvCEqUJ" + }, + "source": [ + "# Import Libraries & Translator" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0prDQ5TpDnFu" + }, + "outputs": [], + "source": [ + "from firecrawl import FirecrawlApp, ScrapeOptions\n", + "from deep_translator import GoogleTranslator\n", + "import re\n", + "\n", + "def translate_to_spanish(text):\n", + " try:\n", + " return GoogleTranslator(source='auto', target='es').translate(text)\n", + " except Exception as e:\n", + " print(\"Translation to Spanish failed:\", e)\n", + " return text\n", + "\n", + "def translate_to_english(text):\n", + " try:\n", + " # Remove Markdown images and None values before translation\n", + " text = str(text).replace(\"None\", \"\")\n", + " text = re.sub(r'!\\[.*?\\]\\(.*?\\)', '', text)\n", + " return GoogleTranslator(source='auto', target='en').translate(text)\n", + " except Exception as e:\n", + " print(\"Translation to English failed:\", e)\n", + " return text" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WxOlCHMmEuK2" + }, + "source": [ + "# Firecrawl Tool Class" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "G4RyzJ5mDp0t" + }, + "outputs": [], + "source": [ + "class FirecrawlTool:\n", + " def __init__(self, api_key, instruction: str, template: str):\n", + " if not api_key:\n", + " raise ValueError(\"Firecrawl API key not provided.\")\n", + " self.app = FirecrawlApp(api_key=api_key)\n", + " self.instruction = instruction\n", + " self.template = template\n", + "\n", + " def search(self, search: str) -> str:\n", + " if not search or len(search) < 5:\n", + " return \"Error: Please provide a valid search query (at least 5 characters).\"\n", + " response_md = \"\"\n", + " try:\n", + " search_result = self.app.search(\n", + " query=self.instruction + search,\n", + " limit=2,\n", + " country=\"cl\",\n", + " lang=\"es\", # Always search in Spanish for best results\n", + " scrape_options=ScrapeOptions(formats=[\"markdown\", \"links\"])\n", + " )\n", + " if search_result and hasattr(search_result, 'data') and search_result.data:\n", + " filtered_results = [\n", + " result for result in search_result.data\n", + " if str(result.get(\"url\", \"\")).startswith(\"https://www.chileatiende.gob.cl/fichas\") and not str(result.get(\"url\", \"\")).endswith(\"pdf\")\n", + " ]\n", + " if filtered_results:\n", + " for num, result in enumerate(filtered_results, start=1):\n", + " response_md += self.template.format(\n", + " result_number=num,\n", + " page_title=str(result.get(\"title\", \"\")),\n", + " page_url=str(result.get(\"url\", \"\")),\n", + " page_content=str(result.get(\"markdown\", \"\"))\n", + " )\n", + " return response_md\n", + " else:\n", + " return None\n", + " else:\n", + " return None\n", + " except Exception as e:\n", + " return f\"Error during search: {e}\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MjkjTWn_ExS0" + }, + "source": [ + "# Firecrawl Prompt Template" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "AfivymU8Dufz" + }, + "outputs": [], + "source": [ + "FIRECRAWL_INSTRUCTION = \"ChileAtiende: \"\n", + "FIRECRAWL_TEMPLATE = \"\"\"\n", + "# Result {result_number}\n", + "\n", + "## Page Name:\n", + "\"{page_title}\"\n", + "\n", + "## URL:\n", + "{page_url}\n", + "\n", + "## Content:\n", + "{page_content}\n", + "\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zK8AA_DlEz9K" + }, + "source": [ + "# Initialize Firecrawl Tool" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c3NKK0ZjDwKT" + }, + "outputs": [], + "source": [ + "firecrawl_tool = FirecrawlTool(\n", + " api_key=os.environ['FIRECRAWL_API_KEY'],\n", + " instruction=FIRECRAWL_INSTRUCTION,\n", + " template=FIRECRAWL_TEMPLATE\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "uzXYIF_gE3XV" + }, + "source": [ + "# Main Chat Loop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TXMgZQNkDx7n", + "outputId": "76303cd1-a576-483f-a22d-9857e5e6d797" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello! I am your ChileAtiende assistant, Tomรกs. How can I help you today?\n", + "You can ask me, for example: How to renew your ID card, How to apply for the Winter Bonus, etc.\n", + "\n", + "You: exit\n", + "Tomรกs: It was a pleasure to help you. Goodbye!\n" + ] + } + ], + "source": [ + "print(\"Hello! I am your ChileAtiende assistant, Tomรกs. How can I help you today?\")\n", + "print(\"You can ask me, for example: How to renew your ID card, How to apply for the Winter Bonus, etc.\")\n", + "\n", + "while True:\n", + " user_input = input(\"\\nYou: \")\n", + " if user_input.lower() in [\"exit\", \"quit\"]:\n", + " print(\"Tomรกs: It was a pleasure to help you. Goodbye!\")\n", + " break\n", + "\n", + " # Translate English input to Spanish for Firecrawl\n", + " spanish_query = translate_to_spanish(user_input)\n", + " spanish_answer = firecrawl_tool.search(spanish_query)\n", + "\n", + " # Only translate if we got a real answer\n", + " if spanish_answer and isinstance(spanish_answer, str) and spanish_answer.strip() and \"Error\" not in spanish_answer:\n", + " try:\n", + " english_answer = translate_to_english(spanish_answer)\n", + " print(\"\\nTomรกs (in English):\\n\", english_answer)\n", + " except Exception as e:\n", + " print(f\"\\nTomรกs: I found information, but couldn't translate it. Here it is in Spanish:\\n{spanish_answer}\\n(Translation error: {e})\")\n", + " else:\n", + " print(\"\\nTomรกs: Sorry, I couldn't find relevant information. Try rephrasing your question or ask about another service.\")" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/examples/cookbooks/PraisonAI_QA_Automation_Copilot.ipynb b/examples/cookbooks/PraisonAI_QA_Automation_Copilot.ipynb new file mode 100644 index 00000000..3e6fefd5 --- /dev/null +++ b/examples/cookbooks/PraisonAI_QA_Automation_Copilot.ipynb @@ -0,0 +1,1656 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "PKMzKghVQCtG" + }, + "source": [ + "# ๐งโ๐ป QA-T Agent: Quality Automation Testing Agent (API Demo)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "w0lyTIeSQIJ2" + }, + "source": [ + "## Description\n", + "This notebook demonstrates how to interact with the QA-T Agent backend API for generating test plans and test cases using AI. You can send requirements or files to your running backend and receive generated test artifacts." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZEVQrjQgZwWz" + }, + "source": [ + "[](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/PraisonAI_QA_Automation_Copilot.ipynb)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QuGDIef8ZBdi" + }, + "source": [ + "# Dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "v_ZuycEqXru7" + }, + "outputs": [], + "source": [ + "!pip install praisonaiagents duckduckgo-search" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4N--_TkMZI2T" + }, + "source": [ + "# Set API Key" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "id": "yXckZn0FYcMS" + }, + "outputs": [], + "source": [ + "import os\n", + "os.environ[\"OPENAI_API_KEY\"] = \"Enter your api key here\" # Replace with your actual key" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6n0teEzWZMFq" + }, + "source": [ + "# Tools Used" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "id": "Su-ZvO2vYi-D" + }, + "outputs": [], + "source": [ + "from praisonaiagents import Agent\n", + "from typing import Dict\n", + "\n", + "# --- PROMPT LOGIC FROM YOUR BACKEND ---\n", + "\n", + "def gherkin_prompt(requirement, feature_name=\"Test Feature\"):\n", + " return f\"\"\"\n", + "Generate a Gherkin feature file for the following requirement:\n", + "{requirement}\n", + "\n", + "Include:\n", + "- Feature name: {feature_name}\n", + "- Multiple scenarios\n", + "- Given-When-Then steps\n", + "- Background if needed\n", + "\n", + "Format as:\n", + "Feature: {feature_name}\n", + "[Description]\n", + "\n", + "Scenario: [Scenario Name]\n", + "Given [precondition]\n", + "When [action]\n", + "Then [expected result]\n", + "\"\"\"\n", + "\n", + "def selenium_prompt(requirement, test_name=\"test_case\", language=\"python\"):\n", + " return f\"\"\"\n", + "Generate a Selenium test script in {language} for:\n", + "{requirement}\n", + "\n", + "Include:\n", + "- Test name: {test_name}\n", + "- WebDriver setup\n", + "- Page object pattern\n", + "- Assertions\n", + "- Error handling\n", + "\"\"\"\n", + "\n", + "def manual_test_prompt(user_story):\n", + " return f\"\"\"\n", + "Generate manual test cases for this user story:\n", + "{user_story}\n", + "\n", + "Include:\n", + "- Test case ID\n", + "- Test steps\n", + "- Expected results\n", + "- Test data\n", + "- Priority levels\n", + "\n", + "Format as:\n", + "Test Case ID: TC001\n", + "Test Steps:\n", + "1. [step]\n", + "2. [step]\n", + "Expected Result: [result]\n", + "Priority: [High/Medium/Low]\n", + "\"\"\"\n", + "\n", + "def chat_prompt(question):\n", + " return f\"\"\"\n", + "Answer this testing question: {question}\n", + "\n", + "Provide:\n", + "- Clear explanation\n", + "- Best practices\n", + "- Examples if relevant\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wb-qb4N2ZQWw" + }, + "source": [ + "# YAML Prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WUEPjwKAYm6M", + "outputId": "ad38c608-b7b4-4f88-e173-f7b799e59e9c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "name: QA Test Generation Agent\n", + "description: AI-powered test automation system\n", + "\n", + "tools:\n", + " - name: generate_gherkin\n", + " description: Generate Gherkin feature files from user stories\n", + " parameters:\n", + " requirement: str\n", + " feature_name: str\n", + "\n", + " - name: generate_selenium\n", + " description: Generate Selenium test scripts in Python\n", + " parameters:\n", + " requirement: str\n", + " test_name: str\n", + " language: str\n", + "\n", + " - name: generate_manual_tests\n", + " description: Generate manual test cases\n", + " parameters:\n", + " user_story: str\n", + "\n", + " - name: chat_assistance\n", + " description: Provide testing guidance and explanations\n", + " parameters:\n", + " question: str\n", + "\n" + ] + } + ], + "source": [ + "yaml_prompt = \"\"\"\n", + "name: QA Test Generation Agent\n", + "description: AI-powered test automation system\n", + "\n", + "tools:\n", + " - name: generate_gherkin\n", + " description: Generate Gherkin feature files from user stories\n", + " parameters:\n", + " requirement: str\n", + " feature_name: str\n", + "\n", + " - name: generate_selenium\n", + " description: Generate Selenium test scripts in Python\n", + " parameters:\n", + " requirement: str\n", + " test_name: str\n", + " language: str\n", + "\n", + " - name: generate_manual_tests\n", + " description: Generate manual test cases\n", + " parameters:\n", + " user_story: str\n", + "\n", + " - name: chat_assistance\n", + " description: Provide testing guidance and explanations\n", + " parameters:\n", + " question: str\n", + "\"\"\"\n", + "print(yaml_prompt)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OuP0_EJ6ZTzw" + }, + "source": [ + "# Main (Agent Routing Logic from Your Backend)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "id": "gwuAKPgHYpj_" + }, + "outputs": [], + "source": [ + "class QATestAgent:\n", + " def __init__(self, llm_agent):\n", + " self.llm_agent = llm_agent\n", + "\n", + " def route_request(self, request: Dict) -> str:\n", + " agent_type = request.get(\"agentType\", \"chat\").lower()\n", + " requirement = request.get(\"requirement\", \"\")\n", + " feature_name = request.get(\"featureName\", \"Test Feature\")\n", + " test_name = request.get(\"testName\", \"test_case\")\n", + " language = request.get(\"language\", \"python\")\n", + " user_story = request.get(\"user_story\", requirement)\n", + " question = request.get(\"question\", requirement)\n", + "\n", + " if agent_type in [\"gherkin\", \"test_generator\"]:\n", + " prompt = gherkin_prompt(requirement, feature_name)\n", + " elif agent_type in [\"selenium\", \"selenium_generator\"]:\n", + " prompt = selenium_prompt(requirement, test_name, language)\n", + " elif agent_type in [\"manual\", \"manual_testcases\"]:\n", + " prompt = manual_test_prompt(user_story)\n", + " else:\n", + " prompt = chat_prompt(question)\n", + "\n", + " # Use PraisonAI LLM to generate the response\n", + " return self.llm_agent.start(prompt)\n", + "\n", + "# Create the LLM agent (PraisonAI)\n", + "llm_agent = Agent(\n", + " instructions=\"You are a QA Test Generation Agent. Use the prompt to generate the required output.\",\n", + " tools=[]\n", + ")\n", + "\n", + "qa_agent = QATestAgent(llm_agent)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mGMAPiPBZbvF" + }, + "source": [ + "# Usage Examples" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "36fc7014ac8d46d9be0c449ea37159bd", + "fbd8a1ff0c6c4fd1b5648e4c77450f32", + "d3252a2e8cf94dea969f909d521a0b22", + "f3b8444dca734338bad4d93bc0e73a23", + "16cdd551272342dc9b90aea5052ddc87", + "feaada3e9d6a4586a14110ef2b8ab62f", + "ad9fe9c352c24614ad3de1b127b1c560", + "101a7ed4a3bf4b8da056ad7d49fe6241" + ] + }, + "id": "pWr2KpJGYtBw", + "outputId": "6e29c688-b256-4fac-f0fe-8d8fac1acf3f" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Agent โ\n", + "โ Role: Assistant โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[38;2;210;227;200mโญโ\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[38;2;210;227;200mโโฎ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;255;155;155m๐ค Agent:\u001b[0m \u001b[38;2;255;229;229mAgent\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "36fc7014ac8d46d9be0c449ea37159bd", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Response generated in 8.6s\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[2mResponse generated in 8.6s\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Generate a Gherkin feature file for the following requirement: User login functionality with email and password โ\n", + "โ โ\n", + "โ Include: โ\n", + "โ โ\n", + "โ โข Feature name: User Authentication โ\n", + "โ โข Multiple scenarios โ\n", + "โ โข Given-When-Then steps โ\n", + "โ โข Background if needed โ\n", + "โ โ\n", + "โ Format as: Feature: User Authentication [Description] โ\n", + "โ โ\n", + "โ Scenario: [Scenario Name] Given [precondition] When [action] Then [expected result] โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Generate a Gherkin feature file for the following requirement: User login functionality with email and password \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Include: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mFeature name: User Authentication \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mMultiple scenarios \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mGiven-When-Then steps \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mBackground if needed \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Format as: Feature: User Authentication [Description] \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Scenario: [Scenario Name] Given [precondition] When [action] Then [expected result] \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ Feature: User Authentication โ\n", + "โ This feature allows users to log in to the application using their email and password. โ\n", + "โ Successful login grants access to user-specific features and data. โ\n", + "โ โ\n", + "โ Background: โ\n", + "โ Given the user is on the login page โ\n", + "โ โ\n", + "โ Scenario: Successful login with valid credentials โ\n", + "โ Given the user has a registered account with email \"user@example.com\" and password \"password123\" โ\n", + "โ When the user enters the email \"user@example.com\" โ\n", + "โ And the user enters the password \"password123\" โ\n", + "โ And the user clicks the login button โ\n", + "โ Then the user should be redirected to the dashboard โ\n", + "โ And the user should see a welcome message โ\n", + "โ โ\n", + "โ Scenario: Unsuccessful login with incorrect password โ\n", + "โ Given the user has a registered account with email \"user@example.com\" โ\n", + "โ When the user enters the email \"user@example.com\" โ\n", + "โ And the user enters the password \"wrongpassword\" โ\n", + "โ And the user clicks the login button โ\n", + "โ Then the user should see an error message \"Invalid email or password\" โ\n", + "โ โ\n", + "โ Scenario: Unsuccessful login with unregistered email โ\n", + "โ When the user enters the email \"unregistered@example.com\" โ\n", + "โ And the user enters the password \"password123\" โ\n", + "โ And the user clicks the login button โ\n", + "โ Then the user should see an error message \"Invalid email or password\" โ\n", + "โ โ\n", + "โ Scenario: Unsuccessful login with empty email and password fields โ\n", + "โ When the user leaves the email field empty โ\n", + "โ And the user leaves the password field empty โ\n", + "โ And the user clicks the login button โ\n", + "โ Then the user should see an error message \"Email and password are required\" โ\n", + "โ โ\n", + "โ Scenario: Unsuccessful login with empty password field โ\n", + "โ Given the user has a registered account with email \"user@example.com\" โ\n", + "โ When the user enters the email \"user@example.com\" โ\n", + "โ And the user leaves the password field empty โ\n", + "โ And the user clicks the login button โ\n", + "โ Then the user should see an error message \"Password is required\" โ\n", + "โ โ\n", + "โ Scenario: Unsuccessful login with empty email field โ\n", + "โ When the user leaves the email field empty โ\n", + "โ And the user enters the password \"password123\" โ\n", + "โ And the user clicks the login button โ\n", + "โ Then the user should see an error message \"Email is required\" โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mFeature\u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m:\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m User Authentication\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mT\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mf\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m.\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mS\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mf\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m-\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mf\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mf\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m.\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mBackground\u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m Given \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mScenario\u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m:\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m Successful login with valid credentials\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m Given \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m@\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mx\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m.\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mc\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m1\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m2\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m3\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mWhen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m@\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mx\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m.\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mc\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m1\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m2\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m3\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mk\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mb\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mThen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mb\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mb\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mScenario\u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m:\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m Unsuccessful login with incorrect password\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m Given \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m@\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mx\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m.\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mc\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mWhen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m@\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mx\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m.\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mc\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mn\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mg\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mk\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mb\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mThen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mI\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mn\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mv\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mScenario\u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m:\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m Unsuccessful login with unregistered email\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m When \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mn\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mg\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mt\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m@\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mx\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m.\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mc\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m1\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m2\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m3\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mk\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mb\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mThen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mI\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mn\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mv\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mScenario\u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m:\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m Unsuccessful login with empty email and password fields\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m When \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mv\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mf\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34my\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mv\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mf\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34my\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mk\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mb\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mThen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mE\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mn\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mq\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mScenario\u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m:\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m Unsuccessful login with empty password field\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m Given \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m@\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mx\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m.\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mc\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mWhen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m@\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mx\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m.\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mc\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mv\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mf\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34my\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mk\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mb\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mThen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mP\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mq\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mScenario\u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m:\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m Unsuccessful login with empty email field\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m When \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mv\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mf\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34my\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m1\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m2\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m3\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mk\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mb\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mThen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mE\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mq\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "=== Gherkin Generation ===\n", + " ```gherkin\n", + "Feature: User Authentication\n", + " This feature allows users to log in to the application using their email and password. \n", + " Successful login grants access to user-specific features and data.\n", + "\n", + " Background:\n", + " Given the user is on the login page\n", + "\n", + " Scenario: Successful login with valid credentials\n", + " Given the user has a registered account with email \"user@example.com\" and password \"password123\"\n", + " When the user enters the email \"user@example.com\"\n", + " And the user enters the password \"password123\"\n", + " And the user clicks the login button\n", + " Then the user should be redirected to the dashboard\n", + " And the user should see a welcome message\n", + "\n", + " Scenario: Unsuccessful login with incorrect password\n", + " Given the user has a registered account with email \"user@example.com\"\n", + " When the user enters the email \"user@example.com\"\n", + " And the user enters the password \"wrongpassword\"\n", + " And the user clicks the login button\n", + " Then the user should see an error message \"Invalid email or password\"\n", + "\n", + " Scenario: Unsuccessful login with unregistered email\n", + " When the user enters the email \"unregistered@example.com\"\n", + " And the user enters the password \"password123\"\n", + " And the user clicks the login button\n", + " Then the user should see an error message \"Invalid email or password\"\n", + "\n", + " Scenario: Unsuccessful login with empty email and password fields\n", + " When the user leaves the email field empty\n", + " And the user leaves the password field empty\n", + " And the user clicks the login button\n", + " Then the user should see an error message \"Email and password are required\"\n", + "\n", + " Scenario: Unsuccessful login with empty password field\n", + " Given the user has a registered account with email \"user@example.com\"\n", + " When the user enters the email \"user@example.com\"\n", + " And the user leaves the password field empty\n", + " And the user clicks the login button\n", + " Then the user should see an error message \"Password is required\"\n", + "\n", + " Scenario: Unsuccessful login with empty email field\n", + " When the user leaves the email field empty\n", + " And the user enters the password \"password123\"\n", + " And the user clicks the login button\n", + " Then the user should see an error message \"Email is required\"\n", + "```\n" + ] + }, + { + "data": { + "text/html": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Agent โ\n", + "โ Role: Assistant โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[38;2;210;227;200mโญโ\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[38;2;210;227;200mโโฎ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;255;155;155m๐ค Agent:\u001b[0m \u001b[38;2;255;229;229mAgent\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d3252a2e8cf94dea969f909d521a0b22", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Response generated in 11.4s\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[2mResponse generated in 11.4s\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Generate a Selenium test script in python for: Test login page with valid credentials โ\n", + "โ โ\n", + "โ Include: โ\n", + "โ โ\n", + "โ โข Test name: test_login_valid โ\n", + "โ โข WebDriver setup โ\n", + "โ โข Page object pattern โ\n", + "โ โข Assertions โ\n", + "โ โข Error handling โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Generate a Selenium test script in python for: Test login page with valid credentials \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Include: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mTest name: test_login_valid \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mWebDriver setup \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mPage object pattern \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mAssertions \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mError handling \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ from selenium import webdriver โ\n", + "โ from selenium.webdriver.common.by import By โ\n", + "โ from selenium.webdriver.common.keys import Keys โ\n", + "โ from selenium.webdriver.support.ui import WebDriverWait โ\n", + "โ from selenium.webdriver.support import expected_conditions as EC โ\n", + "โ import unittest โ\n", + "โ โ\n", + "โ class LoginPage: โ\n", + "โ def __init__(self, driver): โ\n", + "โ self.driver = driver โ\n", + "โ self.email_input = (By.ID, 'email') # Assuming the email input field has an ID 'email' โ\n", + "โ self.password_input = (By.ID, 'password') # Assuming the password input field has an ID 'password' โ\n", + "โ self.login_button = (By.ID, 'loginButton') # Assuming the login button has an ID 'loginButton' โ\n", + "โ self.dashboard = (By.ID, 'dashboard') # Assuming the dashboard has an ID 'dashboard' โ\n", + "โ self.welcome_message = (By.ID, 'welcomeMessage') # Assuming the welcome message has an ID โ\n", + "โ 'welcomeMessage' โ\n", + "โ โ\n", + "โ def enter_email(self, email): โ\n", + "โ email_field = self.driver.find_element(*self.email_input) โ\n", + "โ email_field.clear() โ\n", + "โ email_field.send_keys(email) โ\n", + "โ โ\n", + "โ def enter_password(self, password): โ\n", + "โ password_field = self.driver.find_element(*self.password_input) โ\n", + "โ password_field.clear() โ\n", + "โ password_field.send_keys(password) โ\n", + "โ โ\n", + "โ def click_login(self): โ\n", + "โ login_btn = self.driver.find_element(*self.login_button) โ\n", + "โ login_btn.click() โ\n", + "โ โ\n", + "โ def is_dashboard_displayed(self): โ\n", + "โ try: โ\n", + "โ WebDriverWait(self.driver, 10).until( โ\n", + "โ EC.visibility_of_element_located(self.dashboard) โ\n", + "โ ) โ\n", + "โ return True โ\n", + "โ except: โ\n", + "โ return False โ\n", + "โ โ\n", + "โ def get_welcome_message(self): โ\n", + "โ try: โ\n", + "โ welcome_msg = WebDriverWait(self.driver, 10).until( โ\n", + "โ EC.visibility_of_element_located(self.welcome_message) โ\n", + "โ ) โ\n", + "โ return welcome_msg.text โ\n", + "โ except: โ\n", + "โ return None โ\n", + "โ โ\n", + "โ class TestLogin(unittest.TestCase): โ\n", + "โ def setUp(self): โ\n", + "โ self.driver = webdriver.Chrome() # Or use any other WebDriver โ\n", + "โ self.driver.get('http://example.com/login') # Replace with the actual login page URL โ\n", + "โ self.login_page = LoginPage(self.driver) โ\n", + "โ โ\n", + "โ def test_login_valid(self): โ\n", + "โ try: โ\n", + "โ self.login_page.enter_email('user@example.com') โ\n", + "โ self.login_page.enter_password('password123') โ\n", + "โ self.login_page.click_login() โ\n", + "โ โ\n", + "โ # Assertions โ\n", + "โ self.assertTrue(self.login_page.is_dashboard_displayed(), \"Dashboard is not displayed\") โ\n", + "โ welcome_message = self.login_page.get_welcome_message() โ\n", + "โ self.assertIsNotNone(welcome_message, \"Welcome message is not displayed\") โ\n", + "โ self.assertIn(\"Welcome\", welcome_message, \"Welcome message does not contain 'Welcome'\") โ\n", + "โ except Exception as e: โ\n", + "โ self.fail(f\"Test failed due to an unexpected error: {e}\") โ\n", + "โ โ\n", + "โ def tearDown(self): โ\n", + "โ self.driver.quit() โ\n", + "โ โ\n", + "โ if __name__ == \"__main__\": โ\n", + "โ unittest.main() โ\n", + "โ โ\n", + "โ โ\n", + "โ This script uses the Page Object Pattern to encapsulate the login page elements and actions. It includes a test โ\n", + "โ case test_login_valid that verifies successful login with valid credentials. The script also includes error โ\n", + "โ handling to catch unexpected exceptions during the test execution. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mfrom\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mselenium\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mimport\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwebdriver\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mfrom\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mselenium\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwebdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mcommon\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mby\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mimport\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mBy\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mfrom\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mselenium\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwebdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mcommon\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mkeys\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mimport\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mKeys\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mfrom\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mselenium\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwebdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34msupport\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mui\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mimport\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mWebDriverWait\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mfrom\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mselenium\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwebdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34msupport\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mimport\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mexpected_conditions\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mas\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mEC\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mimport\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34munittest\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mclass\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mLoginPage\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m__init__\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34memail_input\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mBy\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mID\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34memail\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m# Assuming the email input field has an ID 'email'\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mpassword_input\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mBy\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mID\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mpassword\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m# Assuming the password input field has an ID 'password'\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_button\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mBy\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mID\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mloginButton\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m# Assuming the login button has an ID 'loginButton'\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdashboard\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mBy\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mID\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mdashboard\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m# Assuming the dashboard has an ID 'dashboard'\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwelcome_message\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mBy\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mID\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mwelcomeMessage\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m# Assuming the welcome message has an ID \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m'welcomeMessage'\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34menter_email\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34memail\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34memail_field\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mfind_element\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m*\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34memail_input\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34memail_field\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mclear\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34memail_field\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34msend_keys\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34memail\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34menter_password\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mpassword\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mpassword_field\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mfind_element\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m*\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mpassword_input\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mpassword_field\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mclear\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mpassword_field\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34msend_keys\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mpassword\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mclick_login\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_btn\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mfind_element\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m*\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_button\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_btn\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mclick\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mis_dashboard_displayed\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mtry\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mWebDriverWait\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;174;129;255;48;2;39;40;34m10\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34muntil\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mEC\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mvisibility_of_element_located\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdashboard\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mreturn\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mTrue\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mexcept\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mreturn\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mFalse\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mget_welcome_message\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mtry\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwelcome_msg\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mWebDriverWait\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;174;129;255;48;2;39;40;34m10\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34muntil\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mEC\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mvisibility_of_element_located\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwelcome_message\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mreturn\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwelcome_msg\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mtext\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mexcept\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mreturn\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mNone\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mclass\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mTestLogin\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34munittest\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mTestCase\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34msetUp\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwebdriver\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mChrome\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m# Or use any other WebDriver\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mget\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mhttp://example.com/login\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m# Replace with the actual login page URL\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_page\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mLoginPage\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mtest_login_valid\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mtry\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_page\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34menter_email\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34muser@example.com\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_page\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34menter_password\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mpassword123\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_page\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mclick_login\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m# Assertions\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34massertTrue\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_page\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mis_dashboard_displayed\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mDashboard is not displayed\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwelcome_message\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_page\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mget_welcome_message\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34massertIsNotNone\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwelcome_message\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mWelcome message is not displayed\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34massertIn\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mWelcome\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwelcome_message\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mWelcome message does not contain \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mWelcome\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mexcept\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mException\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mas\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34me\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mfail\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mf\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mTest failed due to an unexpected error: \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m{\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m}\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mtearDown\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mquit\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mif\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m__name__\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m==\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m__main__\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34munittest\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mmain\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m This script uses the Page Object Pattern to encapsulate the login page elements and actions. It includes a test \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m case \u001b[1;36;40mtest_login_valid\u001b[0m that verifies successful login with valid credentials. The script also includes error \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m handling to catch unexpected exceptions during the test execution. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "=== Selenium Generation ===\n", + " ```python\n", + "from selenium import webdriver\n", + "from selenium.webdriver.common.by import By\n", + "from selenium.webdriver.common.keys import Keys\n", + "from selenium.webdriver.support.ui import WebDriverWait\n", + "from selenium.webdriver.support import expected_conditions as EC\n", + "import unittest\n", + "\n", + "class LoginPage:\n", + " def __init__(self, driver):\n", + " self.driver = driver\n", + " self.email_input = (By.ID, 'email') # Assuming the email input field has an ID 'email'\n", + " self.password_input = (By.ID, 'password') # Assuming the password input field has an ID 'password'\n", + " self.login_button = (By.ID, 'loginButton') # Assuming the login button has an ID 'loginButton'\n", + " self.dashboard = (By.ID, 'dashboard') # Assuming the dashboard has an ID 'dashboard'\n", + " self.welcome_message = (By.ID, 'welcomeMessage') # Assuming the welcome message has an ID 'welcomeMessage'\n", + "\n", + " def enter_email(self, email):\n", + " email_field = self.driver.find_element(*self.email_input)\n", + " email_field.clear()\n", + " email_field.send_keys(email)\n", + "\n", + " def enter_password(self, password):\n", + " password_field = self.driver.find_element(*self.password_input)\n", + " password_field.clear()\n", + " password_field.send_keys(password)\n", + "\n", + " def click_login(self):\n", + " login_btn = self.driver.find_element(*self.login_button)\n", + " login_btn.click()\n", + "\n", + " def is_dashboard_displayed(self):\n", + " try:\n", + " WebDriverWait(self.driver, 10).until(\n", + " EC.visibility_of_element_located(self.dashboard)\n", + " )\n", + " return True\n", + " except:\n", + " return False\n", + "\n", + " def get_welcome_message(self):\n", + " try:\n", + " welcome_msg = WebDriverWait(self.driver, 10).until(\n", + " EC.visibility_of_element_located(self.welcome_message)\n", + " )\n", + " return welcome_msg.text\n", + " except:\n", + " return None\n", + "\n", + "class TestLogin(unittest.TestCase):\n", + " def setUp(self):\n", + " self.driver = webdriver.Chrome() # Or use any other WebDriver\n", + " self.driver.get('http://example.com/login') # Replace with the actual login page URL\n", + " self.login_page = LoginPage(self.driver)\n", + "\n", + " def test_login_valid(self):\n", + " try:\n", + " self.login_page.enter_email('user@example.com')\n", + " self.login_page.enter_password('password123')\n", + " self.login_page.click_login()\n", + "\n", + " # Assertions\n", + " self.assertTrue(self.login_page.is_dashboard_displayed(), \"Dashboard is not displayed\")\n", + " welcome_message = self.login_page.get_welcome_message()\n", + " self.assertIsNotNone(welcome_message, \"Welcome message is not displayed\")\n", + " self.assertIn(\"Welcome\", welcome_message, \"Welcome message does not contain 'Welcome'\")\n", + " except Exception as e:\n", + " self.fail(f\"Test failed due to an unexpected error: {e}\")\n", + "\n", + " def tearDown(self):\n", + " self.driver.quit()\n", + "\n", + "if __name__ == \"__main__\":\n", + " unittest.main()\n", + "```\n", + "\n", + "This script uses the Page Object Pattern to encapsulate the login page elements and actions. It includes a test case `test_login_valid` that verifies successful login with valid credentials. The script also includes error handling to catch unexpected exceptions during the test execution.\n" + ] + }, + { + "data": { + "text/html": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Agent โ\n", + "โ Role: Assistant โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[38;2;210;227;200mโญโ\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[38;2;210;227;200mโโฎ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;255;155;155m๐ค Agent:\u001b[0m \u001b[38;2;255;229;229mAgent\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "16cdd551272342dc9b90aea5052ddc87", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Response generated in 8.5s\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[2mResponse generated in 8.5s\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Generate manual test cases for this user story: As a user, I want to login to the application so that I can โ\n", + "โ access my account โ\n", + "โ โ\n", + "โ Include: โ\n", + "โ โ\n", + "โ โข Test case ID โ\n", + "โ โข Test steps โ\n", + "โ โข Expected results โ\n", + "โ โข Test data โ\n", + "โ โข Priority levels โ\n", + "โ โ\n", + "โ Format as: Test Case ID: TC001 Test Steps: โ\n", + "โ โ\n", + "โ 1 [step] โ\n", + "โ 2 [step] Expected Result: [result] Priority: [High/Medium/Low] โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Generate manual test cases for this user story: As a user, I want to login to the application so that I can \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m access my account \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Include: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mTest case ID \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mTest steps \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mExpected results \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mTest data \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mPriority levels \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Format as: Test Case ID: TC001 Test Steps: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0m[step] \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0m[step] Expected Result: [result] Priority: [High/Medium/Low] \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Test Case ID: TC001 โ\n", + "โ Test Steps: โ\n", + "โ โ\n", + "โ 1 Navigate to the application login page. โ\n", + "โ 2 Enter a valid email address \"user@example.com\" in the email field. โ\n", + "โ 3 Enter a valid password \"password123\" in the password field. โ\n", + "โ 4 Click the login button. โ\n", + "โ Expected Result: The user is successfully logged in and redirected to the dashboard. A welcome message is โ\n", + "โ displayed. โ\n", + "โ Test Data: Email - \"user@example.com\", Password - \"password123\" โ\n", + "โ Priority: High โ\n", + "โ โ\n", + "โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ\n", + "โ Test Case ID: TC002 โ\n", + "โ Test Steps: โ\n", + "โ โ\n", + "โ 1 Navigate to the application login page. โ\n", + "โ 2 Enter a valid email address \"user@example.com\" in the email field. โ\n", + "โ 3 Enter an incorrect password \"wrongpassword\" in the password field. โ\n", + "โ 4 Click the login button. โ\n", + "โ Expected Result: An error message \"Invalid email or password\" is displayed. The user remains on the login โ\n", + "โ page. โ\n", + "โ Test Data: Email - \"user@example.com\", Password - \"wrongpassword\" โ\n", + "โ Priority: High โ\n", + "โ โ\n", + "โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ\n", + "โ Test Case ID: TC003 โ\n", + "โ Test Steps: โ\n", + "โ โ\n", + "โ 1 Navigate to the application login page. โ\n", + "โ 2 Enter an unregistered email address \"unregistered@example.com\" in the email field. โ\n", + "โ 3 Enter any password \"password123\" in the password field. โ\n", + "โ 4 Click the login button. โ\n", + "โ Expected Result: An error message \"Invalid email or password\" is displayed. The user remains on the login โ\n", + "โ page. โ\n", + "โ Test Data: Email - \"unregistered@example.com\", Password - \"password123\" โ\n", + "โ Priority: High โ\n", + "โ โ\n", + "โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ\n", + "โ Test Case ID: TC004 โ\n", + "โ Test Steps: โ\n", + "โ โ\n", + "โ 1 Navigate to the application login page. โ\n", + "โ 2 Leave the email field empty. โ\n", + "โ 3 Leave the password field empty. โ\n", + "โ 4 Click the login button. โ\n", + "โ Expected Result: An error message \"Email and password are required\" is displayed. The user remains on the โ\n", + "โ login page. โ\n", + "โ Test Data: Email - \"\", Password - \"\" โ\n", + "โ Priority: Medium โ\n", + "โ โ\n", + "โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ\n", + "โ Test Case ID: TC005 โ\n", + "โ Test Steps: โ\n", + "โ โ\n", + "โ 1 Navigate to the application login page. โ\n", + "โ 2 Enter a valid email address \"user@example.com\" in the email field. โ\n", + "โ 3 Leave the password field empty. โ\n", + "โ 4 Click the login button. โ\n", + "โ Expected Result: An error message \"Password is required\" is displayed. The user remains on the login page. โ\n", + "โ Test Data: Email - \"user@example.com\", Password - \"\" โ\n", + "โ Priority: Medium โ\n", + "โ โ\n", + "โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ\n", + "โ Test Case ID: TC006 โ\n", + "โ Test Steps: โ\n", + "โ โ\n", + "โ 1 Navigate to the application login page. โ\n", + "โ 2 Leave the email field empty. โ\n", + "โ 3 Enter a valid password \"password123\" in the password field. โ\n", + "โ 4 Click the login button. โ\n", + "โ Expected Result: An error message \"Email is required\" is displayed. The user remains on the login page. โ\n", + "โ Test Data: Email - \"\", Password - \"password123\" โ\n", + "โ Priority: Medium โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Case ID: TC001 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Steps: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0mNavigate to the application login page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0mEnter a valid email address \"user@example.com\" in the email field. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 3 \u001b[0mEnter a valid password \"password123\" in the password field. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 4 \u001b[0mClick the login button. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mExpected Result: The user is successfully logged in and redirected to the dashboard. A welcome message is \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mdisplayed. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mTest Data: Email - \"user@example.com\", Password - \"password123\" \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mPriority: High \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[33mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Case ID: TC002 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Steps: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0mNavigate to the application login page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0mEnter a valid email address \"user@example.com\" in the email field. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 3 \u001b[0mEnter an incorrect password \"wrongpassword\" in the password field. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 4 \u001b[0mClick the login button. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mExpected Result: An error message \"Invalid email or password\" is displayed. The user remains on the login \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mpage. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mTest Data: Email - \"user@example.com\", Password - \"wrongpassword\" \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mPriority: High \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[33mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Case ID: TC003 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Steps: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0mNavigate to the application login page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0mEnter an unregistered email address \"unregistered@example.com\" in the email field. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 3 \u001b[0mEnter any password \"password123\" in the password field. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 4 \u001b[0mClick the login button. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mExpected Result: An error message \"Invalid email or password\" is displayed. The user remains on the login \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mpage. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mTest Data: Email - \"unregistered@example.com\", Password - \"password123\" \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mPriority: High \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[33mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Case ID: TC004 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Steps: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0mNavigate to the application login page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0mLeave the email field empty. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 3 \u001b[0mLeave the password field empty. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 4 \u001b[0mClick the login button. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mExpected Result: An error message \"Email and password are required\" is displayed. The user remains on the \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mlogin page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mTest Data: Email - \"\", Password - \"\" \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mPriority: Medium \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[33mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Case ID: TC005 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Steps: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0mNavigate to the application login page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0mEnter a valid email address \"user@example.com\" in the email field. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 3 \u001b[0mLeave the password field empty. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 4 \u001b[0mClick the login button. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mExpected Result: An error message \"Password is required\" is displayed. The user remains on the login page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mTest Data: Email - \"user@example.com\", Password - \"\" \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mPriority: Medium \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[33mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Case ID: TC006 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Steps: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0mNavigate to the application login page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0mLeave the email field empty. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 3 \u001b[0mEnter a valid password \"password123\" in the password field. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 4 \u001b[0mClick the login button. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mExpected Result: An error message \"Email is required\" is displayed. The user remains on the login page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mTest Data: Email - \"\", Password - \"password123\" \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mPriority: Medium \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "=== Manual Test Generation ===\n", + " Test Case ID: TC001 \n", + "Test Steps: \n", + "1. Navigate to the application login page. \n", + "2. Enter a valid email address \"user@example.com\" in the email field. \n", + "3. Enter a valid password \"password123\" in the password field. \n", + "4. Click the login button. \n", + "Expected Result: The user is successfully logged in and redirected to the dashboard. A welcome message is displayed. \n", + "Test Data: Email - \"user@example.com\", Password - \"password123\" \n", + "Priority: High \n", + "\n", + "---\n", + "\n", + "Test Case ID: TC002 \n", + "Test Steps: \n", + "1. Navigate to the application login page. \n", + "2. Enter a valid email address \"user@example.com\" in the email field. \n", + "3. Enter an incorrect password \"wrongpassword\" in the password field. \n", + "4. Click the login button. \n", + "Expected Result: An error message \"Invalid email or password\" is displayed. The user remains on the login page. \n", + "Test Data: Email - \"user@example.com\", Password - \"wrongpassword\" \n", + "Priority: High \n", + "\n", + "---\n", + "\n", + "Test Case ID: TC003 \n", + "Test Steps: \n", + "1. Navigate to the application login page. \n", + "2. Enter an unregistered email address \"unregistered@example.com\" in the email field. \n", + "3. Enter any password \"password123\" in the password field. \n", + "4. Click the login button. \n", + "Expected Result: An error message \"Invalid email or password\" is displayed. The user remains on the login page. \n", + "Test Data: Email - \"unregistered@example.com\", Password - \"password123\" \n", + "Priority: High \n", + "\n", + "---\n", + "\n", + "Test Case ID: TC004 \n", + "Test Steps: \n", + "1. Navigate to the application login page. \n", + "2. Leave the email field empty. \n", + "3. Leave the password field empty. \n", + "4. Click the login button. \n", + "Expected Result: An error message \"Email and password are required\" is displayed. The user remains on the login page. \n", + "Test Data: Email - \"\", Password - \"\" \n", + "Priority: Medium \n", + "\n", + "---\n", + "\n", + "Test Case ID: TC005 \n", + "Test Steps: \n", + "1. Navigate to the application login page. \n", + "2. Enter a valid email address \"user@example.com\" in the email field. \n", + "3. Leave the password field empty. \n", + "4. Click the login button. \n", + "Expected Result: An error message \"Password is required\" is displayed. The user remains on the login page. \n", + "Test Data: Email - \"user@example.com\", Password - \"\" \n", + "Priority: Medium \n", + "\n", + "---\n", + "\n", + "Test Case ID: TC006 \n", + "Test Steps: \n", + "1. Navigate to the application login page. \n", + "2. Leave the email field empty. \n", + "3. Enter a valid password \"password123\" in the password field. \n", + "4. Click the login button. \n", + "Expected Result: An error message \"Email is required\" is displayed. The user remains on the login page. \n", + "Test Data: Email - \"\", Password - \"password123\" \n", + "Priority: Medium\n" + ] + }, + { + "data": { + "text/html": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Agent โ\n", + "โ Role: Assistant โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[38;2;210;227;200mโญโ\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[38;2;210;227;200mโโฎ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;255;155;155m๐ค Agent:\u001b[0m \u001b[38;2;255;229;229mAgent\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ad9fe9c352c24614ad3de1b127b1c560", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Response generated in 11.6s\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[2mResponse generated in 11.6s\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Answer this testing question: What is the difference between unit testing and integration testing? โ\n", + "โ โ\n", + "โ Provide: โ\n", + "โ โ\n", + "โ โข Clear explanation โ\n", + "โ โข Best practices โ\n", + "โ โข Examples if relevant โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Answer this testing question: What is the difference between unit testing and integration testing? \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Provide: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mClear explanation \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mBest practices \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mExamples if relevant \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Explanation: โ\n", + "โ โ\n", + "โ Unit Testing: โ\n", + "โ โ\n", + "โ โข Unit testing involves testing individual components or functions of a software application in isolation. The โ\n", + "โ primary goal is to validate that each unit of the software performs as expected. โ\n", + "โ โข It is typically performed by developers during the development phase. โ\n", + "โ โข Unit tests are usually automated and written using testing frameworks such as JUnit for Java, NUnit for โ\n", + "โ .NET, or PyTest for Python. โ\n", + "โ โข These tests focus on a single \"unit\" of code, which could be a function, method, or class, and ensure that โ\n", + "โ it behaves correctly under various conditions. โ\n", + "โ โ\n", + "โ Integration Testing: โ\n", + "โ โ\n", + "โ โข Integration testing focuses on testing the interactions between different components or modules of a โ\n", + "โ software application. โ\n", + "โ โข The goal is to identify issues that occur when units are combined and to ensure that integrated components โ\n", + "โ work together as intended. โ\n", + "โ โข It is usually performed after unit testing and can be done by developers or dedicated testers. โ\n", + "โ โข Integration tests can be automated or manual and often involve testing interfaces, data flow, and โ\n", + "โ communication between modules. โ\n", + "โ โ\n", + "โ Best Practices: โ\n", + "โ โ\n", + "โ Unit Testing Best Practices: โ\n", + "โ โ\n", + "โ โข Write tests for all critical paths and edge cases. โ\n", + "โ โข Keep tests small and focused on a single functionality. โ\n", + "โ โข Use mock objects to isolate the unit being tested from its dependencies. โ\n", + "โ โข Ensure tests are fast to execute to encourage frequent runs. โ\n", + "โ โข Maintain clear and descriptive test names to indicate their purpose. โ\n", + "โ โ\n", + "โ Integration Testing Best Practices: โ\n", + "โ โ\n", + "โ โข Test interactions between modules in a realistic environment that mimics production. โ\n", + "โ โข Focus on testing interfaces and data exchange between components. โ\n", + "โ โข Use real data where possible to simulate actual usage scenarios. โ\n", + "โ โข Prioritize testing critical integration points that are prone to failure. โ\n", + "โ โข Automate integration tests to ensure they are run consistently and frequently. โ\n", + "โ โ\n", + "โ Examples: โ\n", + "โ โ\n", + "โ Unit Testing Example: โ\n", + "โ โ\n", + "โ โข Testing a function that calculates the sum of two numbers. The test would check if the function returns the โ\n", + "โ correct sum for various input values, such as positive numbers, negative numbers, and zero. โ\n", + "โ โ\n", + "โ Integration Testing Example: โ\n", + "โ โ\n", + "โ โข Testing the interaction between a user authentication module and a database. The test would verify that the โ\n", + "โ authentication module correctly queries the database to validate user credentials and handles various โ\n", + "โ scenarios like successful login, incorrect password, and unregistered email. โ\n", + "โ โ\n", + "โ In summary, unit testing focuses on individual components in isolation, while integration testing ensures that โ\n", + "โ combined components work together as expected. Both types of testing are crucial for delivering a reliable and โ\n", + "โ robust software application. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mExplanation:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mUnit Testing:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mUnit testing involves testing individual components or functions of a software application in isolation. The \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mprimary goal is to validate that each unit of the software performs as expected. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mIt is typically performed by developers during the development phase. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mUnit tests are usually automated and written using testing frameworks such as JUnit for Java, NUnit for \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m.NET, or PyTest for Python. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mThese tests focus on a single \"unit\" of code, which could be a function, method, or class, and ensure that \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mit behaves correctly under various conditions. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mIntegration Testing:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mIntegration testing focuses on testing the interactions between different components or modules of a \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0msoftware application. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mThe goal is to identify issues that occur when units are combined and to ensure that integrated components \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mwork together as intended. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mIt is usually performed after unit testing and can be done by developers or dedicated testers. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mIntegration tests can be automated or manual and often involve testing interfaces, data flow, and \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mcommunication between modules. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mBest Practices:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mUnit Testing Best Practices:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mWrite tests for all critical paths and edge cases. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mKeep tests small and focused on a single functionality. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mUse mock objects to isolate the unit being tested from its dependencies. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mEnsure tests are fast to execute to encourage frequent runs. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mMaintain clear and descriptive test names to indicate their purpose. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mIntegration Testing Best Practices:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mTest interactions between modules in a realistic environment that mimics production. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mFocus on testing interfaces and data exchange between components. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mUse real data where possible to simulate actual usage scenarios. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mPrioritize testing critical integration points that are prone to failure. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mAutomate integration tests to ensure they are run consistently and frequently. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mExamples:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mUnit Testing Example:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mTesting a function that calculates the sum of two numbers. The test would check if the function returns the \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mcorrect sum for various input values, such as positive numbers, negative numbers, and zero. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mIntegration Testing Example:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mTesting the interaction between a user authentication module and a database. The test would verify that the \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mauthentication module correctly queries the database to validate user credentials and handles various \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mscenarios like successful login, incorrect password, and unregistered email. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m In summary, unit testing focuses on individual components in isolation, while integration testing ensures that \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m combined components work together as expected. Both types of testing are crucial for delivering a reliable and \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m robust software application. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "=== Chat Assistance ===\n", + " **Explanation:**\n", + "\n", + "**Unit Testing:**\n", + "- Unit testing involves testing individual components or functions of a software application in isolation. The primary goal is to validate that each unit of the software performs as expected.\n", + "- It is typically performed by developers during the development phase.\n", + "- Unit tests are usually automated and written using testing frameworks such as JUnit for Java, NUnit for .NET, or PyTest for Python.\n", + "- These tests focus on a single \"unit\" of code, which could be a function, method, or class, and ensure that it behaves correctly under various conditions.\n", + "\n", + "**Integration Testing:**\n", + "- Integration testing focuses on testing the interactions between different components or modules of a software application.\n", + "- The goal is to identify issues that occur when units are combined and to ensure that integrated components work together as intended.\n", + "- It is usually performed after unit testing and can be done by developers or dedicated testers.\n", + "- Integration tests can be automated or manual and often involve testing interfaces, data flow, and communication between modules.\n", + "\n", + "**Best Practices:**\n", + "\n", + "**Unit Testing Best Practices:**\n", + "- Write tests for all critical paths and edge cases.\n", + "- Keep tests small and focused on a single functionality.\n", + "- Use mock objects to isolate the unit being tested from its dependencies.\n", + "- Ensure tests are fast to execute to encourage frequent runs.\n", + "- Maintain clear and descriptive test names to indicate their purpose.\n", + "\n", + "**Integration Testing Best Practices:**\n", + "- Test interactions between modules in a realistic environment that mimics production.\n", + "- Focus on testing interfaces and data exchange between components.\n", + "- Use real data where possible to simulate actual usage scenarios.\n", + "- Prioritize testing critical integration points that are prone to failure.\n", + "- Automate integration tests to ensure they are run consistently and frequently.\n", + "\n", + "**Examples:**\n", + "\n", + "**Unit Testing Example:**\n", + "- Testing a function that calculates the sum of two numbers. The test would check if the function returns the correct sum for various input values, such as positive numbers, negative numbers, and zero.\n", + "\n", + "**Integration Testing Example:**\n", + "- Testing the interaction between a user authentication module and a database. The test would verify that the authentication module correctly queries the database to validate user credentials and handles various scenarios like successful login, incorrect password, and unregistered email.\n", + "\n", + "In summary, unit testing focuses on individual components in isolation, while integration testing ensures that combined components work together as expected. Both types of testing are crucial for delivering a reliable and robust software application.\n" + ] + } + ], + "source": [ + "# Example 1: Generate Gherkin\n", + "gherkin_result = qa_agent.route_request({\n", + " \"agentType\": \"gherkin\",\n", + " \"requirement\": \"User login functionality with email and password\",\n", + " \"featureName\": \"User Authentication\"\n", + "})\n", + "print(\"=== Gherkin Generation ===\\n\", gherkin_result)\n", + "\n", + "# Example 2: Generate Selenium\n", + "selenium_result = qa_agent.route_request({\n", + " \"agentType\": \"selenium\",\n", + " \"requirement\": \"Test login page with valid credentials\",\n", + " \"testName\": \"test_login_valid\",\n", + " \"language\": \"python\"\n", + "})\n", + "print(\"\\n=== Selenium Generation ===\\n\", selenium_result)\n", + "\n", + "# Example 3: Generate Manual Tests\n", + "manual_result = qa_agent.route_request({\n", + " \"agentType\": \"manual\",\n", + " \"requirement\": \"As a user, I want to login to the application so that I can access my account\"\n", + "})\n", + "print(\"\\n=== Manual Test Generation ===\\n\", manual_result)\n", + "\n", + "# Example 4: Chat Assistance\n", + "chat_result = qa_agent.route_request({\n", + " \"agentType\": \"chat\",\n", + " \"requirement\": \"What is the difference between unit testing and integration testing?\"\n", + "})\n", + "print(\"\\n=== Chat Assistance ===\\n\", chat_result)" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}