Alright, tested tried and True:
The following code provides the ability to decorate tests so that a whole
list of drivers is used... see the docs for examples...
import functools
def test_drivers(pool_name='drivers', target_attr='selenium'):
"""
Run tests with `target_attr` set to each instance in the `WebDriverPool`
named `pool_name`.
For example, in you setUpClass method of your LiveServerTestCase:
# Importing the necessaries:
from selenium import webdriver
### In your TestCase:
# Be sure to add a place holder attribute for the driver variable
selenium = None
# Set up drivers
@classmethod
def setUpClass(cls):
cls.drivers = WebDriverList(
webdriver.Chrome(),
webdriver.Firefox(),
webdriver.Opera(),
webdriver.PhantomJS,
)
super(MySeleniumTests, cls).setUpClass()
# Tear down drivers
@classmethod
def tearDownClass(cls):
cls.drivers.quit()
super(MySeleniumTests, cls).tearDownClass()
# Use drivers
@test_drivers()
def test_login(self):
self.selenium.get('%s%s' % (self.live_server_url, '/'))
self.assertEquals(self.selenium.title, 'Awesome Site')
This will run `test_login` with each of the specified drivers as the
attribute named "selenium"
"""
def wrapped(test_func):
@functools.wraps(test_func)
def decorated(test_case, *args, **kwargs):
test_class = test_case.__class__
web_driver_pool = getattr(test_class, pool_name)
for web_driver in web_driver_pool:
setattr(test_case, target_attr, web_driver)
test_func(test_case, *args, **kwargs)
return decorated
return wrapped
class WebDriverList(list):
"""
A sequence that has a `.quit` method that will run on each item in the
list.
Used to easily "quit" a list of WebDrivers.
"""
def __init__(self, *drivers):
super(WebDriverList, self).__init__(drivers)
def quit(self):
for driver in self:
driver.quit()
On Thursday, September 26, 2013 10:46:43 AM UTC-6, Tianyi Wang wrote:
>
> Hi guys,
>
> So follow the Django doc example,
> https://docs.djangoproject.com/en/dev/topics/testing/overview/#django.test.LiveServerTestCase
>
> In the example, the test only test against Firefox. How can I test against
> different browsers without duplicate the example code?
>
> Thanks
>
> Tianyi
>
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
For more options, visit https://groups.google.com/groups/opt_out.