|
3 | 3 | by providing a WebDriver object for the tests to use.
|
4 | 4 | """
|
5 | 5 |
|
6 |
| -import time |
7 |
| -import os |
8 | 6 | from nose.plugins import Plugin
|
9 |
| -from selenium import webdriver |
10 | 7 | from pyvirtualdisplay import Display
|
11 |
| -from seleniumbase.core import selenium_launcher |
12 |
| -from seleniumbase.core import browser_launcher |
13 | 8 | from seleniumbase.fixtures import constants
|
14 | 9 |
|
15 | 10 |
|
@@ -95,111 +90,43 @@ def options(self, parser, env):
|
95 | 90 |
|
96 | 91 | def configure(self, options, conf):
|
97 | 92 | super(SeleniumBrowser, self).configure(options, conf)
|
98 |
| - if not self.enabled: |
99 |
| - return |
100 |
| - |
101 |
| - # Determine the browser version to use, and configure settings |
102 |
| - self.browser_settings = { |
103 |
| - "browserName": options.browser, |
104 |
| - 'name': self.conf.testNames[0], |
105 |
| - 'build': os.getenv('BUILD_TAG'), |
106 |
| - 'project': os.getenv('JOB_NAME') |
107 |
| - } |
108 |
| - |
109 |
| - if options.browser == constants.Browser.INTERNET_EXPLORER: |
110 |
| - self.browser_settings["platform"] = "WINDOWS" |
111 |
| - self.browser_settings["browserName"] = "internet explorer" |
112 |
| - |
113 |
| - if options.browser_version == 'latest': |
114 |
| - version = constants.Browser.LATEST[options.browser] |
115 |
| - if version is not None: |
116 |
| - self.browser_settings["version"] = version |
117 |
| - else: |
118 |
| - version_options = constants.Browser.VERSION[options.browser] |
119 |
| - if (version_options is not None and |
120 |
| - options.browser_version in version_options): |
121 |
| - self.browser_settings["version"] = options.browser_version |
122 |
| - |
| 93 | + self.enabled = True # Used if test class inherits BaseCase |
123 | 94 | self.options = options
|
124 |
| - self.headless_active = False |
125 |
| - |
126 |
| - if (self.options.servername == "localhost" and |
127 |
| - self.options.browser == constants.Browser.HTML_UNIT): |
128 |
| - selenium_launcher.execute_selenium(self.options.servername, |
129 |
| - self.options.port, |
130 |
| - self.options.log_path) |
| 95 | + self.headless_active = False # Default setting |
131 | 96 |
|
132 | 97 | def beforeTest(self, test):
|
133 | 98 | """ Running Selenium locally will be handled differently
|
134 | 99 | from how Selenium is run remotely, such as from Jenkins. """
|
135 | 100 |
|
| 101 | + test.test.browser = self.options.browser |
| 102 | + test.test.headless = self.options.headless |
| 103 | + test.test.servername = self.options.servername |
| 104 | + test.test.port = self.options.port |
| 105 | + test.test.demo_mode = self.options.demo_mode |
| 106 | + test.test.demo_sleep = self.options.demo_sleep |
| 107 | + test.test.highlights = self.options.highlights |
| 108 | + test.test.verify_delay = self.options.verify_delay # MasterQA |
| 109 | + test.test.timeout_multiplier = self.options.timeout_multiplier |
| 110 | + test.test.use_grid = False |
| 111 | + if test.test.servername != "localhost": |
| 112 | + # Use Selenium Grid (Use --server=127.0.0.1 for localhost Grid) |
| 113 | + test.test.use_grid = True |
136 | 114 | if self.options.headless:
|
137 | 115 | self.display = Display(visible=0, size=(1920, 1200))
|
138 | 116 | self.display.start()
|
139 | 117 | self.headless_active = True
|
140 |
| - if self.options.servername == "localhost": |
141 |
| - try: |
142 |
| - self.driver = self.__select_browser(self.options.browser) |
143 |
| - test.test.driver = self.driver |
144 |
| - if "version" in self.browser_settings.keys(): |
145 |
| - version = self.browser_settings["version"] |
146 |
| - else: |
147 |
| - version = "" |
148 |
| - test.test.browser = "%s%s" % (self.options.browser, version) |
149 |
| - test.test.demo_mode = self.options.demo_mode |
150 |
| - test.test.demo_sleep = self.options.demo_sleep |
151 |
| - test.test.highlights = self.options.highlights |
152 |
| - test.test.verify_delay = self.options.verify_delay # MasterQA |
153 |
| - test.test.timeout_multiplier = self.options.timeout_multiplier |
154 |
| - except Exception as err: |
155 |
| - print("Error starting/connecting to Selenium:") |
156 |
| - print(err) |
157 |
| - os.kill(os.getpid(), 9) |
158 |
| - else: |
159 |
| - connected = False |
160 |
| - error = "(Unknown)" |
161 |
| - for i in range(1, 4): |
162 |
| - try: |
163 |
| - self.driver = self.__select_browser(self.options.browser) |
164 |
| - test.test.driver = self.driver |
165 |
| - if "version" in self.browser_settings.keys(): |
166 |
| - version = self.browser_settings["version"] |
167 |
| - else: |
168 |
| - version = "" |
169 |
| - test.test.browser = "%s%s" % ( |
170 |
| - self.options.browser, version) |
171 |
| - connected = True |
172 |
| - break |
173 |
| - except Exception as err: |
174 |
| - error = err |
175 |
| - print("Attempt #%s to connect to Selenium failed" % i) |
176 |
| - if i < 3: |
177 |
| - print("Retrying in 3 seconds...") |
178 |
| - time.sleep(3) |
179 |
| - if not connected: |
180 |
| - print("Error starting/connecting to Selenium:") |
181 |
| - print(error) |
182 |
| - print("\n\n") |
183 |
| - os.kill(os.getpid(), 9) |
| 118 | + # The driver will be received later |
| 119 | + self.driver = None |
| 120 | + test.test.driver = self.driver |
184 | 121 |
|
185 | 122 | def afterTest(self, test):
|
186 | 123 | try:
|
| 124 | + # If the browser window is still open, close it now. |
187 | 125 | self.driver.quit()
|
188 | 126 | except AttributeError:
|
189 | 127 | pass
|
190 | 128 | except:
|
191 |
| - print("No driver to quit.") |
| 129 | + pass |
192 | 130 | if self.options.headless:
|
193 | 131 | if self.headless_active:
|
194 | 132 | self.display.stop()
|
195 |
| - |
196 |
| - def __select_browser(self, browser_name): |
197 |
| - if (self.options.servername != "localhost" or |
198 |
| - self.options.browser == constants.Browser.HTML_UNIT): |
199 |
| - return webdriver.Remote("http://%s:%s/wd/hub" % ( |
200 |
| - self.options.servername, |
201 |
| - self.options.port), |
202 |
| - self.browser_settings) |
203 |
| - else: |
204 |
| - return browser_launcher.get_driver(browser_name, |
205 |
| - self.options.headless) |
0 commit comments