Showing
1 changed file
with
570 additions
and
0 deletions
publicbid_common.robot
0 → 100644
1 | +*** Settings *** | ||
2 | + | ||
3 | +Library Selenium2Library | ||
4 | +Library String | ||
5 | +Library Collections | ||
6 | +Library playtender_service.py | ||
7 | +Resource playtender_variables.robot | ||
8 | + | ||
9 | +*** Variables *** | ||
10 | + | ||
11 | +${broker} = playtender | ||
12 | +${broker_username} = | ||
13 | +${broker_baseurl} = | ||
14 | +${broker_browser} = | ||
15 | +${broker_language_code} = uk | ||
16 | +${test_role} = | ||
17 | +${is_test_role_owner} = | ||
18 | + | ||
19 | +@{browser_default_size} = ${1200} ${1000} | ||
20 | +@{browser_default_position} = ${0} ${0} | ||
21 | + | ||
22 | +${popup_transaction_time} = 600ms | ||
23 | + | ||
24 | +*** Keywords *** | ||
25 | + | ||
26 | +init environment | ||
27 | + [Arguments] ${username} | ||
28 | + [Documentation] ініціює необхідні глобальні змінні | ||
29 | + | ||
30 | + set global variable ${broker_username} ${username} | ||
31 | + set global variable ${broker_baseurl} ${BROKERS['${broker}'].basepage} | ||
32 | + set global variable ${broker_browser} ${USERS.users['${broker_username}'].browser} | ||
33 | + set global variable ${test_role} ${ROLE} | ||
34 | + ${is_test_role_owner} = set variable if '${test_role}' == 'tender_owner' ${True} ${False} | ||
35 | + set global variable ${is_test_role_owner} ${is_test_role_owner} | ||
36 | + | ||
37 | + register keyword to run on failure __private__handle_keyword_failure | ||
38 | + | ||
39 | +set site language by code | ||
40 | + [Arguments] ${language_code} | ||
41 | + [Documentation] змінити мову сайту | ||
42 | + | ||
43 | + ${is_equal} = __private__check_site_language_code ${language_code} | ||
44 | + run keyword if ${is_equal} == ${False} __private__open_site_language_dropdown_and_select_language_by_code ${language_code} | ||
45 | + | ||
46 | +login to site | ||
47 | + [Arguments] ${user_data} | ||
48 | + [Documentation] авторизувати вказаного користувача, масив повинен містити login, password | ||
49 | + | ||
50 | +# click visible element ${login_popup_open_locator} | ||
51 | +# wait until popup is visible | ||
52 | + open popup by btn locator ${login_popup_open_locator} | ||
53 | + input text to visible input ${login_popup_login_input_locator} ${user_data['login']} | ||
54 | + input text to visible input ${login_popup_password_input_locator} ${user_data['password']} | ||
55 | + click visible element ${login_popup_submit_btn_locator} | ||
56 | + wait until page contains element ${user_logged_checker_element_locator} 30s User can not login | ||
57 | + | ||
58 | +fill item form in opened popup | ||
59 | + [Arguments] ${data} | ||
60 | + [Documentation] заповнює відкриту форму згідно вказаних даних | ||
61 | + | ||
62 | + ${description} = get from dictionary by keys ${data} description | ||
63 | + run keyword if condition is not none ${description} input text to visible input ${item_form_popup_description_input_locator} ${description} | ||
64 | + ${description_ru} = get from dictionary by keys ${data} description_ru | ||
65 | + run keyword if condition is not none ${description_ru} input text to exist visible input ${item_form_popup_description_ru_input_locator} ${description_ru} | ||
66 | + ${description_en} = get from dictionary by keys ${data} description_en | ||
67 | + run keyword if condition is not none ${description_en} input text to exist visible input ${item_form_popup_description_en_input_locator} ${description_en} | ||
68 | + ${quantity} = get from dictionary by keys ${data} quantity | ||
69 | + run keyword and ignore error run keyword if condition is not none ${quantity} input number3 to visible input ${item_form_popup_quantity_input_locator} ${quantity} | ||
70 | + ${unit} = get from dictionary by keys ${data} unit name | ||
71 | + run keyword if condition is not none ${unit} select from visible list by label ${item_form_popup_unit_input_locator} ${unit} | ||
72 | + ${classification} = get from dictionary by keys ${data} classification | ||
73 | + run keyword if condition is not none ${classification} run keyword if '${mode}' not in 'framework_selection' select classification by code attributes ${item_form_popup_classification_edit_btn_locator} ${classification} | ||
74 | + ${additional_classifications} = get from dictionary by keys ${data} additionalClassifications | ||
75 | + run keyword if condition is not none ${additional_classifications} run keyword if '${mode}' not in 'framework_selection' select classification by array of code attributes ${item_form_popup_additional_classification_edit_btn_locator} ${additional_classifications} | ||
76 | + | ||
77 | +get value by locator on opened page | ||
78 | + [Arguments] ${locator} ${type}=${None} | ||
79 | + [Documentation] отримує значення з відповідного локатору і якщо потрібно перетворює до відповідного типу | ||
80 | + | ||
81 | + capture page screenshot | ||
82 | + Run Keyword And Ignore Error __private__set_element_visible_in_browser_area ${locator} | ||
83 | + ${value} = get value by locator ${locator} | ||
84 | + ${value} = convert to specified type ${value} ${type} | ||
85 | + [Return] ${value} | ||
86 | + | ||
87 | +get field_value by field_name on opened page | ||
88 | + [Arguments] ${field_name} | ||
89 | + [Documentation] повертає інформацію з відкритої сторінки, користуючись назвою поля ${field_name}. | ||
90 | + ... для назви поля повинен бути вказаний відповідний локатор (!вкінці змінної повинно бути слово locator), | ||
91 | + ... і якщо потрібно тип поля окремою змінною (!locator замінюється на type) зі значенням [string,integer,float] | ||
92 | + | ||
93 | + ${field_name_prepared} = replace string ${field_name} .[ _ | ||
94 | + ${field_name_prepared} = replace string ${field_name_prepared} ]. _ | ||
95 | + ${field_name_prepared} = replace string ${field_name_prepared} . _ | ||
96 | + ${field_name_prepared} = replace string ${field_name_prepared} [ _ | ||
97 | + ${field_name_prepared} = replace string ${field_name_prepared} ] _ | ||
98 | + ${field_locator_variable_name} = set variable ${field_name_prepared}_locator | ||
99 | + ${field_type_variable_name} = set variable ${field_name_prepared}_type | ||
100 | + ${field_type_variable_exists} = run keyword and return status variable should exist ${${field_type_variable_name}} | ||
101 | + ${field_type} = set variable if ${field_type_variable_exists} == ${True} ${${field_type_variable_name}} ${None} | ||
102 | + ${field_locator} = set variable ${${field_locator_variable_name}} | ||
103 | + ${field_value} = get value by locator on opened page ${field_locator} ${field_type} | ||
104 | + [Return] ${field_value} | ||
105 | + | ||
106 | +######################################################################################################################## | ||
107 | +#################################################### COMMON HELPERS #################################################### | ||
108 | +######################################################################################################################## | ||
109 | + | ||
110 | +click visible element | ||
111 | + [Arguments] ${locator} | ||
112 | + [Documentation] перевіряє видимість і клікає по елементу | ||
113 | + | ||
114 | + __private__set_element_visible_in_browser_area ${locator} | ||
115 | + click element ${locator} | ||
116 | + | ||
117 | +click visible element and wait until page contains element | ||
118 | + [Arguments] ${locator} ${checker_element_locator} ${waiting_timeout}=30s ${waiting_error}=Another element was not shown after clicking on specific element | ||
119 | + [Documentation] перевіряє видимість і клікає по елементу | ||
120 | + | ||
121 | + click visible element ${locator} | ||
122 | + wait until page contains element ${checker_element_locator} ${waiting_timeout} ${waiting_error} | ||
123 | + | ||
124 | +click removing form item and wait success result | ||
125 | + [Arguments] ${locator} | ||
126 | + [Documentation] натискає кнопку видалення, очікує успішне повідомлення і закриває повідомлення | ||
127 | + | ||
128 | + click visible element ${locator} | ||
129 | + wait until alert is visible | ||
130 | + click visible element ${alert_confirm_btn_locator} | ||
131 | + wait until page does not contain element ${alert_confirm_btn_locator} | ||
132 | + | ||
133 | +click removing form feature and wait success result | ||
134 | + [Arguments] ${locator} | ||
135 | + [Documentation] натискає кнопку видалення нецінового критерію, очікує успішне повідомлення і закриває повідомлення, а потім закриває вікно нецінового критерію | ||
136 | + | ||
137 | + js click element ${locator} | ||
138 | + wait until alert is visible | ||
139 | + click visible element ${alert_confirm_btn_locator} | ||
140 | + wait until page does not contain element ${alert_confirm_btn_locator} | ||
141 | + submit current visible popup | ||
142 | + | ||
143 | +input text to visible input | ||
144 | + [Arguments] ${locator} ${text} | ||
145 | + [Documentation] перевіряє чи елемент видимий у вікні браузера, після чого заповнює його | ||
146 | + | ||
147 | + __private__set_element_visible_in_browser_area ${locator} | ||
148 | + input text ${locator} ${text} | ||
149 | + | ||
150 | +input text to visible input and press enter | ||
151 | + [Arguments] ${locator} ${text} | ||
152 | + [Documentation] перевіряє чи елемент видимий у вікні браузера, після чого заповнює його і імітує натиснення кнопки Enter | ||
153 | + | ||
154 | + input text to visible input ${locator} ${text} | ||
155 | + press key ${locator} \\13 | ||
156 | + | ||
157 | +input text to exist visible input | ||
158 | + [Arguments] ${locator} ${text} | ||
159 | + [Documentation] перевіряє чи елемент існує і видимий у вікні браузера, після чого заповнює його | ||
160 | + | ||
161 | + ${input_exists} = get is element exist ${locator} | ||
162 | + run keyword if ${input_exists} == ${True} input text to visible input ${locator} ${text} | ||
163 | + ... ELSE __private__log input ${locator} does not exist | ||
164 | + | ||
165 | +input date to input | ||
166 | + [Arguments] ${locator} ${isodate} ${format}=%d.%m.%Y | ||
167 | + | ||
168 | + ${date} = isodate format ${isodate} ${format} | ||
169 | + input text to hidden input ${locator} ${date} | ||
170 | + | ||
171 | +input datetime to input | ||
172 | + [Arguments] ${locator} ${isodate} ${format}=%d.%m.%Y %H:%M | ||
173 | + | ||
174 | + input date to input ${locator} ${isodate} ${format} | ||
175 | + | ||
176 | +input date to visible input | ||
177 | + [Arguments] ${locator} ${isodate} ${format}=%d.%m.%Y | ||
178 | + [Documentation] перевіряє чи елемент видимий у вікні браузера, після чого заповнює його відформатовоною датою | ||
179 | + | ||
180 | + __private__set_element_visible_in_browser_area ${locator} | ||
181 | + input date to input ${locator} ${isodate} ${format} | ||
182 | + | ||
183 | +input datetime to visible input | ||
184 | + [Arguments] ${locator} ${isodate} ${format}=%d.%m.%Y %H:%M | ||
185 | + [Documentation] перевіряє чи елемент видимий у вікні браузера, після чого заповнює його відформатовоною датою | ||
186 | + | ||
187 | + input date to visible input ${locator} ${isodate} ${format} | ||
188 | + | ||
189 | +input datetime to exist visible input | ||
190 | + [Arguments] ${locator} ${isodate} ${format}=%d.%m.%Y %H:%M | ||
191 | + [Documentation] перевіряє чи елемент видимий у вікні браузера, після чого заповнює його відформатовоною датою | ||
192 | + | ||
193 | + ${input_exists} = get is element exist ${locator} | ||
194 | + run keyword if ${input_exists} == ${True} input date to visible input ${locator} ${isodate} ${format} | ||
195 | + ... ELSE __private__log input ${locator} does not exist | ||
196 | + | ||
197 | +input number to visible input | ||
198 | + [Arguments] ${locator} ${number} | ||
199 | + [Documentation] робить елемент видимим, число перетворює в строку і записує в поле | ||
200 | + | ||
201 | + ${number} = convert float to string ${number} | ||
202 | + input text to visible input ${locator} ${number} | ||
203 | + | ||
204 | +input number3 to visible input | ||
205 | + [Arguments] ${locator} ${number} | ||
206 | + [Documentation] робить елемент видимим, число перетворює в строку і записує в поле | ||
207 | + | ||
208 | + ${number} = convert_float_to_string_3f ${number} | ||
209 | + input text to visible input ${locator} ${number} | ||
210 | + | ||
211 | +input number to exist visible input | ||
212 | + [Arguments] ${locator} ${text} | ||
213 | + [Documentation] перевіряє чи елемент існує і видимий у вікні браузера, після чого заповнює його | ||
214 | + | ||
215 | + ${input_exists} = get is element exist ${locator} | ||
216 | + run keyword if ${input_exists} == ${True} input number to visible input ${locator} ${text} | ||
217 | + ... ELSE __private__log input ${locator} does not exist | ||
218 | + | ||
219 | +input month.year of date to visible input | ||
220 | + [Arguments] ${locator} ${isodate} | ||
221 | + [Documentation] робить елемент видимим, витягує місяць.рік і записує в поле | ||
222 | + | ||
223 | + ${value} = isodate format ${isodate} %m.%Y | ||
224 | + input text to visible input ${locator} ${value} | ||
225 | + | ||
226 | +input to search form and wait results | ||
227 | + [Arguments] ${query_input_locator} ${query} ${result_locator_tpl} | ||
228 | + [Documentation] заповнює форму і очікує результат по шаблону селектора | ||
229 | + | ||
230 | + input text to visible input and press enter ${query_input_locator} ${query} | ||
231 | + ${result_locator} = replace string ${result_locator_tpl} %query% ${query} | ||
232 | + wait until page contains search ${result_locator} | ||
233 | +# wait until page contains element with reloading ${result_locator} | ||
234 | + | ||
235 | +select from visible list by value | ||
236 | + [Arguments] ${locator} ${value} | ||
237 | + [Documentation] робить елемент видимим, після чого заповнює його | ||
238 | + | ||
239 | + __private__set_element_visible_in_browser_area ${locator} | ||
240 | + select from list by value ${locator} ${value} | ||
241 | + trigger input change event ${locator} | ||
242 | + | ||
243 | +select from visible list by label | ||
244 | + [Arguments] ${locator} ${label} | ||
245 | + [Documentation] робить елемент видимим, після чого заповнює його | ||
246 | + | ||
247 | + __private__set_element_visible_in_browser_area ${locator} | ||
248 | + select from hidden list by label ${locator} ${label} | ||
249 | + trigger input change event ${locator} | ||
250 | + | ||
251 | +select from visible list by year of date | ||
252 | + [Arguments] ${locator} ${isodate} | ||
253 | + [Documentation] робить елемент видимим, витягує рік і обирає в списку | ||
254 | + | ||
255 | + ${value} = isodate format ${isodate} %Y | ||
256 | + select from visible list by value ${locator} ${value} | ||
257 | + | ||
258 | +select classification by code attributes | ||
259 | + [Arguments] ${btn_locator} ${code_attributes} | ||
260 | + [Documentation] натискає кнопку відкриття попапу класифікатора і чекає поки він відмалюється, шукає відповідний код і закриває попап | ||
261 | + | ||
262 | + ${code_attributes_array} = create list ${code_attributes} | ||
263 | + select classification by array of code attributes ${btn_locator} ${code_attributes_array} | ||
264 | + | ||
265 | +select classification by array of code attributes | ||
266 | + [Arguments] ${btn_locator} ${code_attributes_array} ${include_schemes}=${None} ${exclude_schemes}=${None} | ||
267 | + [Documentation] натискає кнопку відкриття попапу класифікатора і чекає поки він відмалюється, шукає відповідні коди і закриває попап | ||
268 | + | ||
269 | + ${include_schemes_is_none}= get variable is none ${include_schemes} | ||
270 | + ${exclude_schemes_is_none}= get variable is none ${exclude_schemes} | ||
271 | + | ||
272 | + open popup by btn locator ${btn_locator} ${classification_popup_opened_content_locator} | ||
273 | + Capture Page Screenshot | ||
274 | + :FOR ${code_attributes} IN @{code_attributes_array} | ||
275 | + \ ${disabled} = set variable if ${include_schemes_is_none} == ${False} and '${code_attributes['scheme']}' not in ${include_schemes} ${True} ${False} | ||
276 | + \ Capture Page Screenshot | ||
277 | + \ ${disabled} = set variable if ${exclude_schemes_is_none} == ${False} and '${code_attributes['scheme']}' in ${exclude_schemes} ${True} ${disabled} | ||
278 | + \ Capture Page Screenshot | ||
279 | + \ run keyword if ${disabled} == ${False} __private__select_classification_code_in_opened_popup ${code_attributes['id']} ${code_attributes['scheme']} | ||
280 | + \ Capture Page Screenshot | ||
281 | + Capture Page Screenshot | ||
282 | + submit current visible popup | ||
283 | + | ||
284 | +open site page and wait content element | ||
285 | + [Arguments] ${url} ${waiting_timeout}=5s ${waiting_error}=Opening page fails | ||
286 | + [Documentation] переходить по посиланню і чекає контенту сторінки | ||
287 | + | ||
288 | + go to ${url} | ||
289 | + wait until page contains element ${page_content_locator} ${waiting_timeout} ${waiting_error} | ||
290 | + | ||
291 | +open page and wait element by locator | ||
292 | + [Arguments] ${url} ${waiting_element_locator} ${waiting_timeout}=5s ${waiting_error}=Opened page does not have specified element locator | ||
293 | + [Documentation] переходить по посиланню і чекає поки елемент не буде знайдений на сторінці | ||
294 | + | ||
295 | + go to ${url} | ||
296 | + wait until page contains element ${waiting_element_locator} ${waiting_timeout} ${waiting_error} | ||
297 | + | ||
298 | +open popup by btn locator | ||
299 | + [Arguments] ${btn_locator} ${popup_locator}=${None} | ||
300 | + [Documentation] натискає кнопку відкриття попапу і чекає поки він відмалюється | ||
301 | + | ||
302 | + click visible element ${btn_locator} | ||
303 | + ${result} = run keyword and return status wait until popup is visible ${popup_locator} | ||
304 | + run keyword if ${result} == ${False} js click element ${btn_locator} | ||
305 | + run keyword if ${result} == ${False} wait until popup is visible ${popup_locator} | ||
306 | + | ||
307 | +submit current visible popup | ||
308 | + [Documentation] натискає кнопку сабміту в поточному попапі і чекає поки він закриється | ||
309 | + | ||
310 | + ${popup_last_id} = __private__get_element_attribute ${popup_opened_last_locator} id | ||
311 | + click visible element ${popup_opened_last_submit_btn_locator} | ||
312 | + sleep ${popup_transaction_time} | ||
313 | + ${popup_last_locator} = set variable id=${popup_last_id} | ||
314 | + ${popup_exists} = get is element exist ${popup_last_locator} | ||
315 | + return from keyword if ${popup_exists} == ${False} | ||
316 | + wait until page does not contain element ${popup_last_locator} 30s Current popup was not hidden | ||
317 | + | ||
318 | +submit form and check result | ||
319 | + [Arguments] ${submit_btn_locator} ${wait_msg}=${None} ${wait_element_locator}=${None} ${sign_is}=${None} | ||
320 | + [Documentation] сабмітить форму і чекає повідомлення (якщо задано) + елемент (якщо задано) | ||
321 | + | ||
322 | + click visible element ${submit_btn_locator} | ||
323 | + run keyword and ignore error run keyword if condition is not none ${wait_msg} wait until element is visible ${tender_cpv_form_submit_success_msg} 5 | ||
324 | +# run keyword and ignore error Wait Until Page Contains ${tender_cpv_form_submit_success_msg} 60 | ||
325 | + Capture Page Screenshot | ||
326 | + run keyword and ignore error execute javascript ${tender_cpv_js_submit_btn_locator} | ||
327 | + Capture Page Screenshot | ||
328 | + run keyword and ignore error run keyword if '${mode}' in 'reporting' close sync alert ${tender_form_submit_reporting_success_msg} | ||
329 | + run keyword and ignore error run keyword if condition is not none ${wait_msg} Wait Until Page Contains ${wait_msg} 60 | ||
330 | + run keyword and ignore error run keyword if condition is not none ${wait_msg} wait until alert is visible ${wait_msg} | ||
331 | + run keyword and ignore error run keyword if condition is not none ${wait_msg} close current visible alert | ||
332 | + | ||
333 | +#cat проба | ||
334 | + run keyword and ignore error run keyword if not ${sign_is} Load Sign | ||
335 | + run keyword and ignore error close current visible alert | ||
336 | + run keyword and ignore error run keyword if condition is not none ${wait_element_locator} wait until element is visible ${wait_element_locator} 60 | ||
337 | + run keyword and ignore error run keyword if condition is not none ${wait_element_locator} wait until page contains element ${wait_element_locator} 60s Element was not shown after form submitting | ||
338 | + | ||
339 | +close sync alert | ||
340 | + [Arguments] ${wait_msg}=${None} | ||
341 | + [Documentation] чекає поки попап не стане видимим на сторінці | ||
342 | + | ||
343 | + ${status}= run keyword if '${mode}' in 'openeu open_competitive_dialogue openua_defense open_esco open_framework' Run Keyword And Return Status Page Should Contain ${wait_msg} | ||
344 | + run keyword and ignore error run keyword if ${status} and '${mode}' in 'openeu open_competitive_dialogue openua_defense open_esco open_framework' Wait Until Page Contains ${wait_msg} 60 | ||
345 | + run keyword and ignore error run keyword if ${status} and '${mode}' in 'openeu open_competitive_dialogue openua_defense open_esco open_framework' wait until alert is visible ${wait_msg} | ||
346 | + run keyword and ignore error run keyword if ${status} and '${mode}' in 'openeu open_competitive_dialogue openua_defense open_esco open_framework' close current visible alert | ||
347 | + | ||
348 | + | ||
349 | +wait until popup is visible | ||
350 | + [Arguments] ${popup_locator}=${None} ${waiting_timeout}=30s ${waiting_error}=Opened popup still not visible | ||
351 | + [Documentation] чекає поки попап не стане видимим на сторінці | ||
352 | + | ||
353 | + ${popup_locator_is_none} = get variable is none ${popup_locator} | ||
354 | + ${popup_locator} = set variable if ${popup_locator_is_none} == ${False} ${popup_locator} ${popup_opened_content_locator} | ||
355 | + ${status} = run keyword and return status wait until element is visible ${popup_locator} ${waiting_timeout} ${waiting_error} | ||
356 | + # trying to prevent "StaleElementReferenceException: Message: stale element reference: element is not attached to the page document" error | ||
357 | + run keyword if ${status} == ${False} sleep 1 | ||
358 | + run keyword if ${status} == ${False} wait until element is visible ${popup_locator} 1 ${waiting_error} | ||
359 | + | ||
360 | +wait until alert is visible | ||
361 | + [Arguments] ${message}=${None} | ||
362 | + [Documentation] чекає поки не з'явиться алерт | ||
363 | + | ||
364 | + ${message_is_none} = get variable is none ${message} | ||
365 | + ${message} = convert to string ${message} | ||
366 | + ${alert_message_locator} = replace string ${alert_message_contains_text_locator_tpl} %text% ${message} | ||
367 | + run keyword if ${message_is_none} == ${True} wait until page contains element ${alert_opened_locator} 60s Alert was not shown | ||
368 | + run keyword if ${message_is_none} == ${False} wait until page contains element ${alert_message_locator} 60s Alert was not shown | ||
369 | + | ||
370 | + # wait for ending animation | ||
371 | + sleep 500ms | ||
372 | + | ||
373 | +close current visible alert | ||
374 | + [Documentation] закриває поточний alert | ||
375 | + | ||
376 | + click visible element ${alert_opened_close_btn_locator} | ||
377 | + | ||
378 | + # wait for ending animation | ||
379 | + sleep 500ms | ||
380 | + | ||
381 | +wait until page contains search | ||
382 | + [Arguments] ${locator} ${retry}=5m ${retry_interval}=2s | ||
383 | + [Documentation] чекає поки елемент не з'явиться на сторінці з перезапуском пошуку | ||
384 | + | ||
385 | + ${result} = get is element exist ${locator} | ||
386 | + capture page screenshot | ||
387 | + run keyword if ${result} == ${False} wait until keyword succeeds ${retry} ${retry_interval} reload page and fail if element does not exist on search ${locator} | ||
388 | + | ||
389 | +wait until page contains element with reloading | ||
390 | + [Arguments] ${locator} ${retry}=5m ${retry_interval}=2s | ||
391 | + [Documentation] чекає поки елемент не з'явиться на сторінці з перезавантаженням сторінки | ||
392 | + | ||
393 | + ${result} = get is element exist ${locator} | ||
394 | + run keyword if ${result} == ${False} wait until keyword succeeds ${retry} ${retry_interval} reload page and fail if element does not exist ${locator} | ||
395 | + | ||
396 | +wait until page does not contain element with reloading | ||
397 | + [Arguments] ${locator} ${retry}=5m ${retry_interval}=2s | ||
398 | + [Documentation] чекає поки елемент не пропаде зі сторінки з перезавантаженням сторінки | ||
399 | + | ||
400 | + ${result} = get is element exist ${locator} | ||
401 | + run keyword if ${result} == ${True} wait until keyword succeeds ${retry} ${retry_interval} reload page and fail if element exists ${locator} | ||
402 | + capture page screenshot | ||
403 | + | ||
404 | +wait until tab content is visible | ||
405 | + [Arguments] ${tab_link} ${waiting_timeout}=30s ${waiting_error}=Opened tab still not visible | ||
406 | + [Documentation] чекає поки контент вказаного табу не буде видимим | ||
407 | + | ||
408 | + ${tab_link_href} = __private__get_element_attribute ${tab_link} href | ||
409 | + ${tab_content_locator} = set variable jquery=${tab_link_href} | ||
410 | + wait until element is visible ${tab_content_locator} ${waiting_timeout} ${waiting_error} | ||
411 | + | ||
412 | +reload page and fail if element exists | ||
413 | + [Arguments] ${locator} | ||
414 | + [Documentation] перезавантажує сторінку і фейлить тест якщо елемент присутній | ||
415 | + | ||
416 | + capture page screenshot | ||
417 | + reload page | ||
418 | + capture page screenshot | ||
419 | + ${exists} = get is element exist ${locator} | ||
420 | + run keyword if ${exists} == ${True} fail | ||
421 | + | ||
422 | +reload page and fail if element does not exist | ||
423 | + [Arguments] ${locator} | ||
424 | + [Documentation] перезавантажує сторінку і фейлить тест якщо елемент відсутній | ||
425 | + | ||
426 | + reload page | ||
427 | + capture page screenshot | ||
428 | + ${exists} = get is element exist ${locator} | ||
429 | + run keyword if ${exists} == ${False} fail | ||
430 | + | ||
431 | +reload page and fail if element does not exist on search | ||
432 | + [Arguments] ${locator} | ||
433 | + [Documentation] перезавантажує сторінку і фейлить тест якщо елемент відсутній в пошуку | ||
434 | + | ||
435 | + click visible element ${tender_form_search_btn_locator} | ||
436 | + ${exists} = get is element exist ${locator} | ||
437 | + run keyword if ${exists} == ${False} fail | ||
438 | + | ||
439 | +get is 404 page | ||
440 | + [Documentation] перевіряє чи поточна сторінка з 404 помилкою | ||
441 | + | ||
442 | + ${exists} = get is element exist ${error_page_404_checker_element_locator} | ||
443 | + [Return] ${exists} | ||
444 | + | ||
445 | +wait until 404 page disappears | ||
446 | + [Arguments] ${retry}=5m ${retry_interval}=2s | ||
447 | + [Documentation] оновлює сторінку і чекає поки не пропаде 404 помилка | ||
448 | + | ||
449 | + ${result} = get is 404 page | ||
450 | + run keyword if ${result} == ${True} wait until keyword succeeds ${retry} ${retry_interval} reload page and fail if element exists ${error_page_404_checker_element_locator} | ||
451 | + | ||
452 | +######################################################################################################################## | ||
453 | +################################################### PRIVATE KEYWORDS ################################################### | ||
454 | +######################################################################################################################## | ||
455 | + | ||
456 | +__private__handle_keyword_failure | ||
457 | + [Documentation] обробка падіння тесту, збір можливої інформації для аналізу проблеми | ||
458 | + | ||
459 | + capture page screenshot | ||
460 | + ${form_errors} = __private__get_all_form_errors | ||
461 | + log dictionary ${form_errors} | ||
462 | + | ||
463 | +__private__get_all_form_errors | ||
464 | + [Documentation] збирає всі помилки форм на сторінці | ||
465 | + | ||
466 | + ${errors} = execute javascript | ||
467 | + ... var errors = {}; | ||
468 | + ... $('.has-error .help-block-error').each(function () { | ||
469 | + ... var cssClass = $(this).attr('class'), text = $(this).text(); | ||
470 | + ... cssClass = cssClass.replace("help-block-error", ""); | ||
471 | + ... cssClass = cssClass.replace("help-block", ""); | ||
472 | + ... errors[cssClass] = text; | ||
473 | + ... }); | ||
474 | + ... return errors; | ||
475 | + [Return] ${errors} | ||
476 | + | ||
477 | +__private__log | ||
478 | + [Arguments] ${msg} | ||
479 | + [Documentation] пише в логи | ||
480 | + | ||
481 | + log ${msg} | ||
482 | + log to console ${msg} | ||
483 | + | ||
484 | +__private__get_element_attribute | ||
485 | + [Arguments] ${locator} ${attribute} | ||
486 | + [Documentation] повертає значення атрибуту для вказаного елементу | ||
487 | + | ||
488 | + ${value} = get element attribute ${locator}@${attribute} | ||
489 | + [Return] ${value} | ||
490 | + | ||
491 | +__private__set_element_visible_in_browser_area | ||
492 | + [Arguments] ${locator} | ||
493 | + [Documentation] робить елемент видимим у вікні браузера | ||
494 | + | ||
495 | + set element scroll into view ${locator} | ||
496 | + | ||
497 | +__private__get_site_language_code | ||
498 | + [Documentation] повертає код поточної мови сайта | ||
499 | + | ||
500 | + ${current_language_code} = __private__get_element_attribute ${language_selector_active_element_locator} ${language_selector_active_element_code_attribute_name} | ||
501 | + [Return] ${current_language_code} | ||
502 | + | ||
503 | +__private__check_site_language_code | ||
504 | + [Arguments] ${language_code} | ||
505 | + [Documentation] повертає чи поточна мова сайту відповідає вказаній | ||
506 | + | ||
507 | + ${current_language_code} = __private__get_site_language_code | ||
508 | + ${is_equal} = set variable if "${current_language_code}" == "${language_code}" ${True} ${False} | ||
509 | + [Return] ${is_equal} | ||
510 | + | ||
511 | +__private__open_site_language_dropdown_and_select_language_by_code | ||
512 | + [Arguments] ${language_code} | ||
513 | + [Documentation] відкриває випадаючий список мов, обрає потрібну, чекає перезавантаження сторінки | ||
514 | + | ||
515 | + click visible element ${language_selector_open_element_locator} | ||
516 | + ${language_selector_list_element_locator} = replace string ${language_selector_list_element_locator_tpl} %code% ${language_code} | ||
517 | + click element ${language_selector_list_element_locator} | ||
518 | + ${language_selector_active_element_locator} = replace string ${language_selector_active_element_by_code_locator_tpl} %code% ${language_code} | ||
519 | + wait until page contains element ${language_selector_active_element_locator} 30s Language have not changed | ||
520 | + | ||
521 | +__private__select_classification_code_in_opened_popup | ||
522 | + [Arguments] ${code} ${scheme}=${None} | ||
523 | + [Documentation] в поточний попап з класифікатором перемикає схему, шукає заданий код в полі пошуку і обирає його | ||
524 | + | ||
525 | + # check scheme | ||
526 | + ${scheme_is_none} = get variable is none ${scheme} | ||
527 | + ${scheme} = convert to string ${scheme} | ||
528 | + run keyword if ${scheme_is_none} == ${False} and '${scheme}' not in ${site_allowed_schemes} __private__log Scheme "${scheme}" is needed to implement. | ||
529 | + return from keyword if ${scheme_is_none} == ${False} and '${scheme}' not in ${site_allowed_schemes} | ||
530 | + ${scheme_tab_locator} = replace string ${classification_popup_scheme_tab_locator_tpl} %scheme% ${scheme} | ||
531 | + ${scheme_tab_exists} = get is element exist ${scheme_tab_locator} | ||
532 | + run keyword if ${scheme_tab_exists} == ${True} click visible element ${scheme_tab_locator} | ||
533 | + run keyword if ${scheme_tab_exists} == ${True} wait until tab content is visible ${scheme_tab_locator} | ||
534 | + ... ELSE __private__log Classification scheme tab ${scheme} does not exist | ||
535 | + # seraching code | ||
536 | + input text to visible input and press enter ${classification_popup_search_input_locator} ${code} | ||
537 | + ${code} = convert to string ${code} | ||
538 | + ${code_item_locator} = replace string ${classification_popup_serach_item_locator_tpl} %code% ${code} | ||
539 | + wait until page contains element ${code_item_locator} 90s Specified classification code was not found | ||
540 | + click visible element ${code_item_locator} | ||
541 | + | ||
542 | +Load Sign | ||
543 | + run keyword and ignore error click visible element ${plan_form_ecp_btn_locator} | ||
544 | + ${loadingfakeKey} = Run keyword And Return Status Wait Until Page Contains Це фейкове накладання ЕЦП 30 | ||
545 | + run keyword and ignore error Run Keyword If ${loadingfakeKey} == True submit form and check result id=SignDataButton ${qualification_ecp_form_submit_success_msg} | ||
546 | + ${loadingKey} = Run keyword And Return Status Wait Until Page Contains Серійний номер 30 | ||
547 | + Run Keyword If ${loadingfakeKey} == True Fail Далі не ходити | ||
548 | + Run Keyword If ${loadingKey} == False Load Sign Data | ||
549 | + Wait Until Page Contains Серійний номер 60 | ||
550 | + submit form and check result id=SignDataButton ${qualification_ecp_form_submit_success_msg} | ||
551 | + | ||
552 | +Load Sign Data | ||
553 | + Wait Until Page Contains Element id=CAsServersSelect 60 | ||
554 | + Select From List By Label id=CAsServersSelect Тестовий ЦСК АТ "ІІТ" | ||
555 | + Wait Until Page Contains Element id=PKeyFileName 60 | ||
556 | + Choose File id=PKeyFileInput ${CURDIR}/Key-6.dat | ||
557 | + Wait Until Page Contains Element id=PKeyPassword 60 | ||
558 | + Input Text id=PKeyPassword 12345677 | ||
559 | + Wait Until Page Contains Element id=PKeyReadButton 60 | ||
560 | + Click Element id=PKeyReadButton | ||
561 | + | ||
562 | +GetDictionaryKeyExist | ||
563 | + [Arguments] ${Dictionary Name} ${Key} | ||
564 | + Run Keyword And Return Status Dictionary Should Contain Key ${Dictionary Name} ${Key} | ||
565 | + | ||
566 | +GetValueFromDictionaryByKey [Arguments] ${Dictionary Name} ${Key} | ||
567 | + ${KeyIsPresent}= Run Keyword And Return Status Dictionary Should Contain Key ${Dictionary Name} ${Key} | ||
568 | + ${Value}= Run Keyword If ${KeyIsPresent} Get From Dictionary ${Dictionary Name} ${Key} | ||
569 | + Return From Keyword ${Value} | ||
570 | + |
Please
register
or
login
to post a comment