Commit 001ae27dbe026f7fa0dec336d571d5ffa9ff2ad4
1 parent
fa5393b2
common
- optimized: "get is element exist" keyword with JS help - added: "generate_dictionary_from_field_path_and_value" keyword plans - added: updating plan by field key and value
Showing
6 changed files
with
103 additions
and
13 deletions
... | ... | @@ -38,6 +38,10 @@ Resource playtender_plan. |
38 | 38 | [Arguments] ${user} ${plan_data} |
39 | 39 | [Documentation] Створити план з початковими даними plan_data. Повернути uaid створеного плану. |
40 | 40 | |
41 | + # check buyers | |
42 | + ${buyers_count} = get length ${plan_data['data']['buyers']} | |
43 | + run keyword if ${buyers_count} != 1 fail Buyer must be one | |
44 | + | |
41 | 45 | open new plan form |
42 | 46 | fill plan form ${plan_data['data']} |
43 | 47 | submit form and check result ${plan_form_submit_btn_locator} ${plan_form_submit_success_msg} ${plan_created_checker_element_locator} |
... | ... | @@ -52,8 +56,18 @@ Resource playtender_plan. |
52 | 56 | open plan page by uaid ${plan_uaid} |
53 | 57 | |
54 | 58 | Пошук плану по ідентифікатору |
55 | - [Arguments] ${username} ${uaid} | |
56 | - [Documentation] Знайти план за вказаним uaid. | |
59 | + [Arguments] ${username} ${plan_uaid} | |
60 | + [Documentation] Знайти план за зазначеним plan_uaid. | |
57 | 61 | |
58 | 62 | open plan search form |
59 | - input to search form and wait results ${plan_search_form_query_input_locator} ${uaid} ${plan_search_form_result_locator_tpl} | |
\ No newline at end of file | ||
63 | + input to search form and wait results ${plan_search_form_query_input_locator} ${plan_uaid} ${plan_search_form_result_locator_tpl} | |
64 | + | |
65 | +Внести зміни в план | |
66 | + [Arguments] ${username} ${plan_uaid} ${fieldname} ${fieldvalue} | |
67 | + [Documentation] Змінити значення поля fieldname на fieldvalue для плана із зазначеним plan_uaid. | |
68 | + | |
69 | + ${plan_data} = generate dictionary from field path and value ${fieldname} ${fieldvalue} | |
70 | + open plan form by uaid ${plan_uaid} | |
71 | + fill plan form ${plan_data} | |
72 | + submit form and check result ${plan_form_submit_btn_locator} ${plan_form_submit_success_msg} ${plan_created_checker_element_locator} | |
73 | + wait until page does not contain element with reloading ${plan_sync_element_locator} | ... | ... |
... | ... | @@ -79,6 +79,13 @@ click visible element |
79 | 79 | __private__set_element_visible_in_browser_area ${locator} |
80 | 80 | click element ${locator} |
81 | 81 | |
82 | +click visible element and wait until page contains element | |
83 | + [Arguments] ${locator} ${checker_element_locator} ${waiting_timeout}=30s ${waiting_error}=Another element was not shown after clicking on specific element | |
84 | + [Documentation] перевіряє видимість і клікає по елементу | |
85 | + | |
86 | + click visible element ${locator} | |
87 | + wait until page contains element ${checker_element_locator} ${waiting_timeout} ${waiting_error} | |
88 | + | |
82 | 89 | input text to visible input |
83 | 90 | [Arguments] ${locator} ${text} |
84 | 91 | [Documentation] перевіряє чи елемент видимий у вікні браузера, після чого заповнює його |
... | ... | @@ -202,6 +209,8 @@ submit current visible popup |
202 | 209 | click visible element ${popup_opened_last_submit_btn_locator} |
203 | 210 | sleep ${popup_transaction_time} |
204 | 211 | ${popup_last_locator} = set variable id=${popup_last_id} |
212 | + ${popup_exists} = __private__get_is_element_exist ${popup_last_locator} | |
213 | + return from keyword if ${popup_exists} == ${False} | |
205 | 214 | wait until page does not contain element ${popup_last_locator} 30s Current popup was not hidden |
206 | 215 | |
207 | 216 | submit form and check result |
... | ... | @@ -289,7 +298,8 @@ __private__get_is_element_exist |
289 | 298 | [Arguments] ${locator} |
290 | 299 | [Documentation] повертає чи елемент присутній на сторінці |
291 | 300 | |
292 | - ${result} = run keyword and return status page should contain element ${locator} | |
301 | + ${result} = get is element exist ${locator} | |
302 | +# ${result} = run keyword and return status page should contain element ${locator} | |
293 | 303 | [Return] ${result} |
294 | 304 | |
295 | 305 | __private__get_element_attribute | ... | ... |
... | ... | @@ -9,6 +9,13 @@ open new plan form |
9 | 9 | |
10 | 10 | open page and wait element by locator ${broker_baseurl}/plan/create ${plan_form_locator} |
11 | 11 | |
12 | +open plan form by uaid | |
13 | + [Arguments] ${plan_uaid} | |
14 | + [Documentation] відкриття сторінки редагування плану | |
15 | + | |
16 | + open plan page by uaid ${plan_uaid} | |
17 | + click visible element and wait until page contains element ${plan_edit_btn_locator} ${plan_form_locator} | |
18 | + | |
12 | 19 | open plan page by uaid |
13 | 20 | [Arguments] ${uaid} |
14 | 21 | [Documentation] відкриває сторінку з планом |
... | ... | @@ -24,10 +31,6 @@ fill plan form |
24 | 31 | [Arguments] ${data} |
25 | 32 | [Documentation] заповнення форми з масива даних |
26 | 33 | |
27 | - # check buyers | |
28 | - ${buyers_count} = get length ${data['buyers']} | |
29 | - run keyword if ${buyers_count} != 1 fail Buyer must be one | |
30 | - | |
31 | 34 | # hidden inputs |
32 | 35 | ${budget_id} = get from dictionary by keys ${data} budget id |
33 | 36 | run keyword if condition is not none ${budget_id} input text to hidden input ${plan_form_budget_id_input_locator} ${budget_id} |
... | ... | @@ -65,7 +68,11 @@ fill plan form items |
65 | 68 | [Documentation] заповнення номенклатури плану |
66 | 69 | |
67 | 70 | :FOR ${item_attributes} IN @{item_attributes_array} |
68 | - \ click visible element ${plan_form_add_item_btn_locator} | |
71 | + \ ${item_update_index} = get from dictionary by keys ${item_attributes} list_index | |
72 | + \ ${item_update_index_string} = convert to string ${item_update_index} | |
73 | + \ ${open_form_btn_locator} = replace string ${plan_form_update_item_btn_locator_tpl} %index% ${item_update_index_string} | |
74 | + \ run keyword if condition is not none ${item_update_index} click visible element ${open_form_btn_locator} | |
75 | + \ run keyword if condition is none ${item_update_index} click visible element ${plan_form_add_item_btn_locator} | |
69 | 76 | \ wait until popup is visible |
70 | 77 | \ fill item form in opened popup ${item_attributes} |
71 | 78 | \ submit current visible popup | ... | ... |
1 | 1 | # -*- coding: utf-8 - |
2 | 2 | from robot.libraries.BuiltIn import BuiltIn |
3 | 3 | from iso8601 import parse_date |
4 | +import re | |
4 | 5 | |
5 | 6 | |
6 | 7 | def get_library(): |
... | ... | @@ -18,12 +19,18 @@ def get_variable_is_none(variable): |
18 | 19 | return False |
19 | 20 | |
20 | 21 | |
21 | -# check if condition is not none type and run specified keyword | |
22 | +# run specified keyword if condition is not none type | |
22 | 23 | def run_keyword_if_condition_is_not_none(condition, name, *args): |
23 | 24 | if get_variable_is_none(condition) == False: |
24 | 25 | BuiltIn().run_keyword(name, *args) |
25 | 26 | |
26 | 27 | |
28 | +# run specified keyword if condition is none type | |
29 | +def run_keyword_if_condition_is_none(condition, name, *args): | |
30 | + if get_variable_is_none(condition) == True: | |
31 | + BuiltIn().run_keyword(name, *args) | |
32 | + | |
33 | + | |
27 | 34 | # return value for *keys (nested) in `element` (dict). |
28 | 35 | def get_from_dictionary_by_keys(element, *keys): |
29 | 36 | if not isinstance(element, dict): |
... | ... | @@ -40,6 +47,33 @@ def get_from_dictionary_by_keys(element, *keys): |
40 | 47 | return _element |
41 | 48 | |
42 | 49 | |
50 | +# returns if element exists on page. optimization | |
51 | +def get_is_element_exist(locator): | |
52 | + jquery_locator = convert_locator_to_jquery(locator) | |
53 | + if get_variable_is_none(jquery_locator) == False: | |
54 | + jquery_locator = jquery_locator.replace('"', '\\"') | |
55 | + length = get_webdriver_instance().execute_script('return $("' + jquery_locator + '").length;') | |
56 | + return length > 0 | |
57 | + | |
58 | + try: | |
59 | + get_library()._element_find(locator, None, True) | |
60 | + except Exception: | |
61 | + return False | |
62 | + return True | |
63 | + | |
64 | + | |
65 | +# convert locator to jquery locator | |
66 | +def convert_locator_to_jquery(locator): | |
67 | + locator_params = locator.split('=', 1) | |
68 | + if locator_params[0] == 'id': | |
69 | + return '#' + locator_params[1] | |
70 | + if locator_params[0] == 'jquery': | |
71 | + return locator_params[1] | |
72 | + if locator_params[0] == 'css': | |
73 | + return locator_params[1] | |
74 | + return None | |
75 | + | |
76 | + | |
43 | 77 | # set scroll to element in view |
44 | 78 | def set_element_scroll_into_view(locator): |
45 | 79 | element = get_library()._element_find(locator, None, True) |
... | ... | @@ -141,3 +175,24 @@ def prepare_buyers_data(data): |
141 | 175 | item.identifier['id'] = u"playtender" |
142 | 176 | item.identifier['legalName'] = u"Playtender" |
143 | 177 | item.identifier['scheme'] = u"UA-EDR" |
178 | + | |
179 | + | |
180 | +# prepare dictionary from field path + value | |
181 | +def generate_dictionary_from_field_path_and_value(path, value): | |
182 | + data = dict() | |
183 | + path_keys_list = path.split('.') | |
184 | + if len(path_keys_list) > 1: | |
185 | + key = path_keys_list.pop(0) | |
186 | + value = generate_dictionary_from_field_path_and_value('.'.join(path_keys_list), value) | |
187 | + indexRegex = re.compile(r'(\[(\d+)\]$)') | |
188 | + matchObj = indexRegex.search(key) | |
189 | + print matchObj | |
190 | + if matchObj: | |
191 | + key = indexRegex.sub('', key) | |
192 | + value['list_index'] = matchObj.group(2) | |
193 | + value = [value] | |
194 | + data[key] = value | |
195 | + else: | |
196 | + data = dict() | |
197 | + data[path] = value | |
198 | + return data | ... | ... |
... | ... | @@ -22,7 +22,7 @@ ${language_selector_list_element_locator_tpl} = jquery=.lang |
22 | 22 | ${classification_popup_opened_content_locator} = jquery=.fancybox-is-open .fancybox-slide--current .fancybox-content.classification-modal # for checking if it's visible |
23 | 23 | ${classification_popup_scheme_tab_locator_tpl} = jquery=.fancybox-is-open .fancybox-slide--current .fancybox-content.classification-modal .nav a[data-toggle="tab"][data-scheme="%scheme%"] |
24 | 24 | ${classification_popup_search_input_locator} = jquery=.fancybox-is-open .fancybox-slide--current .fancybox-content.classification-modal .js-search-wrapper:visible .js-input |
25 | -${classification_popup_serach_item_locator_tpl} = jquery=.fancybox-is-open .fancybox-slide--current .fancybox-content.classification-modal .js-search-wrapper:visible .js-search-tree strong:contains("%code%") | |
25 | +${classification_popup_serach_item_locator_tpl} = jquery=.fancybox-is-open .fancybox-slide--current .fancybox-content.classification-modal .js-search-wrapper:visible .js-search-tree strong:contains(%code%) | |
26 | 26 | |
27 | 27 | # authorization |
28 | 28 | ${login_popup_open_locator} = jquery=.page__header a[data-action="login"] |
... | ... | @@ -57,6 +57,7 @@ ${plan_form_classification_edit_btn_locator} = jquery=.fiel |
57 | 57 | ${plan_form_additional_classification_edit_btn_locator} = jquery=.field-planform-additional_classification_ids .js-additional-classification-input-wrapper [data-toggle="additional-classification"] |
58 | 58 | ${plan_form_kekv_classification_edit_btn_locator} = jquery=.field-planform-additional_classification_ids_kekv .js-additional-classification-input-wrapper [data-toggle="additional_classification_ids_kekv"] |
59 | 59 | ${plan_form_add_item_btn_locator} = jquery=#Items .js-form-popup-add |
60 | +${plan_form_update_item_btn_locator_tpl} = jquery=#Items .js-form-popup-panel:nth(%index%) .panel-heading .js-form-popup-update | |
60 | 61 | ${plan_form_submit_btn_locator} = jquery=#plan-form .js-submit-btn |
61 | 62 | ${plan_created_checker_element_locator} = id=plan-part-pjax |
62 | 63 | |
... | ... | @@ -64,8 +65,9 @@ ${plan_created_checker_element_locator} = id=plan-part |
64 | 65 | ${plan_view_checker_element_locator} = id=plan-general-info |
65 | 66 | ${plan_sync_element_locator} = jquery=#aside-part-pjax .status-label .fa-refresh |
66 | 67 | ${plan_uaid_text_locator} = jquery=#plan-general-info .plan-id .value |
68 | +${plan_edit_btn_locator} = jquery=#aside-part-pjax a[href*='plan/update'] | |
67 | 69 | |
68 | 70 | # plan index + search |
69 | 71 | ${plan_search_form_locator} = id=plan-filter-form |
70 | 72 | ${plan_search_form_query_input_locator} = jquery=#plan-filter-form .dynamic-search-query input |
71 | -${plan_search_form_result_locator_tpl} = jquery=#plan-list .lots__item .lot__characteristic li:contains("%query%") | |
\ No newline at end of file | ||
73 | +${plan_search_form_result_locator_tpl} = jquery=#plan-list .lots__item .lot__characteristic li:contains(%query%) | |
\ No newline at end of file | ... | ... |
Please
register
or
login
to post a comment