From 55ad9a96d504b69edf6040ab4964fa76707a5d16 Mon Sep 17 00:00:00 2001 From: Nithu Lakshmi Date: Tue, 10 Dec 2024 14:43:47 +0530 Subject: [PATCH 1/3] Initial Commit --- Formy_Project/.classpath | 11 +++ Formy_Project/.project | 17 ++++ .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 14 ++++ .../bin/formy_project/Web_Form.class | Bin 0 -> 4216 bytes Formy_Project/src/formy_project/Web_Form.java | 79 ++++++++++++++++++ 6 files changed, 123 insertions(+) create mode 100644 Formy_Project/.classpath create mode 100644 Formy_Project/.project create mode 100644 Formy_Project/.settings/org.eclipse.core.resources.prefs create mode 100644 Formy_Project/.settings/org.eclipse.jdt.core.prefs create mode 100644 Formy_Project/bin/formy_project/Web_Form.class create mode 100644 Formy_Project/src/formy_project/Web_Form.java diff --git a/Formy_Project/.classpath b/Formy_Project/.classpath new file mode 100644 index 0000000..900895c --- /dev/null +++ b/Formy_Project/.classpath @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Formy_Project/.project b/Formy_Project/.project new file mode 100644 index 0000000..925f8b1 --- /dev/null +++ b/Formy_Project/.project @@ -0,0 +1,17 @@ + + + Formy_Project + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Formy_Project/.settings/org.eclipse.core.resources.prefs b/Formy_Project/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/Formy_Project/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/Formy_Project/.settings/org.eclipse.jdt.core.prefs b/Formy_Project/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..6e5f874 --- /dev/null +++ b/Formy_Project/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,14 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=22 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=22 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=22 diff --git a/Formy_Project/bin/formy_project/Web_Form.class b/Formy_Project/bin/formy_project/Web_Form.class new file mode 100644 index 0000000000000000000000000000000000000000..264d74a999dedd88a4c2c2501f1368fc4435f2f7 GIT binary patch literal 4216 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 P*BYC6SY3lZH8%YlJyN9P literal 0 HcmV?d00001 diff --git a/Formy_Project/src/formy_project/Web_Form.java b/Formy_Project/src/formy_project/Web_Form.java new file mode 100644 index 0000000..ecb4ee7 --- /dev/null +++ b/Formy_Project/src/formy_project/Web_Form.java @@ -0,0 +1,79 @@ +package formy_project; + +import java.time.Duration; +import org.openqa.selenium.By; +import org.openqa.selenium.JavascriptExecutor; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.Select; +import org.openqa.selenium.support.ui.WebDriverWait; + +public class Web_Form { + + public static void main(String[] args) { + WebDriver driver = new ChromeDriver(); + driver.manage().window().maximize(); + + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); + driver.get("https://formy-project.herokuapp.com/form"); + waitForTheUser(); + + WebElement firstName = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='first-name']"))); + firstName.click(); + firstName.sendKeys("Chris"); + waitForTheUser(); + + WebElement lastName = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='last-name']"))); + lastName.click(); + lastName.sendKeys("Redfield"); + waitForTheUser(); + + WebElement jobTitle = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='job-title']"))); + jobTitle.click(); + jobTitle.sendKeys("QA Engineer"); + waitForTheUser(); + + WebElement highLevelEducation = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='radio-button-3']"))); + highLevelEducation.click(); + waitForTheUser(); + + JavascriptExecutor scrollDown = (JavascriptExecutor) driver; + scrollDown.executeScript("window.scrollBy(0,400)"); + waitForTheUser(); + + WebElement genderField = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='checkbox-2']"))); + genderField.click(); + waitForTheUser(); + + WebElement yearOfExperience = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//select[@id='select-menu']"))); + Select object = new Select (yearOfExperience); + object.selectByVisibleText("2-4"); + waitForTheUser(); + + WebElement datePicker = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='datepicker']"))); + datePicker.click(); + datePicker.sendKeys("07/12/2022"); + waitForTheUser(); + + WebElement submitButton = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@role='button']"))); + submitButton.click(); + waitForTheUser(); + + WebElement successMessage = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//h1[@align='center']"))); + System.out.println("Login Message: " + successMessage.getText()); + System.out.println("The form was successfully submitted!"); + waitForTheUser(); + + driver.quit(); + } + + public static void waitForTheUser() { + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} From 53f4e1892df85304ec2ae9965c715d1eb87c1231 Mon Sep 17 00:00:00 2001 From: Nithu Lakshmi <110821617+niths09@users.noreply.github.com> Date: Tue, 10 Dec 2024 14:55:17 +0530 Subject: [PATCH 2/3] Delete ToolsQA_Project directory --- ToolsQA_Project/.classpath | 11 -- ToolsQA_Project/.project | 17 --- .../org.eclipse.core.resources.prefs | 2 - .../.settings/org.eclipse.jdt.core.prefs | 14 --- .../tools_qa_page/Registeration_Form.class | Bin 4249 -> 0 bytes .../src/tools_qa_page/Registeration_Form.java | 99 ------------------ 6 files changed, 143 deletions(-) delete mode 100644 ToolsQA_Project/.classpath delete mode 100644 ToolsQA_Project/.project delete mode 100644 ToolsQA_Project/.settings/org.eclipse.core.resources.prefs delete mode 100644 ToolsQA_Project/.settings/org.eclipse.jdt.core.prefs delete mode 100644 ToolsQA_Project/bin/tools_qa_page/Registeration_Form.class delete mode 100644 ToolsQA_Project/src/tools_qa_page/Registeration_Form.java diff --git a/ToolsQA_Project/.classpath b/ToolsQA_Project/.classpath deleted file mode 100644 index 900895c..0000000 --- a/ToolsQA_Project/.classpath +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/ToolsQA_Project/.project b/ToolsQA_Project/.project deleted file mode 100644 index 7cf210a..0000000 --- a/ToolsQA_Project/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - ToolsQA_Project - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/ToolsQA_Project/.settings/org.eclipse.core.resources.prefs b/ToolsQA_Project/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/ToolsQA_Project/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/ToolsQA_Project/.settings/org.eclipse.jdt.core.prefs b/ToolsQA_Project/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 6e5f874..0000000 --- a/ToolsQA_Project/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,14 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=22 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=22 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning -org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=22 diff --git a/ToolsQA_Project/bin/tools_qa_page/Registeration_Form.class b/ToolsQA_Project/bin/tools_qa_page/Registeration_Form.class deleted file mode 100644 index e93963cc549b560f863c2ef5bdfa588825123684..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4249 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 b*X7)3Ip>q#SJ!a7ScErtP4N0=b Date: Tue, 10 Dec 2024 14:58:19 +0530 Subject: [PATCH 3/3] Initial README.md --- README.md | 63 ++++++++++++++++++++----------------------------------- 1 file changed, 23 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index b50cf48..165e003 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,23 @@ -# ToolsQA Automation Using Selenium - -### Description -This project demonstrates an automation script for user registration, login and logout on the ToolsQA demo application. The script interacts with the web elements on the registration and login pages to simulate a user performing the following tasks: -1. Registering a new account. -2. Logging in with the registered account. -3. Logging out of the account. - -The script uses Selenium WebDriver with Java and incorporates manual handling for CAPTCHA verification. - - -### Features -- Automates the registration process by filling in user details. -- Handles manual CAPTCHA solving with a pause in the script. -- Automates login and logout functionalities after successful registration. -- Alerts and confirmations are managed effectively in the script. -- Uses dynamic waits to handle varying page load times. - - -### Prerequisites -Before running the project, ensure the following are installed and set up: - -1. **Java Development Kit (JDK)**: Install JDK 8 or later and set up the environment variables. -2. **Selenium WebDriver**: Include the Selenium library in your project. You can add it using a dependency manager like Maven/Gradle or manually download it. -3. **WebDriver Binary**: Ensure the ChromeDriver binary is installed and matches your Chrome browser version. Place it in a directory included in your system's PATH or provide the path explicitly in the code. -4. **Browser**: Google Chrome browser installed on the system. -5. **IDE**: Use an Integrated Development Environment like IntelliJ IDEA or Eclipse to run the script. - - -### **Technologies Used** -- **Programming Language**: Java -- **Automation Framework**: Selenium WebDriver -- **Browser**: Google Chrome -- **Testing Environment**: ToolsQA Demo Page -- **Java Libraries**: - - Selenium Support Libraries (`org.openqa.selenium.*`) - - WebDriverWait and ExpectedConditions for dynamic waits - - Java Utilities like `Scanner` for user input - - JavaScript Executor for smooth scrolling - +# Web Form Automation with Selenium + +This project demonstrates an automated script for filling out a web form using Selenium WebDriver. The script interacts with the website, which is designed to practice and master Selenium WebDriver automation. + +## Features +- Opens the Formy web form page. +- Fills out user details including name, job title, education level, gender, and years of experience. +- Inputs a specified date using a date picker. +- Submits the form and retrieves a success message. +- Incorporates best practices like explicit waits and JavaScript execution for enhanced performance. + +## Prerequisites +Before running this project, ensure you have the following installed: +1. **Java Development Kit (JDK)** - Version 8 or above. +2. **Google Chrome** - Latest stable version. +3. **ChromeDriver** - Version compatible with your Google Chrome browser. +4. **Selenium WebDriver** - Included in the project dependencies. + +## Technologies Used +- **Java** - The programming language for automation. +- **Selenium WebDriver** - For interacting with web elements and automating browser actions. +- **Google Chrome & ChromeDriver** - For browser automation. +- **JavaScript Executor** - For scrolling and handling advanced browser interactions.