Исходный код edutesting.ui_steps.field_steps

# -*- coding: utf-8 -*-
u"""
Набор степов для работы с полями формы (input type='text',
type='select', type='checkbox' и т.д.)
"""
import xlrd
from datetime import datetime
from behave import step

from ui import get_win_object
from helpers import waitForExtAjax, path_to_resource_file, FIELDSET_NAMES


@step(u'в поле {field_label} окна {win_name} установить значение {value}')
[документация]def step_find_and_fill_field(context, field_label, win_name, value): u""" Устанавливает значение value в поле field_label окна win_name. :param context: behave переменная, передается во все степы первым аргументом. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. :param value: Данные которые необходимо установить в поле. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) field.set_value(value)
@step(u'очистить поле {field_label} окна {win_name}')
[документация]def step_clear_field(context, field_label, win_name): u""" Удаляет данные из поля field_label. :param context: behave переменная, передается во все степы первым аргументом. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) field.clear()
@step(u'в поле {field_label} окна {win_name} нажать кнопку выпадающего' u' списка и выбрать значение {value}') def step_find_and_fill_combobox(context, field_label, win_name, value): u""" Степ для выбора данных из выпадающего списка. В некоторых списках данные подгружаютсья ajax'ом, поэтому используется ожидание waitForExtAjax. :param context: behave переменная, передается во все степы первым аргументом. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. :param value: Данные которые необходимо выбрать в списке. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) field.click_by_trigger(u'выпадающего списка') waitForExtAjax(context) field.select_combobox_item(value) @step(u'в поле {field_label} окна {win_name} ввести значение {value}' u' и из выпадающего списка выбрать {current_value}')
[документация]def step_enter_value_and_choose(context, field_label, win_name, value, current_value): u""" Степ для выбора данных из поля с автокомплитом. :param context: behave переменная, передается во все степы первым аргументом. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. :param value: Данные которые необходимо выбрать в списке. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) field.set_value(value) context.webdriverwait.until( lambda d: d.execute_script(u""" var f = Ext.getCmp('{0}'); var l = document.getElementById(f.list.id); return l.style['visibility'] == 'visible'; """.format(field.field_id)) ) field.select_combobox_item(current_value)
@step(u'в поле {field_label} окна {win_name} нажать кнопку открытия ' u'выбора из справочника')
[документация]def step_find_and_fill_combobox(context, field_label, win_name): u""" Степ для вызова справочника. При вызове справочника необходимо дождаться завершения ajax запросов, для этого используется waitForExtAjax. :param context: behave переменная, передается во все степы первым аргументом. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) field.click_by_trigger(u'вызова справочника') waitForExtAjax(context)
@step(u'"{action}" чекбокс "{field_label}" окна "{win_name}"')
[документация]def step_click_checkbox(context, action, field_label, win_name): u""" Включение/Выключение чекбокса. :param action: Действие над чекбоксом, может принимать значение включить и выключить. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) if action == u'включить' and not field.is_checked(): field.click() elif action == u'выключить' and field.is_checked(): field.click()
@step(u'чекбокс {field_label} окна "{win_name}" {status}')
[документация]def step_checkbox_status(context, field_label, win_name, status): u""" Проверка состояния чекбокса, включен или выключен. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. :param status: Проверяемое состояние, включен или выключен """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) if status == u'включен': assert field.is_checked(), 'Checkbox is not checked' elif status == u'выключен': assert not field.is_checked(), 'Checkbox is not checked'
@step(u'в окне "{win_name}" есть поле "{field_label}"') def step_(context, win_name, field_label): u""" Проверка есть ли поле field_label в окне win. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. """ win = get_win_object(context, win_name) assert win.get_field_by_name(field_label), "Field doesn't exist." @step(u'поле {field_label} окна {win_name} подсвечивается' u' {field_color} цветом')
[документация]def step_test_filed_valid(context, field_label, win_name, field_color): u""" Проверка каким цветом подсвечивается поле. Желтым подсвечивается обязательное, белым не обязательное. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. :param field_color: Цвет поля. может принимать значение (желтым, белым) """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) if field_color == u'желтым': assert not field.is_valid(), 'Field is not highlighted by yellow color' elif field_color == u'белым': assert field.is_valid(), 'Field is not highlighted by white color'
@step(u'в поле {field_label} окна {win_name} содержится значение {value}') @step(u'в поле {field_label} окна {win_name} содержится значение "{value}"')
[документация]def step_test_value_in_field(context, field_label, win_name, value): u""" Степ для проверки содержится ли в поле value. Если необходимо проверить пустое ли поле тогда в качестве параметра value необходимо указать None. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. :param value: Проверяемое значение. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) actual_value = field.get_value() if value == u'None' or value == ' ': value = '' assert actual_value == value, ( 'Value not in field. Expected {0} but found {1}'.format( value.encode('utf-8'), actual_value.encode('utf-8') ) )
@step(u'в поле {field_label} окна {win_name} содержится текущая дата') @step(u'в поле {field_label} окна {win_name} занесется значение текущей даты') def step_(context, field_label, win_name): u""" Степ для проверки содержится ли в поле текущая дата. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. """ context.execute_steps( u'Если в поле {0} окна {1} содержится значение {2}'.format( field_label, win_name, datetime.today().strftime('%d.%m.%Y') )) @step(u'поле {field_label} окна {win_name} отображается с признаком ' u'редактирования')
[документация]def step_is_field_edit(context, field_label, win_name): u""" Проверка редактировалось ли поле. При редактирование label поля становится фиолетовым. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) assert field.is_edited()
@step(u'в выпадающем списке {field_label} окна {win_name} ' u'будет запись {record}') @step(u'в выпадающем списке {field_label} окна {win_name} ' u'будет запись "{record}"') @step(u'в выпадающем списке {field_label} значений из {is_fias}' u' окна {win_name} будет запись {record}') @step(u'в выпадающем списке {field_label} окна {win_name}' u' совпадают значения с {country_file}')
[документация]def step_is_record_in_list(context, field_label, win_name, is_fias=None, record=None, country_file=None): u""" Проверка того что в выпадающем списке field_label содержится значение record. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. :param record: Искомая запись. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) if record: if is_fias: if (u'Улица' in field_label) or (u'Дом' in field_label): is_exist = False for item in field.get_fias_list_items(): if record in item: is_exist = True assert is_exist, 'Record not in list' else: assert record in field.get_fias_list_items(), ( 'Record not in list') else: assert record in field.get_list_items(), 'Record not in list' else: country_list = field.get_list_items() wb = xlrd.open_workbook( path_to_resource_file(country_file, context.settings.PATH_TO_RES_DIR)) sheet = wb.sheet_by_index(0) for rownum in xrange(1, sheet.nrows): assert sheet.row_values(rownum, 0)[0] in country_list, \ 'Record {} not in list'.format(sheet.row_values(rownum, 0)[0])
@step(u'поле {field_label} окна "{win_name}" {status} для редактирования')
[документация]def step_is_field_editable(context, field_label, win_name, status): u""" Проверка доступно или не доступно для редактирование поле. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. :param status: Статус поля для проверки, доступно или недоступно. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) if status == u'недоступно': assert field.is_read_only(), 'Field is editable' elif status == u'доступно': assert not field.is_read_only(), 'Field is not editable'
@step(u'поле {field_name} блока {field_set} окна {win_name} неактивно')
[документация]def step_check_disabled_field(context, field_name, field_set, win_name): win = get_win_object(context, win_name) field_label = field_name + FIELDSET_NAMES[field_set] field = win.get_field_by_name(field_label) assert field.is_disabled()
@step(u'в поле {field_label} окна {win_name} прикрепить файл {file_name}')
[документация]def step_(context, field_label, win_name, file_name): u""" Прикрепление файла в поле типа file. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. :param file_name: Имя файла для добавления, файл должен храниться в папке features_selenium/steps/resources """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) field.attache_file(path_to_resource_file(file_name, context.settings.PATH_TO_RES_DIR))
@step(u'в поле {field_label} окна {win_name} нажать кнопку {button}')
[документация]def step_press_field_button(context, field_label, win_name, button): u""" Нажатие кнопки у поля типа file. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. :param button: Название кнопка, может быть Загрузить, Очистить, Выбрать файл """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) if button == u'Загрузить': field.press_download_button() elif button == u'Очистить': field.press_clear_button() elif button == u'Выбрать файл': field.press_button_file()
@step(u'в окне {win_name} у поля "{field_label}"' u' {visible} кнопка {button_name}')
[документация]def step_is_file_button_visible(context, win_name, field_label, visible, button_name): u""" Проверяет отображаются ли кнопки загрузки и отчистки у поля для загрузки файлов Входной параметр button_name должен быть либо Загрузить либо Очистить :param field_label: Название поля. :param win_name: Название окна в котором находится поле. :param button_name: Название кнопка, может быть Загрузить, Очистить. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) if visible == u'отображается': assert field.is_file_button_visible(button_name), \ "Button is not visible." elif visible == u'не отображается': assert not field.is_file_button_visible(button_name), \ "Button is visible"
@step(u'у поля {field_label} окна "{win_name}"' u' {visible} кнопка {button}')
[документация]def step_is_field_button_visible(context, field_label, win_name, visible, button): u""" Проверяет отображаются ли кнопки у поля :param field_label: Название поля. :param win_name: Название окна в котором находится поле. :param button: Название кнопки, может быть очистить поле, выпадающего списка, вызова справочника. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) if visible == u'отображается': assert field.is_trigger_button_visible(button),\ "Button is not visible." elif visible == u'не отображается': assert not field.is_trigger_button_visible(button),\ "Button is visible."
@step(u'в окне {win_name} кликнуть по кнопке {trigger_name}' u' поля {field_label}')
[документация]def click_by_field_button(context, win_name, trigger_name, field_label): u""" Нажатие на кнопку поля (вызов справочника, вызов календаря и т.д.). :param field_label: Название поля. :param win_name: Название окна в котором находится поле. :param trigger_name: Название кнопки, может быть очистить поле, выпадающего списка, вызова справочника. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) field.click_by_trigger(trigger_name)
@step(u'в поле {field_label} окна {win_name} вызвать календарь')
[документация]def step_open_data_picker(context, field_label, win_name): u""" Вызов виджета календаря у поля даты. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) field.open_data_picker()
@step(u'у поля {field_label} окна {win_name} откроется виджет Календарь')
[документация]def step_is_date_widget_open(context, field_label, win_name): u""" Проверка открылся ли виджет календаря. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) assert field.is_data_picker_open(), "Data picker not opened"
@step(u'в виджете календаря поля {field_label} окна {win_name} отображается' u' текущая дата')
[документация]def step_widget_current_date(context, field_label, win_name): u""" Проверка отображается ли текущая дата в виджете календаря. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) assert (field.widget_date_value().strftime('%d.%m.%Y') == datetime.today().strftime('%d.%m.%Y')), ( u"Values doesn't match. Expected {0} but found {1}".format( datetime.today().strftime('%d.%m.%Y'), field.get_value() ) )
@step(u'в виджете Календаря поля {field_label} окна {win_name} ' u'дата "{date}" {status} для выбора')
[документация]def step_is_widget_date_active(context, field_label, win_name, date, status): u""" Проверка доступна или нет дата date для выбора в виджете календаря. :param field_label: Название поля. :param win_name: Название окна в котором находится поле. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) d = datetime.strptime(date, '%d.%m.%Y') if u'доступна' == status: assert d >= field.min_date() or d <= field.max_date(), ( "Date is not active" ) elif u'не доступна' == status: assert d <= field.min_date() or d >= field.max_date(), ( "Date is active" )
@step(u'в поле {field_label} окна {win_name} нажать на кнопку ' u'проставления текущей даты')
[документация]def step_set_current_date(context, field_label, win_name): u""" Нажатие кнопки выставления текущей даты у поля :param field_label: Название поля. :param win_name: Название окна в котором находится поле. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) field.set_current_date()
@step(u'в виджете Календаря поля {field_label} окна {win_name} ' u'установить {date}')
[документация]def step_set_date_in_date_widget(context, field_label, win_name, date): u""" Выбор даты date в виджете календаря :param field_label: Название поля. :param win_name: Название окна в котором находится поле. :param date: Название окна в котором находится поле. """ win = get_win_object(context, win_name) field = win.get_field_by_name(field_label) field.set_date_in_widget(date)
@step(u'в окне {win_name} не отображается поле {field_name}' u' из блока {field_set}')
[документация]def step_check_field_is_invisible(context, win_name, field_name, field_set): win = get_win_object(context, win_name) field_label = field_name + FIELDSET_NAMES[field_set] field = win.get_field_by_name(field_label) assert not field.is_visible()