I am new to automated browser testing using selenium webdriver (Python 3). The following method I am already using for testing and taking screenshots:
from selenium import webdriver
from selenium.webdriver.support.events import EventFiringWebDriver
from selenium.webdriver.support.events import AbstractEventListener
import unittest
class ScreenshotListener(AbstractEventListener):
def on_exception(self, exception, driver):
driver.get_screenshot_as_file("C:/Error.png")
class Test1_Chrome(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome() # Set chrome browser
self.driver1 = EventFiringWebDriver(self.driver, ScreenshotListener())
self.driver.maximize_window() # Maximize window
time.sleep(0.30) # Wait 30 seconds
def test_port(self):
driver = self.driver1
driver.get("http://") # Opens url into chrome
driver.get_screenshot_as_file("C:/Chrome_screenshots/Screenshot1.png")
driver.find_element_by_css_selector("a[name*='']").click()
driver.get_screenshot_as_file("C:/Chrome_screenshots/Screenshot2.png")
driver.find_element_by_css_selector("b[name*='']").click()
driver.get_screenshot_as_file("C:/Chrome_screenshots/Screenshot3.png")
driver.find_element_by_css_selector("a[href*='']").click()
driver.get_screenshot_as_file("C:/Chrome_screenshots/Screenshot4.png")
def tearDown(self):
time.sleep(2)
driver = self.driver1
driver.close()
class Test2_IE(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Ie() # Set IE browser
self.driver2 = EventFiringWebDriver(self.driver, ScreenshotListener())
self.driver.maximize_window() # Maximize window
time.sleep(0.30) # Wait 30 seconds
def test_port(self):
driver = self.driver2
driver.get("http://") # Opens url into IE
driver.get_screenshot_as_file("C:/IE_screenshots/Screenshot1.png")
driver.find_element_by_css_selector("a[name*='']").click()
driver.get_screenshot_as_file("C:/IE_screenshots/Screenshot2.png")
driver.find_element_by_css_selector("b[name*='']").click()
driver.get_screenshot_as_file("C:/IE_screenshots/Screenshot3.png")
driver.find_element_by_css_selector("c[href*='']").click()
driver.get_screenshot_as_file("C:/IE_screenshots/Screenshot4.png")
def tearDown(self):
time.sleep(2)
driver = self.driver2
driver.close()
class Test3_Firefox(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox() # Set Firefox browser
self.driver3 = EventFiringWebDriver(self.driver, ScreenshotListener())
self.driver.maximize_window() # Maximize window
time.sleep(0.30) # Wait 30 seconds
def test_port(self):
driver = self.driver3
driver.get("http://") # Opens url into FireFox
driver.get_screenshot_as_file("C:/FF_screenshots/Screenshot1.png")
driver.find_element_by_css_selector("a[name*='']").click()
driver.get_screenshot_as_file("C:/FF_screenshots/Screenshot2.png")
driver.find_element_by_css_selector("b[name*='']").click()
driver.get_screenshot_as_file("C:/FF_screenshots/Screenshot3.png")
driver.find_element_by_css_selector("c[href*='']").click()
driver.get_screenshot_as_file("C:/FF_screenshots/Screenshot4.png")
def tearDown(self):
time.sleep(2)
driver = self.driver3
driver.close()
if __name__ == '__main__':
unittest.main()
Question: I want to create some loop or function for these screeenshots in such a way that : Saves all three browser element screenshots in a different folder with all different names. Example: ChromeSreenshots- Screenshot1, screenshot2, etc; IESreenshots- Screenshot1, screenshot2, etc; FirefoxSreenshots- Screenshot1, screenshot2, etc. How can I create such a function which I call into same or different python file?
The code I used already has "test_port(self)" function which is common for all three browsers except the screenshots(location and name). I want to use "test_port(self)" function by calling into all three browser tests but the problem is I want the screenshots to be in different locations and different names. I searched on web but did not found something good to solve this problem.