jacksparrow007
jacksparrow007

Reputation: 1328

python selenium multiple test cases

I have the following code in python

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from unittestzero import Assert
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import ElementNotVisibleException
import unittest, time, re

class HomePageTest(unittest.TestCase):
    expected_title="  some title here "
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "https://somewebsite.com"
        self.verificationErrors = []

    def test_home_page(self):
        driver=self.driver
        driver.get(self.base_url)
        print "test some things here"




    def test_whatever(self):
        print "test some more things here"

    def tearDown(self):
        self.driver.quit()


if __name__ == "__main__":
    unittest.main()

My problem is after the function test_home_page, the firefox instance closes and opens again for the next test_whatever function. How can I do his so that all the test cases are executed from the same firefox instance.

Upvotes: 5

Views: 11596

Answers (6)

sudazzle
sudazzle

Reputation: 605

use setUpClass and tearDownClass with @classmethod decorator.

Upvotes: 0

Jace.Xu
Jace.Xu

Reputation: 91

use setUpClass and tearDownClass

class HomePageTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Firefox()

    def setUp(self):
        self.base_url = "https://somewebsite.com"
        self.verificationErrors = []

    def tearDown(self):
        self.driver.get(self.base_url)

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()



if __name__ == "__main__":
    unittest.main()

Upvotes: 3

Jinyu Chen
Jinyu Chen

Reputation: 27

def suite():  

    suite = unittest.TestSuite()  
    suite.addTest(HomePageTest("test_home_page"))  
    suite.addTest(HomePageTest("test_whatever"))  
    return suite  

if __name__ == "__main__":

    unittest.TextTestRunner().run(suite()) 

Run many testcase with the same Firefox instance. Btw, i have a question hope someone could know it and answer to me. How could i execute the same testcase in different browsers?

Upvotes: 0

Ashwin Reddy
Ashwin Reddy

Reputation: 1

I think WebDriver Plus solves your problem. Here it is. http://webdriverplus.org/en/latest/browsers.html You can reuse the same browser instance across all unit tests using this .

Upvotes: 0

dave
dave

Reputation: 683

Usually you want the browser to close between tests so that you start each test with a clean cache, localStorage, history database, etc. Closing the browser between tests does slow down the tests, but it saves in debug time because a test doesn't interact with the browser cache and history of a previous test.

Upvotes: 8

schlamar
schlamar

Reputation: 9509

Initialize the firefox driver in __init__:

class HomePageTest(unittest.TestCase):
    def __init__(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "https://somewebsite.com"
        self.verificationErrors = []

    ...

    def tearDown(self):
        self.driver.quit()

Upvotes: 3

Related Questions