55from requests .exceptions import ConnectionError
66
77
8- class Brosers :
8+ class Browser :
99 """
1010 https://pypi.org/project/webdriver-manager/
1111 """
@@ -164,75 +164,18 @@ def build(self):
164164 return {"timeouts" : self .__timeouts }
165165
166166
167- class CapabilitiesBuilder :
167+ class Capabilities :
168168 """Reference: https://www.w3.org/TR/webdriver/#capabilities"""
169-
170169 def __init__ (self ) -> None :
171170 self .__desired_capabilities = {}
172- self .__result = {}
173- self .__driver_ip = "localhost"
174- self .__driver_port = "9999"
175- self .__process = None
176-
177- def __broser_factory (self ):
178- if Brosers .CHROME in self .__desired_capabilities .get ("browserName" , "" ):
179- from webdriver_manager .chrome import ChromeDriverManager
180-
181- driver_manager = ChromeDriverManager ().install ()
182- elif Brosers .FIREFOX in self .__desired_capabilities .get ("browserName" , "" ):
183- from webdriver_manager .firefox import GeckoDriverManager
184-
185- driver_manager = GeckoDriverManager ().install ()
186- elif Brosers .EDGE in self .__desired_capabilities .get ("browserName" , "" ):
187- from webdriver_manager .microsoft import EdgeChromiumDriverManager
188-
189- driver_manager = EdgeChromiumDriverManager ().install ()
190- elif Brosers .OPERA in self .__desired_capabilities .get ("browserName" , "" ):
191- from webdriver_manager .opera import OperaDriverManager
192-
193- driver_manager = OperaDriverManager ().install ()
194- elif Brosers .IE in self .__desired_capabilities .get ("browserName" , "" ):
195- from webdriver_manager .microsoft import IEDriverManager
196-
197- driver_manager = IEDriverManager ().install ()
198- else :
199- raise Exception ("Browser not supported" )
200- return driver_manager
201171
202- def __wait_server (self ):
203- MAX_RETIES = 10
204- for i in range (MAX_RETIES ):
205- try :
206- requests .get (self .driver_url )
207- break
208- except ConnectionError :
209- time .sleep (1 )
210- if i == (MAX_RETIES - 1 ):
211- self .__process .kill ()
212- self .__process .wait ()
213- raise Exception ("Driver not started" )
214172
215- @property
216- def driver_url (self ):
217- """
218- Returns the driver URL.
219- """
220- return f"http://{ self .__driver_ip } :{ self .__driver_port } "
221-
222- @property
223173 def to_dict (self ):
224174 """
225175 Returns the capabilities.
226176 """
227- return self .__result
177+ return { "desiredCapabilities" : self .__desired_capabilities }
228178
229- def driver_ip (self , ip : str ):
230- self .__driver_ip = ip
231- return self
232-
233- def driver_port (self , port : str ):
234- self .__driver_port = port
235- return self
236179
237180 def browser_name (self , name : str ):
238181 self .__desired_capabilities = {
@@ -350,14 +293,54 @@ def additional_capability(self, capabilitiy: dict):
350293 self .__desired_capabilities = {** self .__desired_capabilities , ** capabilitiy }
351294 return self
352295
353- def build (self , start_server : bool = True ):
354- """
355- Build the capabilities and start the driver process."""
356- self .__result = {"desiredCapabilities" : self .__desired_capabilities }
357296
358- if not start_server :
359- return self
297+ class Server :
298+ """Starts and stops the local server. Cannot be used with remote servers"""
299+ def __init__ (self , browser : Browser , port = 9999 ):
300+ self .__browser = browser
301+ self .__driver_port = port
302+ self .__process = None
303+ self .__start ()
304+
305+ def __broser_factory (self ):
306+ if Browser .CHROME == self .__browser :
307+ from webdriver_manager .chrome import ChromeDriverManager
308+
309+ driver_manager = ChromeDriverManager ().install ()
310+ elif Browser .FIREFOX == self .__browser :
311+ from webdriver_manager .firefox import GeckoDriverManager
312+
313+ driver_manager = GeckoDriverManager ().install ()
314+ elif Browser .EDGE == self .__browser :
315+ from webdriver_manager .microsoft import EdgeChromiumDriverManager
316+
317+ driver_manager = EdgeChromiumDriverManager ().install ()
318+ elif Browser .OPERA == self .__browser :
319+ from webdriver_manager .opera import OperaDriverManager
320+
321+ driver_manager = OperaDriverManager ().install ()
322+ elif Browser .IE == self .__browser :
323+ from webdriver_manager .microsoft import IEDriverManager
324+
325+ driver_manager = IEDriverManager ().install ()
326+ else :
327+ raise Exception ("Browser not supported" )
328+ return driver_manager
360329
330+ def __wait_server (self ):
331+ MAX_RETIES = 10
332+ for i in range (MAX_RETIES ):
333+ try :
334+ requests .get (self .url )
335+ break
336+ except ConnectionError :
337+ time .sleep (1 )
338+ if i == (MAX_RETIES - 1 ):
339+ self .__process .kill ()
340+ self .__process .wait ()
341+ raise Exception ("Driver not started" )
342+
343+ def __start (self ):
361344 driver_manager = self .__broser_factory ()
362345
363346 self .__process = subprocess .Popen (
@@ -367,7 +350,16 @@ def build(self, start_server: bool = True):
367350 )
368351
369352 self .__wait_server ()
370- return self
353+
354+
355+ @property
356+ def url (self ):
357+ """
358+ Returns the driver URL.
359+ """
360+ return f"http://localhost:{ self .__driver_port } "
361+
362+
371363
372364 def dispose (self ):
373365 """
0 commit comments