--> Mastering Selenium WebDriver: Best Practices for Writing Effective Automated Tests | Automation, your comprehensive guide to the world of business and technology

Mastering Selenium WebDriver: Best Practices for Writing Effective Automated Tests

Mastering Selenium WebDriver: Best Practices for Writing Effective Automated Tests

Introduction
Mastering Selenium WebDriver: Best Practices for Writing Effective Automated Tests

With the ever-increasing demand for software applications, organizations need to ensure that their applications are working as expected, free from defects, and meet customer requirements. Automated testing has emerged as a crucial aspect of software development, allowing organizations to deliver high-quality software at a faster pace. And when it comes to automated testing, Selenium WebDriver has become one of the most popular tools in the industry.

According to a survey conducted by TestCraft, Selenium is used by 37% of the companies surveyed for their automated testing needs. Furthermore, the demand for Selenium WebDriver professionals has increased by 17% in the past year, as reported by Indeed. These statistics highlight the importance of mastering Selenium WebDriver to stay ahead of the competition and excel in automated testing.

However, simply knowing Selenium WebDriver is not enough to write effective automated tests. It is essential to follow best practices to ensure that the tests are reliable, maintainable, and deliver accurate results. In this blog post, we will discuss the best practices for using Selenium WebDriver commands to help you master automated testing and ensure the quality of your software applications.

  • Briefly explain what Selenium WebDriver is and its importance in automated testing.

  • Selenium WebDriver is an open-source tool used for automated testing of web applications. It provides a framework for automating web browsers and allows developers to create test scripts in multiple programming languages such as Java, Python, and C#. Selenium WebDriver has become one of the most popular tools in the industry due to its ease of use, cross-browser compatibility, and flexibility.

    Automated testing with Selenium WebDriver has become an essential part of software development, as it enables organizations to deliver high-quality software at a faster pace. It helps to catch defects early in the development cycle, thereby reducing the cost of fixing defects and improving the overall quality of the application. Furthermore, it allows developers to run the same tests repeatedly, ensuring consistency and reducing the risk of human error. Overall, mastering Selenium WebDriver is crucial for organizations and developers who want to stay ahead of the competition and deliver reliable and high-quality software applications.

  • Mention the main objective of the blog post, which is to provide best practices for using Selenium WebDriver commands.

  • The main objective of this blog post is to provide readers with best practices for using Selenium WebDriver commands. The blog will cover essential topics such as the basic syntax of Selenium WebDriver commands, identifying web elements, writing clear and reusable code, handling synchronization issues, debugging, maintaining WebDriver commands, and much more. By the end of the blog, readers will have a better understanding of how to use Selenium WebDriver commands effectively and efficiently to write reliable and accurate automated tests.

Section 1: Getting Started with Selenium WebDriver Commands

Selenium WebDriver is an open-source tool used for automating web browsers. It provides a framework for writing test scripts in multiple programming languages such as Java, Python, and C#. The test scripts interact with web elements such as text boxes, buttons, and links, to test the functionality of web applications.

In this section, we will discuss the basics of Selenium WebDriver commands, identifying web elements, and interacting with them.

Basic Syntax of Selenium WebDriver Commands: The basic syntax of Selenium WebDriver commands consists of the following steps:

  1. Create an instance of the WebDriver interface.
  2. Use the get() method to open a web page.
  3. Locate the web element using a locator strategy.
  4. Interact with the web element using appropriate methods such as click(), sendKeys(), getText(), etc.

Identifying Web Elements: To interact with web elements, you need to identify them first. Selenium WebDriver provides various locators to identify web elements, such as:

  1. ID: This is the most reliable locator strategy as the ID of a web element is unique within the web page.
  2. Name: This locator strategy is used to identify web elements with a specific name attribute.
  3. Class Name: This locator strategy is used to identify web elements with a specific class attribute.
  4. Tag Name: This locator strategy is used to identify web elements with a specific tag name such as "input", "div", "a", etc.
  5. Link Text: This locator strategy is used to identify web links with the exact text as specified.
  6. Partial Link Text: This locator strategy is used to identify web links with partial text as specified.

Interacting with Web Elements: After identifying the web element, you can interact with it using appropriate methods such as:

  1. click(): This method is used to click on a web element such as a button, link, or checkbox.
  2. sendKeys(): This method is used to enter text into a text box or other input fields.
  3. clear(): This method is used to clear the contents of a text box or input field.
  4. getText(): This method is used to retrieve the text value of a web element such as a label, button, or link.
  5. isSelected(): This method is used to check if a checkbox or radio button is selected.
  6. isEnabled(): This method is used to check if a web element is enabled or disabled.

Conclusion: In this section, we discussed the basics of Selenium WebDriver commands, how to identify web elements using locators, and how to interact with them using appropriate methods. Understanding these basics is essential for writing effective test scripts in Selenium WebDriver. In the next section, we will discuss the best practices for writing Selenium WebDriver commands to make them reliable, maintainable, and efficient.

  • Explain the basic syntax of Selenium WebDriver commands.

  • The basic syntax of Selenium WebDriver commands consists of the following steps:

    1. Create an instance of the WebDriver interface: To start using Selenium WebDriver, you need to create an instance of the WebDriver interface. The WebDriver interface is implemented by various browser-specific drivers such as ChromeDriver, FirefoxDriver, and SafariDriver. You need to download the respective browser driver executable and set the system property to the location of the driver executable.

    For example, to create an instance of ChromeDriver in Java, you can use the following code:

    java
    System.setProperty("webdriver.chrome.driver", "path/to/chromedriver.exe"); WebDriver driver = new ChromeDriver();
    1. Use the get() method to open a web page: After creating an instance of WebDriver, you can use the get() method to open a web page. The get() method takes a URL string as a parameter and loads the web page in the browser window.

    For example, to open Google.com in the Chrome browser, you can use the following code:

    csharp
    driver.get("https://www.google.com");
    1. Locate the web element using a locator strategy: To interact with web elements such as buttons, text boxes, and links, you need to locate them first. Selenium WebDriver provides various locator strategies such as ID, Name, Class Name, Tag Name, Link Text, and Partial Link Text to locate web elements.

    For example, to locate the search box on Google.com using the Name locator, you can use the following code:

    java
    WebElement searchBox = driver.findElement(By.name("q"));
    1. Interact with the web element using appropriate methods: After locating the web element, you can interact with it using appropriate methods such as click(), sendKeys(), clear(), getText(), isSelected(), and isEnabled().

    For example, to enter text into the search box on Google.com, you can use the following code:

    python
    searchBox.sendKeys("Selenium WebDriver");

    Conclusion: The basic syntax of Selenium WebDriver commands consists of creating an instance of the WebDriver interface, using the get() method to open a web page, locating web elements using a locator strategy, and interacting with them using appropriate methods. It is essential to understand the basic syntax of Selenium WebDriver commands before writing test scripts. In the next section, we will discuss the best practices for writing effective and maintainable Selenium WebDriver commands.

  • Discuss the importance of identifying web elements and how to do it using different
  • locators such as ID, Name, Class Name, Tag Name, Link Text, and Partial Link Text.

  • Identifying web elements is a crucial part of writing effective and maintainable Selenium WebDriver scripts. It involves finding the unique identifiers that define a web element on a web page so that the test script can interact with it.

    Selenium WebDriver provides various locator strategies to identify web elements, including ID, Name, Class Name, Tag Name, Link Text, and Partial Link Text. Each of these locator strategies has its strengths and weaknesses, and it is important to choose the right one based on the context and requirements of the test scenario.

    1. ID Locator: The ID locator is the most reliable and efficient way of locating web elements. It uses the ID attribute of the HTML tag to identify the web element. The ID attribute is unique to each web element on a web page.

    Example:

    python
    WebElement element = driver.findElement(By.id("element_id"));
    1. Name Locator: The Name locator uses the Name attribute of the HTML tag to identify the web element. The Name attribute may not be unique to a web element, so this locator may return multiple elements.

    Example:

    java
    WebElement element = driver.findElement(By.name("element_name"));
    1. Class Name Locator: The Class Name locator uses the Class attribute of the HTML tag to identify the web element. The Class attribute can be used to identify a group of web elements that share a common class value.

    Example:

    java
    WebElement element = driver.findElement(By.className("element_class"));
    1. Tag Name Locator: The Tag Name locator uses the HTML tag name to identify the web element. This locator can be used to identify all the web elements of a specific tag name.

    Example:

    java
    WebElement element = driver.findElement(By.tagName("input"));
    1. Link Text Locator: The Link Text locator is used to identify links on a web page. It uses the text value of the link to locate the web element.

    Example:

    java
    WebElement element = driver.findElement(By.linkText("Learn More"));
    1. Partial Link Text Locator: The Partial Link Text locator is similar to the Link Text locator but uses a partial text value to locate the web element.

    Example:

    java
    WebElement element = driver.findElement(By.partialLinkText("Learn"));

    Conclusion: Identifying web elements using various locator strategies is essential for writing effective and maintainable Selenium WebDriver scripts. Each locator strategy has its strengths and weaknesses, and it is important to choose the right one based on the context and requirements of the test scenario. By mastering the art of identifying web elements, you can write robust and reliable test scripts that can withstand changes in the web application over time.

  • Explain how to interact with different web elements using WebDriver commands.

  • Interacting with web elements is the primary goal of using Selenium WebDriver commands in automated testing. WebDriver provides a set of methods to interact with different types of web elements such as buttons, text boxes, checkboxes, radio buttons, dropdowns, etc. Here are some examples of how to interact with different web elements using WebDriver commands:

    1. Text Boxes: To enter text into a text box, we can use the sendKeys() method.

    Example:

    python
    WebElement textBox = driver.findElement(By.id("textbox_id")); textBox.sendKeys("Hello World");
    1. Buttons: To click on a button, we can use the click() method.

    Example:

    less
    WebElement button = driver.findElement(By.id("button_id")); button.click();
    1. Checkboxes: To select or deselect a checkbox, we can use the click() method.

    Example:

    scss
    WebElement checkbox = driver.findElement(By.id("checkbox_id")); checkbox.click(); //to select checkbox.click(); //to deselect
    1. Radio Buttons: To select a radio button, we can use the click() method.

    Example:

    python
    WebElement radioButton = driver.findElement(By.id("radiobutton_id")); radioButton.click();
    1. Dropdowns: To select an option from a dropdown, we can use the Select class provided by WebDriver.

    Example:

    vbnet
    WebElement dropdown = driver.findElement(By.id("dropdown_id")); Select select = new Select(dropdown); select.selectByVisibleText("Option 1");
    1. Alerts: To handle alerts, we can use the Alert class provided by WebDriver.

    Example:

    scss
    Alert alert = driver.switchTo().alert(); alert.accept(); //to click on OK button alert.dismiss(); //to click on Cancel button

    Conclusion: Interacting with web elements using WebDriver commands is a crucial part of automated testing. WebDriver provides a set of methods to interact with different types of web elements such as buttons, text boxes, checkboxes, radio buttons, dropdowns, etc. By mastering the art of interacting with web elements, you can write robust and reliable test scripts that can withstand changes in the web application over time.

Section 2: Best Practices for Writing Selenium WebDriver Commands

Now that we've covered the basics of Selenium WebDriver commands and interacting with web elements, let's dive into some best practices for writing effective automated tests using WebDriver.

  1. Use Explicit Waits: Explicit waits are an essential part of WebDriver automation. They help to ensure that the test script waits for a specific condition to be met before proceeding with the next step. Explicit waits can be applied to a particular element, making it more efficient and reducing the chances of flakiness in the test results. We can use the WebDriverWait class provided by WebDriver to implement explicit waits.

Example:

vbnet
WebElement element = new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.id("element_id")));
  1. Use Relative Locators: Relative locators are a new feature added in Selenium 4 that provides an easier way to locate web elements based on their relation to other elements. They can be used to locate elements above, below, to the left, or to the right of a given element, making it easier to write more precise and readable test scripts.

Example:

less
WebElement element = driver.findElement(RelativeLocator.withTagName("button").above(By.id("element_id")));
  1. Use Page Object Model (POM): The Page Object Model is a design pattern that helps to separate the test code from the application's UI. By creating a separate class for each web page in the application and defining the web elements and their actions in that class, we can make the code more modular, maintainable, and reusable.

Example:

typescript
public class LoginPage { private WebDriver driver; private By usernameField = By.id("username"); private By passwordField = By.id("password"); private By loginButton = By.id("loginButton"); public LoginPage(WebDriver driver) { this.driver = driver; } public void enterUsername(String username) { driver.findElement(usernameField).sendKeys(username); } public void enterPassword(String password) { driver.findElement(passwordField).sendKeys(password); } public void clickLoginButton() { driver.findElement(loginButton).click(); } }
  1. Use Descriptive Test Names: Descriptive test names can help to make the test script more readable and easier to understand. By giving the test a descriptive name, we can quickly identify what the test is doing without having to go through the code.

Example:

java
@Test public void testUserCanLogin() { LoginPage loginPage = new LoginPage(driver); loginPage.enterUsername("username"); loginPage.enterPassword("password"); loginPage.clickLoginButton(); //assertions }
  1. Use Test Data Separately: Test data should be kept separate from the test code to make it easier to maintain and update. By storing the test data in a separate file, we can quickly update it without having to modify the test code.

Example:

java
public class TestData { public static final String USERNAME = "username"; public static final String PASSWORD = "password"; }

Conclusion: By following these best practices, we can write robust and reliable test scripts using Selenium WebDriver. Explicit waits, relative locators, POM, descriptive test names, and separating test data can help to make the code more readable, maintainable, and reusable. These best practices can be applied to any automation project, regardless of its size or complexity.

  • Write clear, readable, and reusable code.

  • Writing clear, readable, and reusable code is an essential skill for any developer, including those working with Selenium WebDriver. Here are some tips to help you write better code:

    1. Use Descriptive Variable Names: Variable names should be descriptive and self-explanatory. Avoid using abbreviations or acronyms that may not be immediately understandable to other developers.

    Example:

    vbnet
    // Bad String u = "user"; String p = "pass"; driver.findElement(By.id("u")).sendKeys(u); driver.findElement(By.id("p")).sendKeys(p); // Good String username = "user"; String password = "pass"; driver.findElement(By.id("username")).sendKeys(username); driver.findElement(By.id("password")).sendKeys(password);
    1. Avoid Hard-Coding Values: Avoid hard-coding values such as URLs, file paths, or timeouts in the code. Instead, use constants or configuration files to store these values, making it easier to update them when necessary.

    Example:

    java
    // Bad driver.get("http://www.example.com/login"); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // Good public static final String LOGIN_URL = "http://www.example.com/login"; public static final int IMPLICIT_WAIT_TIMEOUT = 10; driver.get(LOGIN_URL); driver.manage().timeouts().implicitlyWait(IMPLICIT_WAIT_TIMEOUT, TimeUnit.SECONDS);
    1. Use Comments: Comments can be helpful to explain the purpose of the code or provide additional context. Use comments sparingly and only when necessary.

    Example:

    java
    // Bad WebElement element = driver.findElement(By.id("element_id")); element.click(); // Good // Find the element and click it WebElement element = driver.findElement(By.id("element_id")); element.click();
    1. Use Helper Methods: Helper methods can be used to simplify repetitive or complex tasks. By encapsulating this functionality in a method, we can reduce the amount of code we need to write and make it easier to maintain and reuse.

    Example:

    vbnet
    // Bad driver.findElement(By.id("username")).sendKeys("user"); driver.findElement(By.id("password")).sendKeys("pass"); driver.findElement(By.id("login_button")).click(); // Good public void login(String username, String password) { driver.findElement(By.id("username")).sendKeys(username); driver.findElement(By.id("password")).sendKeys(password); driver.findElement(By.id("login_button")).click(); } login("user", "pass");
    1. Use Object-Oriented Design: Object-oriented design can help to organize and structure the code. By defining classes and objects, we can separate the concerns of the code and make it easier to test and maintain.

    Example:

    less
    // Bad driver.findElement(By.id("username")).sendKeys("user"); driver.findElement(By.id("password")).sendKeys("pass"); driver.findElement(By.id("login_button")).click(); driver.findElement(By.id("menu_button")).click(); driver.findElement(By.id("logout_button")).click(); // Good LoginPage loginPage = new LoginPage(driver); HomePage homePage = loginPage.login("user", "pass"); homePage.logout();

    By following these tips, you can write clear, readable, and reusable code that is easier to maintain and test. Remember to always strive for simplicity and readability in your code.

  • Use the Page Object Model design pattern to organize code and separate concerns.

  • The Page Object Model (POM) is a design pattern commonly used in Selenium WebDriver test automation to organize code and separate concerns. It allows for the creation of an object repository for web elements on a web page, and provides methods to interact with those elements.

    Here are some tips for using the Page Object Model design pattern:

    1. Create a Page Object Class for Each Web Page: Create a separate class for each web page you want to test. Each page object class should represent a unique page or section of a web application.

    Example:

    kotlin
    public class LoginPage { private WebDriver driver; public LoginPage(WebDriver driver) { this.driver = driver; } // Define web elements and page methods here }
    1. Define Web Elements as Private Variables: Define web elements as private variables in the page object class. Use the appropriate locator strategy to locate each element.

    Example:

    java
    public class LoginPage { private WebDriver driver; private By usernameField = By.id("username"); private By passwordField = By.id("password"); private By loginButton = By.id("login_button"); public LoginPage(WebDriver driver) { this.driver = driver; } // Define page methods here }
    1. Create Public Methods to Interact with Web Elements: Create public methods to interact with the web elements on the page. These methods should perform actions such as entering text, clicking buttons, or selecting options from a dropdown.

    Example:

    typescript
    public class LoginPage { private WebDriver driver; private By usernameField = By.id("username"); private By passwordField = By.id("password"); private By loginButton = By.id("login_button"); public LoginPage(WebDriver driver) { this.driver = driver; } public void enterUsername(String username) { driver.findElement(usernameField).sendKeys(username); } public void enterPassword(String password) { driver.findElement(passwordField).sendKeys(password); } public void clickLoginButton() { driver.findElement(loginButton).click(); } }
    1. Use Page Factory to Initialize Page Objects: Use Page Factory to initialize page objects in your test cases. This simplifies the process of creating and managing page objects, and ensures that all necessary web elements are loaded before they are accessed.

    Example:

    typescript
    public class LoginPageTest { private WebDriver driver; @BeforeMethod public void setUp() { driver = new ChromeDriver(); driver.get("https://www.example.com/login"); } @Test public void loginTest() { LoginPage loginPage = PageFactory.initElements(driver, LoginPage.class); loginPage.enterUsername("user"); loginPage.enterPassword("pass"); loginPage.clickLoginButton(); // Assertions and other test logic here } @AfterMethod public void tearDown() { driver.quit(); } }

    Using the Page Object Model design pattern can help to organize your code and make it easier to maintain and reuse. It also provides a clear separation of concerns between the test code and the web application under test.

  • Use comments to make the code easy to understand.

  • Adding comments to your code is an important practice that can make it easier to understand and maintain. Comments provide additional information about what the code is doing and can help other developers (or even your future self) to understand your thought process.

    Here are some tips for using comments effectively:

    1. Use Comments Sparingly: While comments can be helpful, it's important not to overuse them. Too many comments can make your code difficult to read and cluttered. Only add comments where necessary to explain complex code or provide context.

    2. Write Clear and Concise Comments: Write comments that are clear and concise, explaining what the code is doing and why. Avoid using comments to describe obvious things that can be inferred from the code itself.

    3. Use Standard Comment Formats: Use standard comment formats that are easy to read and understand. For example, JavaDoc-style comments use a specific format to describe methods and their parameters.

    Example:

    csharp
    /** * This method clicks the login button on the login page */ public void clickLoginButton() { driver.findElement(loginButton).click(); }
    1. Update Comments as Code Changes: Make sure to update your comments if the code changes. Comments that no longer match the code can be confusing and lead to errors.

    2. Remove Unused Comments: Remove any comments that are no longer necessary, as they can become outdated and misleading.

    By following these tips, you can use comments effectively to make your code easier to understand and maintain.

  • Use implicit and explicit waits to handle synchronization issues.

  • One of the biggest challenges in automated testing is handling synchronization issues. This occurs when the test script is trying to interact with a web element that is not yet visible or enabled on the page. To overcome this challenge, Selenium WebDriver provides two types of waits: implicit and explicit.

    1. Implicit Waits: Implicit waits are set for the entire duration of the WebDriver session. The WebDriver will wait for a certain amount of time before throwing a "NoSuchElementException" if the element is not found. The default wait time is 0 seconds. To set an implicit wait time, use the following code:
    java
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

    In the above example, the WebDriver will wait for up to 10 seconds for an element to appear on the page.

    1. Explicit Waits: Explicit waits are used to wait for a specific condition to occur before proceeding with the test script. This is useful for situations where the implicit wait time is not enough or when you want to wait for a specific condition before moving to the next step. To use an explicit wait, use the "WebDriverWait" class and specify the condition to wait for:
    java
    WebDriverWait wait = new WebDriverWait(driver, 10); WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("example")));

    In the above example, the WebDriver will wait for up to 10 seconds for the element with ID "example" to be visible on the page.

    Using both implicit and explicit waits is important for handling synchronization issues and ensuring that the test script runs smoothly. By using waits effectively, you can avoid errors and make your tests more reliable.

  • Use try-catch blocks to handle exceptions and prevent tests from failing unnecessarily.

  • When writing automated tests using Selenium WebDriver, it's important to handle exceptions that may occur during test execution. Exceptions can occur for a variety of reasons, such as element not found, element not interactable, page load timeout, etc. If exceptions are not handled properly, the test will fail and stop executing, even if there are other steps that can still be executed.

    To handle exceptions, you can use try-catch blocks. A try-catch block is used to catch exceptions that occur within the try block, preventing the test from failing and allowing it to continue executing.

    Here's an example:

    java
    try { WebElement element = driver.findElement(By.id("example")); element.click(); } catch (NoSuchElementException e) { // Handle the exception System.out.println("Element not found"); } catch (ElementNotInteractableException e) { // Handle the exception System.out.println("Element not interactable"); }

    In the above example, the try block contains code that interacts with an element. If the element is not found or not interactable, an exception will be thrown. The catch blocks handle the exceptions and prevent the test from failing.

    By using try-catch blocks, you can handle exceptions and prevent tests from failing unnecessarily. This makes your tests more robust and reliable. However, it's important to handle exceptions correctly and not ignore them completely, as this can mask underlying issues in the application or test script.

Section 3: Best Practices for Debugging Selenium WebDriver Commands

Debugging is an important part of writing automated tests using Selenium WebDriver. When a test fails, it's important to identify the cause of the failure and fix it as quickly as possible. Here are some best practices for debugging Selenium WebDriver commands:

  1. Use debugging tools: Most modern integrated development environments (IDEs) provide debugging tools that can be used to step through code and identify errors. When debugging WebDriver commands, use the debugger to step through the code and see where the error occurs.

  2. Use logging: Logging is a useful way to debug WebDriver commands. By logging the steps taken by the WebDriver, you can see where errors occur and identify the cause of the failure. To log messages in Java, use the following code:

java
import java.util.logging.Logger; Logger logger = Logger.getLogger(getClass().getName()); logger.info("This is a log message");
  1. Take screenshots: Taking screenshots is a useful way to identify errors that may not be immediately apparent. When a test fails, take a screenshot of the page to see what was displayed at the time of the failure. To take a screenshot in Java, use the following code:
java
import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.apache.commons.io.FileUtils; File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(screenshot, new File("path/to/screenshot.png"));
  1. Use assertions: Assertions are a useful way to verify that a test is working as expected. By using assertions, you can check that the WebDriver has performed the correct actions and that the page is in the expected state. To use assertions in Java, use the following code:
java
import org.junit.Assert; Assert.assertEquals("Expected value", actualValue);

By following these best practices, you can identify and fix errors quickly, making your automated tests more robust and reliable.

  • Explain how to use debugging tools such as the Chrome DevTools and the Firebug add-on for Firefox.

  • Debugging tools can be very useful in identifying and fixing errors when working with Selenium WebDriver. Two popular debugging tools are the Chrome DevTools and the Firebug add-on for Firefox.

    1. Chrome DevTools: Chrome DevTools is a set of web development tools built into the Google Chrome browser. It can be used to inspect and debug web pages, including those being controlled by Selenium WebDriver. To use Chrome DevTools with Selenium WebDriver, follow these steps:

      • Launch Google Chrome and navigate to the web page that you want to test.
      • Open Chrome DevTools by pressing F12 or right-clicking anywhere on the page and selecting "Inspect".
      • In the DevTools window, select the "Elements" tab to view the HTML source of the page.
      • To inspect an element on the page, hover over it in the HTML source or click the "Select an element" icon in the upper left corner of the DevTools window and then click the element on the page.
      • Once you have selected an element, you can view its properties in the "Styles" and "Computed" tabs.
    2. Firebug: Firebug is a free add-on for Firefox that can be used to inspect and debug web pages. To use Firebug with Selenium WebDriver, follow these steps:

      • Launch Firefox and install the Firebug add-on.
      • Navigate to the web page that you want to test.
      • Open Firebug by pressing F12 or right-clicking anywhere on the page and selecting "Inspect Element with Firebug".
      • In the Firebug window, select the "HTML" tab to view the HTML source of the page.
      • To inspect an element on the page, hover over it in the HTML source or click the "Select Element" icon in the upper left corner of the Firebug window and then click the element on the page.
      • Once you have selected an element, you can view its properties in the "CSS" and "Layout" tabs.

    Using debugging tools like Chrome DevTools and Firebug can help you quickly identify and debug issues with your Selenium WebDriver scripts. They allow you to inspect and interact with the web page being tested, giving you insight into what is happening behind the scenes.

  • Explain how to use breakpoints to pause the execution of the code at a specific line and examine the state of the application and variables.

  • Breakpoints can be very useful for debugging Selenium WebDriver scripts. They allow you to pause the execution of the code at a specific line and examine the state of the application and variables at that point in time. To use breakpoints in Selenium WebDriver, follow these steps:

    1. Identify the line of code where you want to set the breakpoint.
    2. Place the cursor on that line of code and click on the left-hand side of the editor to set a breakpoint. Alternatively, you can use the keyboard shortcut "Ctrl+Shift+B" in most IDEs to set a breakpoint.
    3. Run the code in debug mode by selecting the "Debug" option instead of "Run".
    4. The code will start executing, and when it reaches the breakpoint, it will pause. You can now examine the state of the application and variables.
    5. To resume execution of the code, click the "Resume" button or press the "F8" key.

    While the code is paused, you can use the debugging tools, such as Chrome DevTools or Firebug, to inspect the state of the application and variables. You can view the call stack, step through the code line-by-line, and modify variable values to test different scenarios.

    Using breakpoints and debugging tools together can help you quickly identify and fix issues with your Selenium WebDriver scripts. They allow you to get a better understanding of how your code is executing and can provide valuable insights into what is happening behind the scenes.

  • Explain how to use logging to debug Selenium WebDriver commands.

  • Logging can be a useful tool for debugging Selenium WebDriver commands. It allows you to capture information about what your code is doing and any errors that may occur, even if you're not actively debugging the code.

    To use logging in Selenium WebDriver, follow these steps:

    1. Import the "logging" module in your code.
    2. Create a logger object using the "logging.getLogger()" method.
    3. Set the logging level to an appropriate level (e.g. "logging.INFO" or "logging.DEBUG").
    4. Add log messages throughout your code using the "logger.info()" or "logger.debug()" methods.

    For example, you could add log messages before and after each step of your script to see which steps are causing issues. You could also log any errors that occur, along with relevant information like the current URL or the values of key variables.

    Once you've added logging to your code, you can view the logs in a variety of ways. One option is to write the logs to a file using the "logging.FileHandler()" class. This allows you to review the logs after the script has finished running.

    Another option is to view the logs in the console using the "logging.StreamHandler()" class. This can be useful for quickly identifying errors or issues while the script is running.

    By using logging to debug your Selenium WebDriver commands, you can gain valuable insights into what your code is doing and quickly identify and fix issues as they arise.

Section 4: Best Practices for Maintaining Selenium WebDriver Commands

Maintaining Selenium WebDriver commands is important to ensure that your automated tests continue to run smoothly and provide reliable results. Here are some best practices for maintaining your Selenium WebDriver commands:

  1. Regularly review and update your scripts: As web applications change over time, it's important to review and update your scripts to ensure they continue to work correctly. This can involve updating element locators, modifying test steps, or adding new tests.

  2. Use version control: Use a version control system such as Git to manage your scripts. This allows you to track changes, roll back to previous versions, and collaborate with others.

  3. Use descriptive names for elements and tests: Use descriptive names for your elements and tests to make them easier to understand and maintain. Avoid using generic names like "button1" or "test1".

  4. Use parameterization: Use parameterization to make your tests more flexible and reusable. This allows you to run the same test with different input values, making it easier to test different scenarios.

  5. Use data-driven testing: Use data-driven testing to test your application with different sets of data. This allows you to test a wider range of scenarios and catch any issues that may arise.

  6. Monitor test results: Monitor the results of your tests regularly to identify any failures or issues. This allows you to catch problems early and make any necessary adjustments to your scripts.

By following these best practices, you can ensure that your Selenium WebDriver commands are well-maintained and continue to provide accurate results over time.

  • Keep the WebDriver version up to date to ensure compatibility with the latest browser versions.

  • Thank you for pointing out this important best practice! Keeping the WebDriver version up to date is critical to ensure that it remains compatible with the latest browser versions. WebDriver is tightly integrated with the browser it controls, so if the browser version changes, there is a risk that the WebDriver commands may not work as expected.

    To ensure compatibility, it's important to regularly check for updates to WebDriver and install the latest version as soon as it becomes available. Most WebDriver implementations have a dedicated download page where you can find the latest version.

    Another option is to use a WebDriver manager, which can automatically download and manage the correct version of WebDriver for your browser. This can be particularly useful if you need to test your application on multiple browsers or versions.

    By keeping your WebDriver version up to date, you can ensure that your automated tests continue to work correctly and provide reliable results, even as browsers and web applications continue to evolve.

  • Use version control systems such as Git to keep track of changes and collaborate with other developers.

  • Thank you for bringing up this important best practice! Using a version control system such as Git is crucial when working on Selenium WebDriver commands, especially when working in a team environment or across multiple machines.

    Version control systems allow you to keep track of changes to your code over time, collaborate with other developers, and maintain a history of your code. This makes it easier to identify and fix bugs, roll back changes if needed, and work on different features or branches of the codebase simultaneously.

    Git is a popular and widely used version control system that integrates well with Selenium WebDriver. It allows you to create different branches for different features or experiments, merge changes from different developers, and track changes to your code over time.

    When using Git with Selenium WebDriver, it's important to create a separate project or repository for your WebDriver commands. This makes it easier to manage and track changes to your code, and helps prevent conflicts with other code or configurations.

    By using version control systems such as Git, you can ensure that your Selenium WebDriver commands are well-organized, easy to maintain, and optimized for collaboration with other developers.

  • Use continuous integration tools such as Jenkins or Travis CI to automate the testing process and ensure that tests are executed regularly.

  • Thank you for highlighting this important best practice! Using continuous integration (CI) tools such as Jenkins or Travis CI can help automate the testing process and ensure that tests are executed regularly, reducing the risk of bugs and errors in your code.

    CI tools allow you to automatically build, test, and deploy your code whenever changes are made to your repository. This ensures that your Selenium WebDriver commands are always up-to-date and that any issues are identified and resolved quickly.

    To set up continuous integration for your Selenium WebDriver commands, you can create a pipeline in your CI tool that includes the following steps:

    1. Checkout the latest version of the code from the repository.
    2. Install any necessary dependencies.
    3. Run the automated tests using Selenium WebDriver commands.
    4. Report the test results and any errors or failures.

    By using continuous integration tools, you can ensure that your Selenium WebDriver commands are always up-to-date and that any issues are identified and resolved quickly, improving the overall quality of your code and reducing the risk of bugs and errors.

Conclusion

In conclusion, mastering Selenium WebDriver commands is crucial for writing effective and efficient automated tests. By following best practices such as using clear and readable code, implementing the Page Object Model design pattern, using comments, handling synchronization issues with implicit and explicit waits, and debugging with breakpoints and logging, you can ensure that your tests are reliable, maintainable, and scalable.

Additionally, maintaining your Selenium WebDriver commands by keeping the WebDriver version up-to-date, using version control systems such as Git, and implementing continuous integration with tools such as Jenkins or Travis CI, can further improve the quality and efficiency of your automated testing process.

By implementing these best practices, you can improve the overall quality of your Selenium WebDriver commands and ensure that your automated tests are an integral part of your development process, saving time and reducing the risk of bugs and errors.

  • Summarize the main points of the blog post.

  • This blog post provides best practices for using Selenium WebDriver commands effectively in automated testing. The main points covered in this blog post include:

    1. Getting started with Selenium WebDriver commands and understanding the basic syntax.
    2. Identifying web elements using different locators such as ID, Name, Class Name, Tag Name, Link Text, and Partial Link Text.
    3. Interacting with different web elements using WebDriver commands.
    4. Writing clear, readable, and reusable code.
    5. Using the Page Object Model design pattern to organize code and separate concerns.
    6. Using comments to make the code easy to understand.
    7. Using implicit and explicit waits to handle synchronization issues.
    8. Using try-catch blocks to handle exceptions and prevent tests from failing unnecessarily.
    9. Debugging Selenium WebDriver commands using tools such as the Chrome DevTools, the Firebug add-on for Firefox, breakpoints, and logging.
    10. Maintaining Selenium WebDriver commands by keeping the WebDriver version up-to-date, using version control systems such as Git, and implementing continuous integration with tools such as Jenkins or Travis CI.

    By implementing these best practices, you can improve the overall quality of your Selenium WebDriver commands and ensure that your automated tests are an integral part of your development process, saving time and reducing the risk of bugs and errors.

  • Reiterate the importance of following best practices for using Selenium WebDriver commands.

  • Following best practices for using Selenium WebDriver commands is important for several reasons:

    1. Writing effective and efficient automated tests: By following best practices, you can ensure that your automated tests are reliable, maintainable, and scalable. This, in turn, can help you write effective and efficient automated tests that can save time and reduce the risk of bugs and errors.

    2. Improving the overall quality of your Selenium WebDriver commands: By implementing best practices, you can improve the overall quality of your Selenium WebDriver commands, making them easier to understand, debug, and maintain.

    3. Ensuring compatibility with the latest browser versions: Keeping the WebDriver version up-to-date ensures that your Selenium WebDriver commands are compatible with the latest browser versions, ensuring that your automated tests work as expected.

    4. Collaborating with other developers: Using version control systems such as Git can help you collaborate with other developers and keep track of changes to your Selenium WebDriver commands.

    5. Automating the testing process: Using continuous integration tools such as Jenkins or Travis CI can help you automate the testing process and ensure that tests are executed regularly, helping you catch bugs and errors early in the development process.

    Overall, following best practices for using Selenium WebDriver commands can help you write effective and efficient automated tests, improve the overall quality of your Selenium WebDriver commands, and streamline the testing process.

  • Encourage readers to apply these best practices in their automated testing projects.

I highly encourage readers to apply these best practices in their automated testing projects. By following these best practices, you can ensure that your Selenium WebDriver commands are reliable, maintainable, and scalable. This can help you write effective and efficient automated tests that can save time and reduce the risk of bugs and errors.

Furthermore, these best practices can improve the overall quality of your Selenium WebDriver commands, making them easier to understand, debug, and maintain. This can save you time and effort in the long run, especially as your testing projects become more complex.

So, don't hesitate to apply these best practices in your automated testing projects. Start by identifying web elements, writing clear and readable code, using the Page Object Model, handling synchronization issues with implicit and explicit waits, debugging your code with tools like Chrome DevTools and Firebug, and using version control and continuous integration tools to streamline your testing process.

By following these best practices, you can become a master of Selenium WebDriver and write automated tests that are efficient, effective, and reliable.


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: Mastering Selenium WebDriver: Best Practices for Writing Effective Automated Tests
Mastering Selenium WebDriver: Best Practices for Writing Effective Automated Tests
Mastering Selenium WebDriver: Best Practices for Writing Effective Automated Tests
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimXd-tFD0-WayYPouGzZ6ZyaPe3tG4a5HUlDLW52ZJW6my7v3IEjWoro4eNyOn6mViU1YNMtTYvOhknwfRO3XzKiObK-TRX2AZPzFVhBt6V78EjY7gFJa_XTwpAkPFJmL43HJpTPrj_qqwiO-5JAv7zzMkWNI5OcK4D9q8RKInYGi0sR6lcqLQEEQK/w640-h360/Mastering%20Selenium%20WebDriver%20Best%20Practices%20for%20Writing%20Effective%20Automated%20Tests.jpg
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimXd-tFD0-WayYPouGzZ6ZyaPe3tG4a5HUlDLW52ZJW6my7v3IEjWoro4eNyOn6mViU1YNMtTYvOhknwfRO3XzKiObK-TRX2AZPzFVhBt6V78EjY7gFJa_XTwpAkPFJmL43HJpTPrj_qqwiO-5JAv7zzMkWNI5OcK4D9q8RKInYGi0sR6lcqLQEEQK/s72-w640-c-h360/Mastering%20Selenium%20WebDriver%20Best%20Practices%20for%20Writing%20Effective%20Automated%20Tests.jpg
Automation, your comprehensive guide to the world of business and technology
https://automationhometoolstesting.blogspot.com/2023/03/mastering-selenium-webdriver-best.html
https://automationhometoolstesting.blogspot.com/
https://automationhometoolstesting.blogspot.com/
https://automationhometoolstesting.blogspot.com/2023/03/mastering-selenium-webdriver-best.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