11import os
2+ import sys
23from collections import namedtuple
34from itertools import chain
45
56import pytest
67
8+ try :
9+ from typing import Text , Optional , Generator , Iterable
10+ except ImportError :
11+ pass
712
8- class Platform (namedtuple ('Platform' , 'name version browsers extra' )):
13+
14+ class Platform (namedtuple ("Platform" , "name version browsers extra" )):
915 def platform_capabilities (self ):
1016 # type: () -> Optional[Iterable[dict]]
1117 """
@@ -14,10 +20,7 @@ def platform_capabilities(self):
1420 if not self .is_appium_based :
1521 return
1622
17- caps = {
18- 'platformName' : self .name ,
19- 'platformVersion' : self .version
20- }
23+ caps = {"platformName" : self .name , "platformVersion" : self .version }
2124 if isinstance (self .extra , dict ):
2225 caps .update (self .extra )
2326 return caps
@@ -47,76 +50,102 @@ def get_browser_capabilities(self, browser_name, headless=False):
4750 from selenium .webdriver import ChromeOptions
4851
4952 options = None
50- if ' firefox' == browser_name :
53+ if " firefox" == browser_name :
5154 options = FirefoxOptions ()
52- elif ' chrome' == browser_name :
55+ elif " chrome" == browser_name :
5356 options = ChromeOptions ()
54- options .add_argument (' disable-infobars' )
57+ options .add_argument (" disable-infobars" )
5558 if options and headless :
5659 options .headless = True
5760
5861 # huck for preventing overwriting 'platform' value in desired_capabilities by chrome options
5962 browser_caps = options .to_capabilities () if options else {}
60- browser_name , browser_version = [b for b in self .browsers if browser_name .lower () == b [0 ].lower ()][0 ]
61- browser_caps .update ({
62- 'browserName' : browser_name ,
63- 'version' : browser_version ,
64- 'platform' : self .full_name
65- })
63+ browser_name , browser_version = [
64+ b for b in self .browsers if browser_name .lower () == b [0 ].lower ()
65+ ][0 ]
66+ browser_caps .update (
67+ {
68+ "browserName" : browser_name ,
69+ "version" : browser_version ,
70+ "platform" : self .full_name ,
71+ }
72+ )
6673 if isinstance (self .extra , dict ):
6774 browser_caps .update (self .extra )
6875 return browser_caps
6976
7077 @property
7178 def is_appium_based (self ):
72- if self .extra and (' appiumVersion' in self .extra or ' deviceName' in self .extra ):
79+ if self .extra and (" appiumVersion" in self .extra or " deviceName" in self .extra ):
7380 return True
7481 return False
7582
7683 @property
7784 def full_name (self ):
7885 if self .version :
79- return ' {} {}' .format (self .name , self .version )
86+ return " {} {}" .format (self .name , self .version )
8087 return self .name
8188
8289
83- COMMON_BROWSERS = [('chrome' , 'latest' ), ('firefox' , 'latest' )]
84- SUPPORTED_PLATFORMS = [Platform (name = 'Windows' , version = '10' ,
85- browsers = COMMON_BROWSERS + [('internet explorer' , 'latest' ),
86- ('MicrosoftEdge' , 'latest' )], extra = None ),
87- Platform (name = 'Linux' , version = '' , browsers = COMMON_BROWSERS , extra = None ),
88- Platform (name = 'macOS' , version = '10.13' , browsers = COMMON_BROWSERS + [('safari' , 'latest' )],
89- extra = None ),
90-
91- Platform (name = 'iPhone' , version = '10.0' , browsers = [], extra = {
92- "appiumVersion" : "1.7.2" ,
93- "deviceName" : "Iphone Emulator" ,
94- "deviceOrientation" : "portrait" ,
95- "browserName" : "Safari" ,
96- }), Platform (name = 'Android' , version = '6.0' , browsers = [], extra = {
97- "appiumVersion" : "1.9.1" ,
98- "deviceName" : "Android Emulator" ,
99- "deviceOrientation" : "portrait" ,
100- "browserName" : "Chrome" ,
101- "newCommandTimeout" : 60 * 5
102- }),
103- # Platform(name='Android', version='7.0', browsers=[], extra={
104- # "appiumVersion": "1.9.1",
105- # "deviceName": "Android Emulator",
106- # "deviceOrientation": "portrait",
107- # "browserName": "Chrome",
108- # "newCommandTimeout": 60 * 5
109- # }),
110- # Platform(name='Android', version='8.0', browsers=[], extra={
111- # "appiumVersion": "1.9.1",
112- # "deviceName": "Samsung S9+",
113- # "deviceOrientation": "portrait",
114- # "browserName": "Chrome",
115- # "newCommandTimeout": 60 * 5
116- # })
117- ]
118- SUPPORTED_PLATFORMS_DICT = {platform .full_name : platform for platform in SUPPORTED_PLATFORMS }
119- SUPPORTED_BROWSERS = set (chain (* [platform .browsers for platform in SUPPORTED_PLATFORMS ]))
90+ COMMON_BROWSERS = [("chrome" , "latest" ), ("firefox" , "latest" )]
91+ SUPPORTED_PLATFORMS = [
92+ Platform (
93+ name = "Windows" ,
94+ version = "10" ,
95+ browsers = COMMON_BROWSERS
96+ + [("internet explorer" , "latest" ), ("MicrosoftEdge" , "latest" )],
97+ extra = None ,
98+ ),
99+ Platform (name = "Linux" , version = "" , browsers = COMMON_BROWSERS , extra = None ),
100+ Platform (
101+ name = "macOS" ,
102+ version = "10.13" ,
103+ browsers = COMMON_BROWSERS + [("safari" , "latest" )],
104+ extra = None ,
105+ ),
106+ Platform (
107+ name = "iPhone" ,
108+ version = "10.0" ,
109+ browsers = [],
110+ extra = {
111+ "appiumVersion" : "1.7.2" ,
112+ "deviceName" : "Iphone Emulator" ,
113+ "deviceOrientation" : "portrait" ,
114+ "browserName" : "Safari" ,
115+ },
116+ ),
117+ Platform (
118+ name = "Android" ,
119+ version = "9" ,
120+ browsers = [],
121+ extra = {
122+ "appiumVersion" : "1.9.1" ,
123+ "deviceName" : "Samsung S9+" ,
124+ "deviceOrientation" : "portrait" ,
125+ "browserName" : "Chrome" ,
126+ "newCommandTimeout" : 60 * 5 ,
127+ },
128+ ), # Platform(name='Android', version='7.0', browsers=[], extra={
129+ # "appiumVersion": "1.9.1",
130+ # "deviceName": "Android Emulator",
131+ # "deviceOrientation": "portrait",
132+ # "browserName": "Chrome",
133+ # "newCommandTimeout": 60 * 5
134+ # }),
135+ # Platform(name='Android', version='8.0', browsers=[], extra={
136+ # "appiumVersion": "1.9.1",
137+ # "deviceName": "Samsung S9+",
138+ # "deviceOrientation": "portrait",
139+ # "browserName": "Chrome",
140+ # "newCommandTimeout": 60 * 5
141+ # })
142+ ]
143+ SUPPORTED_PLATFORMS_DICT = {
144+ platform .full_name : platform for platform in SUPPORTED_PLATFORMS
145+ }
146+ SUPPORTED_BROWSERS = set (
147+ chain (* [platform .browsers for platform in SUPPORTED_PLATFORMS ])
148+ )
120149
121150
122151def pytest_addoption (parser ):
@@ -129,9 +158,9 @@ def pytest_addoption(parser):
129158def _get_capabilities (platform_name = None , browser_name = None , headless = False ):
130159 if platform_name is None :
131160 sys2platform_name = {
132- ' linux' : ' Linux' ,
133- ' darwin' : ' macOS 10.13' ,
134- ' win32' : ' Windows 10'
161+ " linux" : " Linux" ,
162+ " darwin" : " macOS 10.13" ,
163+ " win32" : " Windows 10" ,
135164 }
136165 platform_name = sys2platform_name [sys .platform ]
137166 platform = SUPPORTED_PLATFORMS_DICT [platform_name ]
@@ -146,56 +175,66 @@ def _get_capabilities(platform_name=None, browser_name=None, headless=False):
146175
147176def _setup_env_vars_for_session ():
148177 import uuid
178+
149179 # setup environment variables once per test run if not settled up
150180 # needed for multi thread run
151- os .environ ['APPLITOOLS_BATCH_ID' ] = os .environ .get ('APPLITOOLS_BATCH_ID' , str (uuid .uuid4 ()))
181+ os .environ ["APPLITOOLS_BATCH_ID" ] = os .environ .get (
182+ "APPLITOOLS_BATCH_ID" , str (uuid .uuid4 ())
183+ )
152184
153185
154186def pytest_generate_tests (metafunc ):
155- platform_name = metafunc .config .getoption (' platform' )
156- browser_name = metafunc .config .getoption (' browser' )
157- headless = metafunc .config .getoption (' headless' )
187+ platform_name = metafunc .config .getoption (" platform" )
188+ browser_name = metafunc .config .getoption (" browser" )
189+ headless = metafunc .config .getoption (" headless" )
158190
159191 _setup_env_vars_for_session ()
160192
161193 if platform_name or browser_name :
162194 desired_caps = _get_capabilities (platform_name , browser_name , headless )
163195 else :
164196 desired_caps = []
165- platforms = getattr (metafunc .function , ' platform' , [])
197+ platforms = getattr (metafunc .function , " platform" , [])
166198 if platforms :
167199 platforms = platforms .args
168200
169201 for platform in SUPPORTED_PLATFORMS :
170202 if platform .name not in platforms :
171203 continue
172- desired_caps .extend (_get_capabilities (platform .full_name , headless = headless ))
204+ desired_caps .extend (
205+ _get_capabilities (platform .full_name , headless = headless )
206+ )
173207
174208 # update capabilities from capabilities marker
175- if hasattr (metafunc , ' function' ):
176- func_capabilities = getattr (metafunc .function , ' capabilities' , {})
209+ if hasattr (metafunc , " function" ):
210+ func_capabilities = getattr (metafunc .function , " capabilities" , {})
177211 if func_capabilities :
178212 for caps in desired_caps :
179213 caps .update (func_capabilities .kwargs )
180214
181215 # generate combinations of driver options before run
182- if 'driver' in metafunc .fixturenames :
183- metafunc .parametrize ('browser_config' , desired_caps , ids = _generate_param_ids (desired_caps ), scope = 'function' )
216+ if "driver" in metafunc .fixturenames :
217+ metafunc .parametrize (
218+ "browser_config" ,
219+ desired_caps ,
220+ ids = _generate_param_ids (desired_caps ),
221+ scope = "function" ,
222+ )
184223
185224
186225def _generate_param_ids (desired_caps ):
187226 results = []
188227 for caps in desired_caps :
189- platform = caps .get (' platform' )
190- browser = caps .get (' browserName' , '' )
228+ platform = caps .get (" platform" )
229+ browser = caps .get (" browserName" , "" )
191230 if platform :
192- browser_version = caps .get (' version' , '' )
231+ browser_version = caps .get (" version" , "" )
193232 browser += str (browser_version )
194233 else :
195- platform = caps .get (' platformName' )
196- platform_version = caps .get (' version' , '' )
234+ platform = caps .get (" platformName" )
235+ platform_version = caps .get (" version" , "" )
197236 platform += platform_version
198- results .append (' platform: {}, browser: {}' .format (platform , browser ))
237+ results .append (" platform: {}, browser: {}" .format (platform , browser ))
199238 return results
200239
201240
0 commit comments