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