What is Data-driven Testing Framework?
In a data-driven testing framework, a set of data is created in an excel sheet, and those set of data are imported from an excel sheet to testing tool for testing.
For example, I have taken the www.myntra.com as my demo site for which I will be performing some data-driven test for sign in.
To Sign in a manual user have to follow below steps:
1. Enter www.myntra.com
2. Click on Profiles
3. Click on LOG IN
4. Enter Email address and password
5. Click on LOG IN button
Same we will do using selenium data-driven test framework. For repetitive login we will use excel sheet with email address and passwords.
So first step will create a XLUtil.py file which will import data from excel to automation framework ie. it will put on the website
So in XLUtil.py,
1. getRowCount method will get the max row count
2. getColoumnCount method will get the max column count
3. readData method would read the data from the particular cell
4. writeData method would write the data to a particular cell
Below is the snippet for the login.py
So in login.py,
1. We import the XLUtil.py as we are going to call the methods related to Excel
2. Launch the www.myntra.com.
3. Click on profile
4. Click on login
5. Enter email address and password
6. Click on login
So far email address and password, we are importing those values from excel and then writing on website, if user login, then the test is pass which is written in excel sheet with writeData(). If the login fails then Test failed is written in excel sheet as a test result of the test.
In a data-driven testing framework, a set of data is created in an excel sheet, and those set of data are imported from an excel sheet to testing tool for testing.
For example, I have taken the www.myntra.com as my demo site for which I will be performing some data-driven test for sign in.
To Sign in a manual user have to follow below steps:
1. Enter www.myntra.com
2. Click on Profiles
3. Click on LOG IN
4. Enter Email address and password
5. Click on LOG IN button
Same we will do using selenium data-driven test framework. For repetitive login we will use excel sheet with email address and passwords.
So first step will create a XLUtil.py file which will import data from excel to automation framework ie. it will put on the website
import openpyxl def getRowCount(file,sheetName): workbook = openpyxl.load_workbook(file) sheet = workbook.get_sheet_by_name(sheetName) return(sheet.max_row) def getColumnCount(file,sheetName): workbook = openpyxl.load_workbook(file) sheet = workbook.get_sheet_by_name(sheetName) return(sheet.max_column) def readData(file,sheetName,rownum,colnum): workbook = openpyxl.load_workbook(file) sheet = workbook.get_sheet_by_name(sheetName) return sheet.cell(row=rownum,column=colnum).value def writeData(file,sheetName,rownum,colnum,data): workbook = openpyxl.load_workbook(file) sheet = workbook.get_sheet_by_name(sheetName) sheet.cell(row=rownum,column=colnum).value = data workbook.save(file)
So in XLUtil.py,
1. getRowCount method will get the max row count
2. getColoumnCount method will get the max column count
3. readData method would read the data from the particular cell
4. writeData method would write the data to a particular cell
Below is the snippet for the login.py
import XLUtils from selenium import webdriver from time import sleep from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.keys import Keys # For pop up alerts of webpage option = Options() option.add_argument("--disable-infobars") option.add_argument("start-maximized") option.add_argument("--disable-extensions") # Pass the argument 1 to allow and 2 to block option.add_experimental_option("prefs", { "profile.default_content_setting_values.notifications": 1}) driver = webdriver.Chrome(chrome_options=option, executable_path= 'chromedriver.exe') driver.maximize_window() driver.get('https://www.myntra.com') assert 'Online Shopping for Women, Men, Kids Fashion & Lifestyle - Myntra' in driver.title search_box = driver.find_element_by_class_name("desktop-searchBar") # Login to the website profile = driver.find_element_by_class_name("desktop-userTitle").get_attribute ("data-reactid") print profile driver.find_element_by_class_name("desktop-userTitle").click() sleep(1) print driver.find_element_by_link_text("LOG IN").get_attribute("text") login = driver.find_element_by_link_text("LOG IN").click() sleep(1) assert 'Login' in driver.title path = "C:\Data\Roshni\selenium_Framework\Myntra_app_automate\details.xlsx" rows = XLUtils.getRowCount(path,'Sheet1') for r in range(2,rows+1): username = XLUtils.readData(path,'Sheet1',r,1) password = XLUtils.readData(path,'Sheet1',r,2) # On login page use email and password to login # Enter email text field print driver.find_element_by_class_name("login-user-input-email") .get_attribute("name") driver.find_element_by_class_name("login-user-input-email") .clear() driver.find_element_by_class_name("login-user-input-email") .send_keys(username) driver.find_element_by_class_name("login-user-input-email") .send_keys(Keys.TAB) sleep(2) # Enter Password text field print driver.find_element_by_class_name("login-user-input-password") .get_attribute("name") driver.find_element_by_class_name("login-user-input-password") .clear() driver.find_element_by_class_name("login-user-input-password") .send_keys(password) sleep(1) # Press Log In button print driver.find_element_by_class_name("login-login-button-container") .get_attribute("text") driver.find_element_by_class_name("login-login-button-container") .click() sleep(2) if driver.title == "Online Shopping for Women, Men, Kids Fashion & Lifestyle - Myntra": print("Test Passed") XLUtils.writeData(path,'Sheet1',r,3,"Test Passed") # For logout profile = driver.find_element_by_class_name("desktop-userTitle") .get_attribute("data-reactid") print profile driver.find_element_by_class_name("desktop-userTitle").click() sleep(1) driver.find_element_by_xpath( "/html/body/div[1]/div/div/header/div[2] /div[2]/div/div[2]/div[2]/div[2]/div[3]/div/div").click() sleep(5) # Login to the website profile = driver.find_element_by_class_name("desktop-userTitle") .get_attribute("data-reactid") print profile driver.find_element_by_class_name("desktop-userTitle").click() sleep(1) print driver.find_element_by_link_text("LOG IN").get_attribute("text") login = driver.find_element_by_link_text("LOG IN").click() sleep(1) assert 'Login' in driver.title else: print("Test Failed") XLUtils.writeData(path, 'Sheet1', r, 3,"Test Failed") sleep(5) driver.quit()
So in login.py,
1. We import the XLUtil.py as we are going to call the methods related to Excel
2. Launch the www.myntra.com.
3. Click on profile
4. Click on login
5. Enter email address and password
6. Click on login
So far email address and password, we are importing those values from excel and then writing on website, if user login, then the test is pass which is written in excel sheet with writeData(). If the login fails then Test failed is written in excel sheet as a test result of the test.