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