1 import os
2 import socket
3 import subprocess
4 import pytest
5 import tempfile
6 from glob import glob
7
9 """
10 Returns tlib's absolute path
11 """
12 file_folder = os.path.dirname(__file__)
13 return os.path.abspath(os.path.join(file_folder, os.pardir))
14
15
17 """
18 Returns absolute path of tlib's asset folder
19 """
20 return os.path.abspath(os.path.join(tlib_folder(), "asset"))
21
22
24 """
25 Returns absolute path of folder containing all modules
26 """
27 return os.path.abspath(os.path.join(tlib_folder(), "base"))
28
29
31 """
32 Returns absolute path of tlib's config folder
33 """
34 return os.path.abspath(os.path.join(tlib_folder(), "config"))
35
36
38 """
39 Returns absolute path of tlib's template folder\n
40 Template folder contains jinja templates used for generation of reports\n
41 like screenshots
42 """
43 return os.path.abspath(os.path.join(tlib_folder(), "templates"))
44
45
47 """
48 Returns path to Chrome WebDriver executable
49 """
50 if version == "latest":
51
52 path = os.path.join(tlib_asset_folder(), "selenium", "chromedriver_*.exe")
53 r = sorted(glob(path))
54 return os.path.join(tlib_asset_folder(), "selenium", r[-1])
55 else:
56 return os.path.join(tlib_asset_folder(), "selenium", "chromedriver_%s.exe" % version)
57
58
64
65
67 """
68 Returns path to IE WebDriver executable
69 """
70 return os.path.join(tlib_asset_folder(), "selenium", "IE", "2.41.0", "Win32", "IEDriverServer.exe")
71
72
74 """
75 Returns path to IE WebDriver executable
76 """
77 return os.path.join(tlib_asset_folder(), "selenium", "IE", "2.41.0", "x64", "IEDriverServer.exe")
78
79
81 """
82 Returns path to Webdriver for android
83 """
84 return os.path.join(tlib_asset_folder(), "selenium", "android-server-2.21.0.apk")
85
86
88 """
89 Returns true if IP parameter is a valid IP address.\n
90 Currently IPs in this format are valid:\n
91 X.X.X.X\n
92 X.X.X.X:PORT
93
94 @type ip: str
95 @return: bool
96 """
97
98 if ip is None:
99 return False
100
101 try:
102 (ip, port) = ip.split(":", 1)
103 except ValueError:
104
105 port = None
106
107 try:
108 socket.inet_aton(ip)
109 except socket.error:
110 return False
111
112 if port is not None:
113 try:
114 return (int(port) >= 1) and (int(port) <= 65535)
115 except ValueError:
116
117 return False
118
119 return True
120
122 """
123 Run a command and skip test if exit code is not 0
124
125 Example:
126 Run 'adb devices' and don't skip test if commands returns non-zero status
127 run_command(logger, ["adb", "devices"], fail_on_error=False)
128
129 @param logger: logger for debugging purposes
130 @type logger: logging.logger
131 @param command: Command to run
132 @type command: list
133 @param fail_on_error: When True, skip test if command returned a non-zero exit code
134 @type fail_on_error: bool
135 @rtype: list
136 @return: Returns a list with stdout and stderr output
137 """
138
139 fd_out = tempfile.NamedTemporaryFile(delete=True)
140
141 fd_err = tempfile.NamedTemporaryFile(delete=True)
142 try:
143 process = subprocess.Popen(command, stdout=fd_out, stderr=fd_err)
144 except WindowsError as e:
145 logger.error(r"Problem running command, skipping test.\n%s" % e)
146
147 if fail_on_error:
148 pytest.fail(r"Problem running command, skipping test.\n%s" % e)
149
150
151 process.communicate()
152 fd_out.seek(0)
153 fd_err.seek(0)
154 out = (fd_out.read(), fd_err.read())
155 fd_out.close()
156 fd_err.close()
157 errcode = process.returncode
158
159 if (errcode != 0) and fail_on_error:
160 logger.error(r"Program exited with code {errcode}, skipping test\n{out}".format(errcode=errcode, out=out))
161
162 pytest.fail(r"Program exited with code {errcode}, skipping test\n{out}".format(errcode=errcode, out=out))
163
164 return out
165
167 """
168 Sorts a list, and if the list has other objects inside, it will iterate over them
169 @param l: list to sort
170 @type l: list
171 @return: sorted list
172 @rtype: list
173 """
174 if type(l) is not list:
175 pytest.fail("Parameter l is not a list")
176
177 for i, s in enumerate(l):
178 if type(s) is list:
179 l[i] = sort_list(s)
180 if type(s) is dict:
181 l[i] = sort_dict(s)
182
183 l.sort()
184
185 return l
186
187
189 """
190 Sorts a dictionary, and if the list has other objects inside, it will iterate over them
191 @param d: dictionary to sort
192 @type d: dict
193 @return: sorted dictionary
194 @rtype: dict
195 """
196 if type(d) is not dict:
197 pytest.fail("Parameter d is not a dictionary")
198
199 for key in d.keys():
200 if type(d[key]) is list:
201
202 d[key] = sort_list(d[key])
203 elif type(d[key]) is dict:
204 d[key] = sort_dict(d[key])
205
206 return d
207