--> A Beginner's Guide to Selenium WebDriver Commands | Automation, your comprehensive guide to the world of business and technology

A Beginner's Guide to Selenium WebDriver Commands

A Beginner's Guide to Selenium WebDriver CommandsLearning Selenium WebDriver commands is a valuable skill that can enhance your career prospects in th

 Introduction:
A Beginner's Guide to Selenium WebDriver Commands

In today's technology-driven world, software testing has become an integral part of the software development life cycle. With the rise of agile development methodologies and continuous integration and delivery, it is essential to have robust and efficient testing frameworks. Selenium WebDriver is a popular tool for testing web applications that allows developers and testers to automate web browsers' actions. According to a recent survey by StackOverflow, Selenium is one of the most popular testing tools, with over 47% of respondents claiming to use it for web testing.

As a beginner, learning Selenium WebDriver commands can be overwhelming, but it is essential to ensure efficient and effective test automation. In this guide, we will provide a comprehensive overview of Selenium WebDriver commands, covering installation, locators, WebElement commands, navigation commands, waits, and testing frameworks. With this guide, beginners will learn how to get started with Selenium WebDriver and automate web application testing efficiently.

  • Briefly introduce Selenium WebDriver

  • Selenium WebDriver is an open-source tool that allows developers and testers to automate web browsers' actions. It is a popular choice for web application testing as it supports various programming languages such as Java, Python, C#, and more. Selenium WebDriver simulates user interactions with web applications and can perform actions such as clicking buttons, entering text, selecting dropdowns, and more. It also provides various locators to identify web elements on a web page, making it easier to automate tests. Selenium WebDriver is widely used in software development and testing to ensure efficient and effective test automation.

  • Importance of learning Selenium WebDriver commands

  • Learning Selenium WebDriver commands is crucial for efficient and effective test automation. Here are some reasons why:

    1. Faster Testing: Selenium WebDriver automates testing, allowing developers and testers to perform repetitive tests quickly, saving time and effort.

    2. Increased Test Coverage: Selenium WebDriver can perform tests on multiple browsers and operating systems simultaneously, enabling developers and testers to test a web application's compatibility across various platforms.

    3. Improved Test Accuracy: Manual testing is prone to human errors. By automating tests with Selenium WebDriver, developers and testers can improve test accuracy, reducing the likelihood of errors.

    4. Cost-Effective: Automating tests with Selenium WebDriver is cost-effective compared to manual testing, as it reduces the need for human resources and eliminates the need for physical testing devices.

    5. Continuous Integration: Selenium WebDriver can be integrated with continuous integration tools such as Jenkins and Travis CI, allowing for seamless integration of testing into the software development lifecycle.

    In summary, learning Selenium WebDriver commands is essential for developers and testers to perform efficient, accurate, and cost-effective web application testing, allowing for seamless integration of testing into the software development lifecycle.

I. Setting up Selenium WebDriver


  • Installation of Selenium WebDriver

  • To use Selenium WebDriver, you need to set up the environment on your computer. Here are the steps to install Selenium WebDriver:

    1. Install Java Development Kit (JDK): Download and install the latest version of JDK from Oracle's official website. Set the JAVA_HOME environment variable to the JDK installation directory.

    2. Install an Integrated Development Environment (IDE): You can use any IDE of your choice, such as Eclipse or IntelliJ IDEA.

    3. Download Selenium WebDriver: Download the latest version of Selenium WebDriver from the official website (https://www.selenium.dev/downloads/). Choose the programming language and the browser you want to test, and download the respective driver.

    4. Configure Selenium WebDriver: Extract the downloaded zip file and add the driver's location to your system's PATH variable.

    5. Set up a Project: Open your IDE and create a new Java project. Add the Selenium WebDriver jar files to your project's build path.

    6. Write Your First Test: Write your first test using Selenium WebDriver commands and run it to verify the setup.

    Here are some useful URLs to help you with the installation process:

  • Installation of drivers (Chrome, Firefox, etc.)

  • Understanding the basic structure of Selenium WebDriver

  • Selenium WebDriver uses a specific structure to interact with web elements and automate tests. Here's a basic overview of the structure:

    1. Create an instance of the WebDriver: Instantiate a WebDriver object for the browser you want to test. For example, if you want to test with Chrome, create an instance of ChromeDriver.

    2. Navigate to a web page: Use the navigate() method of the WebDriver object to navigate to a URL. For example, to go to Google, you can use driver.navigate().to("https://www.google.com").

    3. Locate web elements: Use the findElement() method of the WebDriver object to locate web elements on the page. The method returns a WebElement object, which you can use to perform actions on the element.

    4. Interact with web elements: Use the WebElement object to perform actions on the element. For example, you can use the click() method to click a button or the sendKeys() method to enter text into a text field.

    5. Assertions and verifications: Use assertion methods, such as assertEquals() or assertTrue(), to verify that the web application behaves as expected.

    6. Close the browser: Use the quit() method of the WebDriver object to close the browser window.

    Here's an example code snippet in Java that demonstrates the basic structure of Selenium WebDriver:

    java
    import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class ExampleTest { public static void main(String[] args) { // Create an instance of the ChromeDriver WebDriver driver = new ChromeDriver(); // Navigate to Google driver.navigate().to("https://www.google.com"); // Locate the search field WebElement searchField = driver.findElement(By.name("q")); // Enter text into the search field searchField.sendKeys("Selenium WebDriver commands"); // Click the search button searchField.submit(); // Verify that the search results page contains the search query String title = driver.getTitle(); assertTrue(title.contains("Selenium WebDriver commands")); // Close the browser window driver.quit(); } }

    In summary, understanding the basic structure of Selenium WebDriver is crucial for writing efficient and effective automated tests for web applications.

II. Locators in Selenium WebDriver

  • Different types of locators (ID, Name, Class Name, CSS Selector, XPath, etc.)

  • Selenium WebDriver provides several methods to locate web elements on a web page. These methods are called locators and they allow you to identify web elements using various attributes. Here are the most commonly used locators in Selenium WebDriver:

    1. ID: The ID attribute is unique for each element on a web page, and it is the most efficient way to locate elements. Use the findElement(By.id("id")) method to locate an element by its ID.

    2. Name: The name attribute is used to identify form fields on a web page. Use the findElement(By.name("name")) method to locate an element by its name.

    3. Class Name: The class name attribute is used to identify elements with the same class. Use the findElement(By.className("class-name")) method to locate an element by its class name.

    4. CSS Selector: CSS selectors allow you to locate elements based on their attributes, such as their class or ID. Use the findElement(By.cssSelector("selector")) method to locate an element using a CSS selector.

    5. XPath: XPath is a powerful way to locate elements by their HTML structure or attributes. Use the findElement(By.xpath("xpath")) method to locate an element using an XPath expression.

    6. Link Text: Use the findElement(By.linkText("text")) method to locate a link element by its visible text.

    7. Partial Link Text: Use the findElement(By.partialLinkText("partial-text")) method to locate a link element by its partial visible text.

    Here's an example code snippet in Java that demonstrates how to locate web elements using different locators:

    java
    import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class LocatorExample { public static void main(String[] args) { // Create an instance of the ChromeDriver WebDriver driver = new ChromeDriver(); // Navigate to Google driver.navigate().to("https://www.google.com"); // Locate the search field using ID WebElement searchField = driver.findElement(By.id("lst-ib")); // Enter text into the search field searchField.sendKeys("Selenium WebDriver commands"); // Locate the search button using name WebElement searchButton = driver.findElement(By.name("btnK")); // Click the search button searchButton.click(); // Locate the first search result using CSS Selector WebElement firstResult = driver.findElement(By.cssSelector("#rso div:nth-child(1) h3 a")); // Click the first search result firstResult.click(); // Close the browser window driver.quit(); } }

    In summary, using the appropriate locator is critical for finding web elements accurately and efficiently, and it is an essential skill to master for effective web automation testing using Selenium WebDriver.

  • Advantages and disadvantages of each type of locator

  • Each type of locator has its own advantages and disadvantages. Here's a brief summary:

    1. ID:
    • Advantages: ID is the most efficient way to locate an element because it is unique for each element on a web page. Using ID locator is faster than other locators.
    • Disadvantages: Sometimes, an element on a web page may not have a unique ID or the ID may change dynamically, which can make it difficult to locate the element.
    1. Name:
    • Advantages: Name locators are easy to use and can be used to identify form fields on a web page.
    • Disadvantages: Like ID locators, name locators may not be unique or may change dynamically, which can make it difficult to locate the element.
    1. Class Name:
    • Advantages: Class name locators can be used to identify multiple elements that share the same class.
    • Disadvantages: Class names can be shared by multiple elements on a web page, and using this locator can lead to selecting the wrong element if the class name is not unique.
    1. CSS Selector:
    • Advantages: CSS selector locators are powerful and flexible, allowing you to locate elements using a wide range of attributes and selectors.
    • Disadvantages: CSS selector locators can be complex and difficult to read, especially for complex web pages.
    1. XPath:
    • Advantages: XPath locators are powerful and can be used to locate elements using a wide range of attributes and selectors. They can also be used to locate elements based on their HTML structure, making them useful for complex web pages.
    • Disadvantages: XPath locators can be slow, especially for large web pages, and they can be difficult to read and maintain.
    1. Link Text and Partial Link Text:
    • Advantages: Link text locators can be used to locate links based on their visible text, which can be useful for navigating web pages. Partial link text locators allow you to locate links based on partial text.
    • Disadvantages: Link text locators may not be unique or may change dynamically, which can make it difficult to locate the correct link.

    In summary, there is no one-size-fits-all solution for choosing the right locator type. It is important to understand the strengths and weaknesses of each locator type to choose the right one for a given scenario. In general, using the most efficient locator type that uniquely identifies an element is the best practice to follow.

  • Best practices for selecting locators

  • Selecting the right locator is an essential step in creating robust and maintainable automated tests. Here are some best practices for selecting locators:

    1. Use unique locators: Always choose a locator that uniquely identifies the element. This ensures that the correct element is selected, and reduces the risk of false positives or negatives.

    2. Avoid using dynamic locators: Avoid using locators that may change dynamically, such as IDs or names. Instead, use locators that are less likely to change, such as CSS selectors or XPath.

    3. Choose the simplest locator: Use the simplest locator possible to identify the element. This improves test stability and makes the tests more maintainable.

    4. Prefer CSS selectors or XPath: CSS selectors and XPath are more flexible than other locator types and allow you to select elements based on their attributes, text, or position in the HTML hierarchy.

    5. Use relative locators: Use relative locators, such as parent or child elements, to create more robust and maintainable tests. This ensures that tests continue to work even if the layout or structure of the web page changes.

    6. Test locators before using them: Before using a locator in a test, test it to ensure that it is reliable and stable. Use a browser developer tool to check whether the locator is unique and stable.

    In summary, selecting the right locator is crucial for creating robust and maintainable automated tests. By following these best practices, you can ensure that your tests are stable and reliable.

III. WebElement Commands in Selenium WebDriver

  • Understanding WebElement and its commands

  • WebElement is a class in Selenium WebDriver that represents an HTML element on a web page. It provides various methods to interact with the element, such as clicking, typing text, getting text, and many others. Here are some of the commonly used methods of WebElement:

    1. click(): This method clicks the element.

    2. sendKeys(): This method types text into the element.

    3. getText(): This method retrieves the visible text of the element.

    4. getAttribute(): This method retrieves the value of the specified attribute of the element.

    5. isDisplayed(): This method returns true if the element is visible on the web page.

    6. isEnabled(): This method returns true if the element is enabled for interaction.

    7. isSelected(): This method returns true if the element is currently selected, such as a checkbox or radio button.

    To use WebElement in Selenium WebDriver, you need to first locate the element using one of the locator methods, such as findElement() or findElements(). Once you have located the element, you can use the methods of WebElement to interact with it.

    Here's an example of using WebElement:

    java
    // Find the search box element WebElement searchBox = driver.findElement(By.name("q")); // Type text into the search box searchBox.sendKeys("Selenium WebDriver"); // Click the search button element WebElement searchButton = driver.findElement(By.name("btnK")); searchButton.click();

    In this example, we first locate the search box element using its name attribute. We then use the sendKeys() method of WebElement to type text into the search box. Finally, we locate the search button element and use the click() method to click it.

    In summary, WebElement is a class in Selenium WebDriver that represents an HTML element on a web page. It provides various methods to interact with the element, such as clicking, typing text, getting text, and many others.

  • Clicking, sending keys, getting text, etc.

  • Selenium WebDriver provides various methods to interact with the web elements, such as clicking, sending keys, getting text, and more. Here's a brief overview of some commonly used commands for interacting with web elements:

    1. Clicking:

    The click() method of WebElement is used to simulate a click on an element. It is commonly used for buttons, links, checkboxes, and radio buttons.

    Example:

    less
    WebElement button = driver.findElement(By.id("button")); button.click();
    1. Sending keys:

    The sendKeys() method of WebElement is used to send text to an element. It is commonly used for input fields, such as textboxes and text areas.

    Example:

    python
    WebElement input = driver.findElement(By.id("input")); input.sendKeys("Selenium WebDriver");
    1. Getting text:

    The getText() method of WebElement is used to retrieve the visible text of an element. It is commonly used for headings, paragraphs, and other elements that contain visible text.

    Example:

    vbnet
    WebElement heading = driver.findElement(By.tagName("h1")); String text = heading.getText(); System.out.println(text);
    1. Clearing input fields:

    The clear() method of WebElement is used to clear the text from an input field.

    Example:

    python
    WebElement input = driver.findElement(By.id("input")); input.clear();
    1. Checking if an element is displayed:

    The isDisplayed() method of WebElement is used to check if an element is currently displayed on the web page.

    Example:

    less
    WebElement element = driver.findElement(By.id("element")); if(element.isDisplayed()) { // Do something }
    1. Selecting options from dropdowns:

    The Select class of Selenium WebDriver is used to select options from dropdown menus. It provides methods such as selectByVisibleText(), selectByIndex(), and selectByValue().

    Example:

    vbnet
    WebElement dropdown = driver.findElement(By.id("dropdown")); Select select = new Select(dropdown); select.selectByVisibleText("Option 1");

    In summary, Selenium WebDriver provides various commands for interacting with web elements, including clicking, sending keys, getting text, clearing input fields, checking if an element is displayed, and selecting options from dropdowns. These commands can be used to create automated tests for web applications.

  • Handling checkboxes, radio buttons, dropdowns, and alerts

  • Handling checkboxes, radio buttons, dropdowns, and alerts are common tasks when automating tests using Selenium WebDriver. Here are some of the commands that can be used to handle these types of elements:

    1. Handling Checkboxes:

    Checkboxes are often used to provide users with the option to select multiple choices. To select a checkbox using Selenium WebDriver, we can use the click() method of the WebElement class.

    Example:

    python
    WebElement checkbox = driver.findElement(By.id("checkbox")); checkbox.click();
    1. Handling Radio Buttons:

    Radio buttons are often used to provide users with a set of mutually exclusive options. To select a radio button using Selenium WebDriver, we can use the click() method of the WebElement class.

    Example:

    python
    WebElement radioButton = driver.findElement(By.id("radioButton")); radioButton.click();
    1. Handling Dropdowns:

    Dropdowns are often used to provide users with a list of options to choose from. To select an option from a dropdown using Selenium WebDriver, we can use the Select class.

    Example:

    vbnet
    WebElement dropdown = driver.findElement(By.id("dropdown")); Select select = new Select(dropdown); select.selectByVisibleText("Option 1");
    1. Handling Alerts:

    Alerts are often used to provide users with important information or to ask for confirmation before performing an action. To handle an alert using Selenium WebDriver, we can use the switchTo() method of the WebDriver class and then use the accept() or dismiss() method of the Alert class to accept or dismiss the alert.

    Example:

    scss
    Alert alert = driver.switchTo().alert(); alert.accept();

    In summary, handling checkboxes, radio buttons, dropdowns, and alerts are common tasks when automating tests using Selenium WebDriver. To handle these elements, we can use the click() method of the WebElement class for checkboxes and radio buttons, the Select class for dropdowns, and the switchTo() method of the WebDriver class and the accept() or dismiss() method of the Alert class for alerts. These commands can be used to create automated tests for web applications that include these types of elements.

IV. Navigation Commands in Selenium WebDriver

  • Navigating to different URLs

  • Navigating to different URLs is a common task when automating tests using Selenium WebDriver. Here are some of the commands that can be used to navigate to different URLs:

    1. Navigate to a URL:

    To navigate to a URL using Selenium WebDriver, we can use the get() method of the WebDriver class.

    Example:

    csharp
    driver.get("https://www.example.com");
    1. Navigate back:

    To navigate back to the previous page using Selenium WebDriver, we can use the navigate() method of the WebDriver class and then use the back() method of the Navigation class.

    Example:

    scss
    driver.navigate().back();
    1. Navigate forward:

    To navigate forward to the next page using Selenium WebDriver, we can use the navigate() method of the WebDriver class and then use the forward() method of the Navigation class.

    Example:

    scss
    driver.navigate().forward();
    1. Refresh the page:

    To refresh the current page using Selenium WebDriver, we can use the navigate() method of the WebDriver class and then use the refresh() method of the Navigation class.

    Example:

    scss
    driver.navigate().refresh();

    In summary, navigating to different URLs is a common task when automating tests using Selenium WebDriver. To navigate to a URL, we can use the get() method of the WebDriver class. To navigate back, forward, or refresh the page, we can use the navigate() method of the WebDriver class and then use the back(), forward(), or refresh() method of the Navigation class. These commands can be used to create automated tests for web applications that involve navigating to different pages.

  • Refreshing and navigating back and forward in history

  • Refreshing and navigating back and forward in history are common tasks when automating tests using Selenium WebDriver. Here are some of the commands that can be used to refresh and navigate back and forward in history:

    1. Refresh the page:

    To refresh the current page using Selenium WebDriver, we can use the navigate() method of the WebDriver class and then use the refresh() method of the Navigation class.

    Example:

    scss
    driver.navigate().refresh();
    1. Navigate back:

    To navigate back to the previous page using Selenium WebDriver, we can use the navigate() method of the WebDriver class and then use the back() method of the Navigation class.

    Example:

    scss
    driver.navigate().back();
    1. Navigate forward:

    To navigate forward to the next page using Selenium WebDriver, we can use the navigate() method of the WebDriver class and then use the forward() method of the Navigation class.

    Example:

    scss
    driver.navigate().forward();
    1. Navigate to a specific page in history:

    To navigate to a specific page in history using Selenium WebDriver, we can use the navigate() method of the WebDriver class and then use the to() method of the Navigation class and pass the URL of the page we want to navigate to.

    Example:

    scss
    driver.navigate().to("https://www.example.com");

    In summary, refreshing and navigating back and forward in history are common tasks when automating tests using Selenium WebDriver. To refresh the current page, we can use the navigate() method of the WebDriver class and then use the refresh() method of the Navigation class. To navigate back or forward in history, we can use the navigate() method of the WebDriver class and then use the back() or forward() method of the Navigation class. To navigate to a specific page in history, we can use the navigate() method of the WebDriver class and then use the to() method of the Navigation class and pass the URL of the page we want to navigate to. These commands can be used to create automated tests for web applications that involve navigating back and forth in history or refreshing the page.

  • Understanding window handles and switching between windows

  • Window handling is an important feature of Selenium WebDriver, especially when working with web applications that open multiple browser windows. Selenium WebDriver provides several commands to handle multiple browser windows. Here are some of the commands that can be used to understand window handles and switch between windows:

    1. Get the window handle:

    To get the window handle of the current window using Selenium WebDriver, we can use the getWindowHandle() method of the WebDriver class.

    Example:

    javascript
    String handle = driver.getWindowHandle();
    1. Get all the window handles:

    To get all the window handles of the open windows using Selenium WebDriver, we can use the getWindowHandles() method of the WebDriver class.

    Example:

    vbnet
    Set<String> handles = driver.getWindowHandles();
    1. Switch to a window by its handle:

    To switch to a window using its handle using Selenium WebDriver, we can use the switchTo() method of the WebDriver class and then use the window() method and pass the window handle as an argument.

    Example:

    scss
    driver.switchTo().window(handle);
    1. Switch to a window by its title:

    To switch to a window using its title using Selenium WebDriver, we can iterate through all the window handles using the getWindowHandles() method and then switch to the window whose title matches the desired title using the getTitle() method of the WebDriver class.

    Example:

    less
    for (String handle : driver.getWindowHandles()) { driver.switchTo().window(handle); if (driver.getTitle().equals("Desired Title")) { break; } }

    In summary, window handling is an important feature of Selenium WebDriver, especially when working with web applications that open multiple browser windows. To get the window handle of the current window, we can use the getWindowHandle() method of the WebDriver class. To get all the window handles of the open windows, we can use the getWindowHandles() method of the WebDriver class. To switch to a window using its handle or title, we can use the switchTo() method of the WebDriver class and then use the window() method and pass the window handle or iterate through all the window handles and switch to the window whose title matches the desired title. These commands can be used to create automated tests for web applications that involve handling multiple browser windows.

V. Waits in Selenium WebDriver

  • Types of waits (Implicit and Explicit)

  • In Selenium WebDriver, waits are used to synchronize the script execution with the browser. There are two types of waits in Selenium WebDriver: implicit waits and explicit waits.

    1. Implicit waits:

    Implicit waits are used to set a default waiting time (in seconds) for the WebDriver instance. Implicit waits are applied globally and wait for a specified amount of time before throwing a "NoSuchElementException" error. The implicit wait is set using the WebDriver's manage() method and the time can be set using the implicitlyWait() method.

    Example:

    scss
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

    In the above example, the implicit wait is set to 10 seconds.

    1. Explicit waits:

    Explicit waits are used to wait for a specific condition to occur before proceeding with the script execution. Explicit waits are applied only to specific elements and wait for a specified amount of time or until a certain condition is met. The explicit wait is set using the WebDriverWait class and can be used with ExpectedConditions.

    Example:

    scss
    WebDriverWait wait = new WebDriverWait(driver, 10); WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("example")));

    In the above example, we create a WebDriverWait instance with a timeout of 10 seconds. We then use the until() method with the ExpectedConditions class to wait until the element with the ID of "example" is clickable.

    In summary, implicit waits are used to set a default waiting time for the WebDriver instance and wait for a specified amount of time before throwing a "NoSuchElementException" error. Explicit waits are used to wait for a specific condition to occur before proceeding with the script execution and can be used with ExpectedConditions. Understanding and using waits in Selenium WebDriver can help ensure that your automated tests run smoothly and accurately.

  • Differences between Implicit and Explicit waits

  • Implicit and explicit waits are two types of waits in Selenium WebDriver used to synchronize the script execution with the browser. Both types of waits have different functionalities and are used for different purposes. Here are the differences between implicit and explicit waits:

    1. Functionality:

    Implicit wait: Implicit wait is used to set a default waiting time for the WebDriver instance. It is applied globally and wait for a specified amount of time before throwing a "NoSuchElementException" error.

    Explicit wait: Explicit wait is used to wait for a specific condition to occur before proceeding with the script execution. It is applied only to specific elements and waits for a specified amount of time or until a certain condition is met.

    1. Scope:

    Implicit wait: Implicit wait is applied globally to the entire WebDriver instance.

    Explicit wait: Explicit wait is applied to specific elements or conditions, making it more granular and precise.

    1. Condition:

    Implicit wait: Implicit wait waits for a specified amount of time before throwing a "NoSuchElementException" error.

    Explicit wait: Explicit wait waits for a specific condition to be met, such as an element becoming clickable or visible.

    1. Time:

    Implicit wait: The waiting time is set globally and is applicable to all elements. It is also set before any interaction with the elements.

    Explicit wait: The waiting time is set only for a specific element and is set after interacting with the element.

    In summary, implicit wait is a default waiting time set globally before interacting with any element, while explicit wait is a precise waiting time set for a specific element after interacting with it. Explicit wait waits for a specific condition to be met, while implicit wait waits for a specified amount of time before throwing a "NoSuchElementException" error.

  • Best practices for using waits in Selenium WebDriver

  • Using waits in Selenium WebDriver is an essential part of creating reliable and stable automated tests. Here are some best practices for using waits in Selenium WebDriver:

    1. Use explicit waits when possible:

    Explicit waits should be used whenever possible as they provide more precise control over the waiting behavior. Implicit waits are useful for global waiting time, but explicit waits allow you to wait for specific elements or conditions to occur.

    1. Avoid hardcoding wait times:

    Hardcoding wait times is not a good practice as it can make your tests unstable and slow. Instead, use dynamic wait times that adjust to the actual response time of the web application. You can use tools like the Page Load Time (PLT) API to measure the actual response time of the application and adjust the waiting time accordingly.

    1. Use ExpectedConditions for explicit waits:

    ExpectedConditions are a set of conditions that can be used with explicit waits to wait for a specific condition to occur. Using ExpectedConditions can help make your code more readable and maintainable.

    1. Use fluent waits for dynamic waits:

    Fluent waits are a type of explicit wait that can be used to wait for an element or condition to appear, disappear, or become visible. Fluent waits can help make your tests more dynamic and adaptable to changes in the web application.

    1. Use the right combination of implicit and explicit waits:

    The right combination of implicit and explicit waits can help make your tests more stable and reliable. Implicit waits are useful for global waiting time, but explicit waits provide more precise control over the waiting behavior.

    In summary, using waits in Selenium WebDriver is essential for creating stable and reliable automated tests. Using explicit waits, avoiding hardcoding wait times, using ExpectedConditions, using fluent waits, and using the right combination of implicit and explicit waits are all best practices that can help make your tests more stable and reliable.

VI. Testing Frameworks in Selenium WebDriver

  • Testing frameworks are an essential part of Selenium WebDriver as they provide a structure and set of guidelines for organizing and executing automated tests. Here are some of the most popular testing frameworks in Selenium WebDriver:

    1. TestNG:

    TestNG is one of the most popular testing frameworks in Selenium WebDriver. It is a powerful and flexible testing framework that supports annotations, parameterization, parallel execution, and HTML reporting. TestNG provides features such as grouping, sequencing, and dependency management, which makes it easy to manage and run automated tests.

    1. JUnit:

    JUnit is another popular testing framework in Selenium WebDriver that is primarily used for unit testing in Java. It provides a simple and straightforward testing framework for organizing and executing unit tests. JUnit supports annotations, assertions, parameterization, and test fixtures.

    1. Cucumber:

    Cucumber is a popular testing framework that supports Behavior Driven Development (BDD). It provides a simple and readable syntax for defining test scenarios and supports features such as data tables, hooks, and tags. Cucumber integrates well with Selenium WebDriver and provides a powerful and flexible testing framework for automated tests.

    1. Robot Framework:

    Robot Framework is an open-source testing framework that provides a simple and readable syntax for creating automated tests. It supports keyword-driven testing, data-driven testing, and behavior-driven testing. Robot Framework provides features such as test libraries, test templates, and HTML reporting.

    1. NUnit:

    NUnit is a popular testing framework for .NET languages such as C# and VB.NET. It provides a simple and straightforward testing framework for organizing and executing automated tests. NUnit supports annotations, assertions, parameterization, and test fixtures.

    In summary, testing frameworks are an essential part of Selenium WebDriver as they provide a structure and set of guidelines for organizing and executing automated tests. TestNG, JUnit, Cucumber, Robot Framework, and NUnit are some of the most popular testing frameworks in Selenium WebDriver, and the choice of framework depends on the specific requirements of the project.

  • Overview of TestNG and JUnit frameworks

TestNG and JUnit are two popular testing frameworks for Java that are widely used in automated software testing. Here is an overview of each framework:

  1. TestNG:

TestNG is an open-source testing framework that is designed to cover all categories of tests, including unit, functional, end-to-end, integration, and acceptance tests. It supports annotations, data-driven testing, parameterization, parallel execution, and HTML reporting. TestNG provides features such as grouping, sequencing, and dependency management, which makes it easy to manage test suites and test cases.

  1. JUnit:

JUnit is an open-source testing framework that is primarily used for unit testing in Java. It supports annotations, assertions, parameterization, and test fixtures. JUnit provides features such as test runners, test suites, and test fixtures, which makes it easy to manage and run unit tests.

Both TestNG and JUnit are widely used in automated software testing and have their advantages and disadvantages. TestNG is more versatile and can be used for all types of tests, while JUnit is more focused on unit testing. TestNG provides more advanced features such as grouping, sequencing, and dependency management, while JUnit provides a simpler and more straightforward testing framework for unit testing.

In summary, TestNG and JUnit are two popular testing frameworks for Java that are widely used in automated software testing. They both have their advantages and disadvantages, and the choice of framework depends on the specific requirements of the project.

Setting up TestNG or JUnit with Selenium WebDriver

  • To set up TestNG or JUnit with Selenium WebDriver, you need to follow these steps:

    1. Add TestNG or JUnit dependencies to your project: To use TestNG or JUnit, you need to add their respective dependencies to your project. You can do this by adding the following Maven dependencies to your pom.xml file:

    For TestNG:

    php
    <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.5.0</version> </dependency>

    For JUnit:

    php
    <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> </dependency>
    1. Set up the WebDriver: To use Selenium WebDriver with TestNG or JUnit, you need to create a WebDriver instance and initialize it with the appropriate browser driver. Here's an example of how to create a WebDriver instance for Chrome:
    typescript
    import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class MyTest { WebDriver driver; @BeforeMethod public void setUp() { System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); driver = new ChromeDriver(); } @AfterMethod public void tearDown() { driver.quit(); } }

    In this example, the @BeforeMethod and @AfterMethod annotations are used to set up and tear down the WebDriver before and after each test.

    1. Write your tests: Once you have set up the WebDriver, you can start writing your tests using the TestNG or JUnit annotations. Here's an example of a TestNG test that uses the WebDriver to open a website:
    typescript
    import org.openqa.selenium.By; import org.testng.annotations.Test; public class MyTest { WebDriver driver; @BeforeMethod public void setUp() { System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); driver = new ChromeDriver(); } @AfterMethod public void tearDown() { driver.quit(); } @Test public void testMethod() { driver.get("https://www.example.com"); driver.findElement(By.id("search")).sendKeys("TestNG"); driver.findElement(By.name("submit")).click(); } }

    In this example, the WebDriver is used to open a website, find an element by ID and name, and interact with the elements.

    1. Run your tests: To run your tests, you can use the TestNG or JUnit test runner. You can run the tests from the command line or from an IDE. Here's an example of how to run a TestNG test from the command line:
    bash
    mvn test

    This command will run all the tests in your project.

    In conclusion, to set up TestNG or JUnit with Selenium WebDriver, you need to add the dependencies to your project, set up the WebDriver, write your tests using the TestNG or JUnit annotations, and run your tests using the TestNG or JUnit test runner.

  • Writing and running basic tests with TestNG or JUnit

  • TestNG and JUnit are both popular testing frameworks in Selenium WebDriver that provide a structure and set of guidelines for organizing and executing automated tests. Here's an overview of how to write and run basic tests with TestNG or JUnit:

    1. Writing Tests:

    In TestNG and JUnit, tests are defined as methods annotated with @Test. The following code snippet shows an example of a TestNG test:

    typescript
    import org.testng.annotations.Test; public class MyTestNGTest { @Test public void testMethod() { // Test code goes here } }

    And here's an example of a JUnit test:

    typescript
    import org.junit.Test; public class MyJUnitTest { @Test public void testMethod() { // Test code goes here } }
    1. Running Tests:

    To run tests with TestNG or JUnit, you need to create a test suite and add the tests to it. In TestNG, you can define a test suite using an XML file, as follows:

    php
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="My Test Suite"> <test name="My Test"> <classes> <class name="MyTestNGTest"/> </classes> </test> </suite>

    In JUnit, you can run tests using the JUnit Runner, as follows:

    typescript
    import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class MyJUnitTestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MyJUnitTest.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } } }
    1. Asserting Results:

    To verify that the test results are correct, TestNG and JUnit provide assertion methods such as assertEquals, assertTrue, and assertFalse. Here's an example of an assertion in TestNG:

    java
    import org.testng.Assert; import org.testng.annotations.Test; public class MyTestNGTest { @Test public void testMethod() { int result = 2 + 2; Assert.assertEquals(result, 4); } }

    And here's an example of an assertion in JUnit:

    java
    import org.junit.Assert; import org.junit.Test; public class MyJUnitTest { @Test public void testMethod() { int result = 2 + 2; Assert.assertEquals(result, 4); } }

    In conclusion, TestNG and JUnit are popular testing frameworks in Selenium WebDriver that provide a structure and set of guidelines for organizing and executing automated tests. To write and run basic tests with TestNG or JUnit, you need to define the tests as methods annotated with @Test, create a test suite, and add the tests to it. Finally, you need to assert the results using assertion methods such as assertEquals, assertTrue, and assertFalse.

Conclusion:

In conclusion, learning Selenium WebDriver commands is essential for anyone interested in automating web testing. With the increasing demand for automated testing, having knowledge of Selenium WebDriver can give you an edge in the job market. It is a powerful tool that offers a wide range of functionalities for testing web applications. By understanding the basic structure of Selenium WebDriver, different types of locators, WebElement commands, and waits, you can create robust and effective automated tests. Additionally, by integrating with testing frameworks such as TestNG or JUnit, you can organize and manage your tests with ease. With the help of this beginner's guide, you can start your journey in Selenium WebDriver and explore its vast potential for automated web testing.

  • Recap of important points

  • Here is a recap of the important points covered in this beginner's guide to Selenium WebDriver commands:

    1. Selenium WebDriver is a powerful tool for automating web testing.
    2. It is essential to install Selenium WebDriver and its drivers before using it.
    3. Different types of locators include ID, Name, Class Name, CSS Selector, and XPath, each with its advantages and disadvantages.
    4. Best practices for selecting locators include using unique attributes and avoiding dynamically generated values.
    5. WebElement commands include clicking, sending keys, getting text, and handling checkboxes, radio buttons, dropdowns, and alerts.
    6. Navigation commands include navigating to different URLs, refreshing, and navigating back and forward in history.
    7. Window handling commands include understanding window handles and switching between windows.
    8. There are two types of waits: Implicit and Explicit, and best practices for using waits include using Explicit waits and avoiding long waits.
    9. TestNG and JUnit are popular testing frameworks for Selenium WebDriver.
    10. Writing and running basic tests with TestNG or JUnit involves setting up the testing framework, creating test classes and test methods, and running the tests.

    By understanding these important points, you can start using Selenium WebDriver to create robust and effective automated tests for web applications.

  • Encourage further learning and practice with Selenium WebDriver.

  • Learning Selenium WebDriver commands is a valuable skill that can enhance your career prospects in the software testing field. To further develop your skills and knowledge, here are some resources and tips for practicing with Selenium WebDriver:

    1. Practice on real websites: Start practicing by automating tests on real websites. Choose websites with varying complexities and functionalities to improve your skills.

    2. Use online resources: Online resources such as tutorials, blogs, and forums provide useful information and help in solving problems. Some popular websites for Selenium WebDriver include the Selenium official website, Stack Overflow, and Guru99.

    3. Join online communities: Join online communities like LinkedIn groups, forums, and discussion boards where you can interact with like-minded people, share your knowledge, and get feedback on your work.

    4. Attend training and certification programs: Attend training and certification programs to acquire advanced skills and knowledge in Selenium WebDriver. Many online and in-person training programs are available for different levels of expertise.

    5. Experiment with different test scenarios: Try different test scenarios, test cases, and test data to get a better understanding of Selenium WebDriver and its capabilities.

    Remember, practice makes perfect, and the more you practice with Selenium WebDriver, the better you will become at creating effective automated tests. So, keep learning, keep practicing, and keep exploring the vast potential of Selenium WebDriver!

COMMENTS

Name

# website marketing×# content marketing×# digital marketing×# blogging,1,1 Targeted Solo Ad Traffic,1,10 Sustainable Ways to Make a Positive Impact on the Environment,1,7 Figure Cycle,1,7 Figure cycle e commerce selling systems,1,7 Figure Cycle eCommerce Training systems,1,7 Figure cycle systems,1,7figurecycle,1,7figurecycle best ecommerce training,1,A Comprehensive Guide to Cloud Computing,1,abc's in cursive,1,About Ceridian,1,About Dropshipping automation,1,About Einstein discovery tableau,1,About Gusto,1,ADP,1,Adult Coloring Book,1,Adult Coloring Book For Stress And Anxiety Relief Activity,1,advertising automation,1,AI Business Process Automation,1,AI Payroll: Statistics,1,Ai Productivity Accelerator Reviews,1,Alibaba Dropshipping: Is It Worth the Effort and How to Succeed?,1,Amazon automated drop shipping,1,An In-Depth Guide to the Taobao Homepage: Features and Functionality (淘宝网首页功能和特点详解),1,An Introduction to Taobao 淘寶: The Online Shopping Giant of China,1,and Best Practices,1,and FAQs,1,and how can I leverage them to improve my CRM strategy?,1,and Impact,1,application development outsourcing,1,apps outsourcing services questions and answers,1,Asana or Trello?,1,Automate your dropshipping business,1,automated drop shipping,1,automated drop shipping business,1,automated drop shipping shopify,1,automated drop shipping software,1,automated drop shipping website,1,Automated dropshipping,1,Automated dropshipping popular software,1,Automated dropshipping software,1,automated ebay dropshipping,1,Automated order fulfillment for dropshipping,1,automation,1,Automation Software,1,Autoresponder,1,best crm for small business,1,best crm software,1,Best Indented Handwriting books,1,best Lead Technology Tools,1,Best practices for implementing a social CRM strategy,1,Best Practices For Lead Tracking Management,1,Binance Cloud Mining,1,Binance Cloud Mining reviews,1,Business Model,1,Challenges,1,Clicky homes Real estate Agents Marketing Platform,1,clickyhome agency,1,clickyhomes,1,clickyhomes platform,2,Clickyhomes real estate agent platform,1,Cloud computing Business Data security Cost Flexibility Scalability Advantages Disadvantages Examples Reputable providers.,1,cms,1,cms website,1,CMS-Dependent Website,1,content management system WEBSITES,1,content management systems,1,content manager,1,CRM,3,crm & marketing automation,1,CRM Applications,1,CRM Benefits,1,CRM business,1,CRM Companies,1,CRM Database,1,CRM Email Automation,1,CRM for Advertising,1,CRM For Dummies,1,crm for pc,1,crm for real estate agents,1,crm is,1,CRM Marketing Strategy,1,CRM method,1,crm monday,4,CRM Platforms,1,CRM program,3,CRM program for small business,1,crm questions and answers,1,CRM service,1,CRM service provider,1,crm software,2,CRM Software,1,crm software monday,4,crm strategy,1,crm system Monday reviews,1,CRM Systems,2,CRM Techniques,1,crm tools,1,CRMS,1,CRMS Benefits,1,Cursive "a",1,Cursive "c",1,Cursive "e",1,Cursive "k",1,Cursive "m",1,Cursive "n",1,Cursive "y",1,cursive in russian,1,Customer Care In drop shipping,1,customer relationship,1,customer relationship management,2,Customer relationship management,2,Customer relationship management Computer software,1,Digital Advertising,1,Digital Marketing automation,1,digital marketing automation gartner,1,digital marketing automation software,1,digital marketing automation tools,1,Direct email Marketing,1,Direct mail Providers,1,drop ship from Amazon to my Shopify,1,drop shippers,1,drop shipping,1,drop shipping automation,1,Drop shipping automation tips,1,drop shipping urban news,1,dropship automation solution,1,Dropshipping automation platforms,1,Dropshipping automation tools,1,e-commerce,1,Effective Drop shipping,1,einstein discovery in tableau,1,Einstein discovery tableau,2,Email Automation,1,Email campaign,1,Email Marketing,1,Email marketing system,1,Exploring the Homepage of Taobao (淘宝网首页),1,Fiction And drop shipping,1,From E-Commerce Giant to Global Conglomerate: A Comprehensive Look at Alibaba's History,1,Generate Leads Application,1,Get Traffic To My Website,1,Getting Creative With Your Content Management System,1,Global Dropshipping Agent: Your Bridge to Worldwide E-commerce Success,1,gusto payroll pricing,1,handbags dropshipping,1,How CRM Helps Businesses Improve Customer Relationships,1,How do emerging technologies like AI and machine learning impact the CRM industry,1,how to be a Top CRM Consultants,1,How to Calculate Payroll Taxes: A Step-by-Step Guide,1,How to Create a Site audit with Python?,1,How to Ensure Compliance with Payroll Laws and Regulations,1,How to Schedule Social Media,1,How to Set up an Efficient Payroll Process for Your Small Business,1,Improving customer retention,1,Improving customer satisfaction,1,indented cursive,1,Indented Handwriting Practice for Kids,2,Indented Handwriting Practice for Kids with Animals,3,Indented Tracing Books for Kids ages 3-5,2,Indicators On amazon automated drop shipping,1,Is Monday,1,Lead Gen and Management Software,1,Lead Generation,2,lead generation automation,1,Lead generation automation,1,Lead Generation Emails,1,Lead Generation Software,2,Lead management tool,1,Lead Software,1,lead tracking,1,Lead Tracking Management,1,list of common types of business workflow diagrams,1,Long Distance Relationship,1,Low-cost Advertising,1,Management Software,1,marketing asset management,1,Marketing automation,1,Marketing Automation,1,marketing Automation Consulting,1,Marketing automation definition,1,Marketing Automation For Lead Generation,1,Marketing automation platforms,1,Marketing Automation platforms,1,marketing Automation Software,1,Marketing courses,1,Measuring Content Performance,1,Mobile Marketing automation,1,mobile marketing automation companies,1,mobile marketing automation platform,1,mobile marketing automation software,1,monday com marketing,1,monday crm real estate,1,monday crm review,1,monday crm system,1,Monday sales CRM price,1,Monday.com desktop app,1,Monday.com Charts and graphs,1,Monday.com Customer data management,1,Monday.com Demo,1,Monday.com desktop app mac,1,Monday.com download for windows 10,1,Monday.com Email platforms,1,Monday.com Files,1,Monday.com Gantt charts,1,Monday.com Integration,1,Monday.com Knowledge Base,1,Monday.com Payment processing platforms,1,Monday.com Project management tools,1,Monday.com Real-time dashboards,1,Monday.com reporting system,1,Monday.com Stories,1,Monday.com Training,1,Monday.com Video tutorials,1,monday.com vs asana vs trello,1,Monday.com Webinars,1,Monday.com Workforms,1,mondays crm,4,mondays project management,4,mondays software,4,mugs and pillows,1,Neat cursive handwriting,1,Neat handwriting,1,neat handwriting practice for kids,1,online lead generation,1,online payroll services,2,Open Rates or Click-Throughs,1,opencart automatic dropshipping,1,Partnerstack The Best Affiliate Programs,1,Patricks Proven Solo Ads,1,Paychex,1,payroll,1,payroll cost,1,Payroll Implementation Consultant Salary,1,Payroll management for small businesses,1,Payroll Outsourcers,1,Payroll Outsourcing,1,Payroll Outsourcing Companies,1,Payroll service for small businesses,1,Payroll Services,2,Payroll Services - paychecks Payroll,1,Pet supplies,1,power automate cloud flow,1,project management software,4,project management software monday,4,project management tool monday,4,Project Management Tools Monday,1,quickbooks payroll cost,1,real estate,1,Real estate agents,1,real estate agents in the us,1,real estate agents near me,1,real estate agents pdf,1,Real estate crm,1,Real estate crm software,1,Real Estate Lead generation,1,Real estate marketing automation,2,real relationship,1,Relationship Advice,1,relationship management Computer software,1,relationship manager,1,relationship marketing,1,Relationships,1,Reputable Suppliers,1,Running capital letters,1,Running descriptive writing,1,Running writing,1,Safeguard Payroll,1,sales and marketing automation,1,sales and marketing manager job description,1,sales automation in crm,1,sales marketing job description,1,Sales Representative job description,1,Sales Representative skills,1,Schedule Social Media,1,Secure CMS,1,Secure Your Home with Smart Locks,1,Securing the Future: The Role of AI in Cybersecurity,1,Selenium Grid: Scaling Your Test Automation Infrastructure,1,Seller Bot,1,shopper’s,1,Should I use Monday.com,1,slippers,1,Smarketly,1,smarketly features,1,Smarketly Marketing Automation Platform,1,Smarketly marketing automation systems,1,Smarketly sales marketing automation,1,smarketly the best Email marketing automation software,1,Smart doorbell,1,Smart home security,1,Smart lock,1,social marketing automation,1,Social Media Automation,1,Solo Ads,1,subscribers,1,tableau einstein discovery,2,tableau einstein discovery extension,2,Taobao vs AliExpress: Comparing Two Giants of Chinese E-commerce,1,The 7 Figure Cycle,1,The Basic Principles Of Dropshipping,1,The Best Smart Home Security Devices of 2023,1,The Importance of Accurate Payroll Record-Keeping,1,the importance of choosing the right products for dropshipping success,1,The Importance of OpenAI: Advancing AI Research and Development in a Safe and Responsible Manner,1,The Ultimate Guide to Cloud Computing: Benefits,1,These top trending items to dropship are shoes,1,Time Management Rules for Real Estate Agents,1,top 10 best online payroll services,1,top 10 online payroll services×# best online payroll services,1,top digital marketing automation tools,1,Top Smart Doorbells for Convenient Home Monitoring,1,Transforming Payroll Processing with AI: Latest Statistics,1,Trello or Asana better for crm?,1,trello vs asana vs monday vs clickup,1,Trello vs Asana vs Monday vs Clickup Choice,1,Trello vs Asana vs Monday vs Clickup Dashboards,1,Trello vs Asana vs Monday vs Clickup Prices Comparison,1,Trends,1,Unleashing the Power of the Best Email CRM: A Comprehensive Guide to Boosting Your Marketing Success,1,Video Marketing Automation,1,Video Marketing Traffic Pro,1,Website cms,1,Website Cms,1,What are the questions asked in CRM interview?,1,What Do Wholesalers Mean?,1,what is crm software monday,1,what is crm stock,1,what is crm?,1,What is eCRM?,1,What Is The Benefits of Outsourcing Payroll for Small Businesses and How to Use It?,1,what is the crm walking dead,1,wholesale,1,wholesale prices Drop Shippers,1,Wholesalers,1,Writing Lead Generation Emails,1,YT Evolution is a Wordpress plugin,1,zendesk reviews,1,علي بابا,1,淘宝网首页,1,淘宝网首页官网,1,阿里巴巴,1,
ltr
item
Automation, your comprehensive guide to the world of business and technology: A Beginner's Guide to Selenium WebDriver Commands
A Beginner's Guide to Selenium WebDriver Commands
A Beginner's Guide to Selenium WebDriver CommandsLearning Selenium WebDriver commands is a valuable skill that can enhance your career prospects in th
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEL_k6WiWCDp3uwaQ-BgQwbRHSDHmtnPJYtvgC5bjYxUGyOnRj0efZAe5r0yU7S_iLnkTIaM0zEtE8ovdv0KUFjseVulp8M5osKSqGGL6K6VY5nqIm0FnK8SrALZ0LeojQeAVTZ_mT6zEvau8r6gTaWIfijp77AS938_dF_Ta2LISMGnZ1AO1ViVoA/w640-h360/A%20Beginner's%20Guide%20to%20Selenium%20WebDriver%20Commands.jpg
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEL_k6WiWCDp3uwaQ-BgQwbRHSDHmtnPJYtvgC5bjYxUGyOnRj0efZAe5r0yU7S_iLnkTIaM0zEtE8ovdv0KUFjseVulp8M5osKSqGGL6K6VY5nqIm0FnK8SrALZ0LeojQeAVTZ_mT6zEvau8r6gTaWIfijp77AS938_dF_Ta2LISMGnZ1AO1ViVoA/s72-w640-c-h360/A%20Beginner's%20Guide%20to%20Selenium%20WebDriver%20Commands.jpg
Automation, your comprehensive guide to the world of business and technology
https://automationhometoolstesting.blogspot.com/2023/03/a-beginners-guide-to-selenium-webdriver.html
https://automationhometoolstesting.blogspot.com/
https://automationhometoolstesting.blogspot.com/
https://automationhometoolstesting.blogspot.com/2023/03/a-beginners-guide-to-selenium-webdriver.html
true
7883394317187835136
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content