### Подготовка и запуск

1. Устанавливаем python
2. Устанавливаем virtualenv
   
```
$ pip install -U virtualenv
```
    
3. Готовим локальный environment
    
```
$ ./prepare.sh
```

Если используется PyCharm удобно добавить локальный env.
File -> Settings -> Project -> Шестеренка -> Добавить локальный env -> выбрать ./.env/bin/python2.7

4. Устанавливаем [selenium-launchers](https://github.com/bayandin/selenium-launchers):

```bash
# скачать zip-архив и распаковать куда-нибудь на свою машину
cd selenium-launchers/
./start_linux.sh (./start_mac.sh | ./start_win.sh) # запустит selenuim-сервер на порту 4455
```

5. Тесты используют шаблоны страниц. Для их генерации нужно выполнить:

```
$ ./template_render.sh
```

6. Если не поднят, поднять сервер MapsAPI

7. Запустить тесты

```
$ ./run.sh
```

Чтобы запускать только конкретные тесты, необходимо скопировать файл run.sh в run_my.sh и добавить файл,
класс и метод теста, например:

```bash
#!/usr/bin/env bash
source .env/bin/activate
PYTHONPATH=$(pwd) .env/bin/lode_runner -v tests/firm_callout_test.py:FirmCallout.firm_photo_test --with-xunit
exit 0;
```

### Содержимое проекта

* В пакете classes хранятся компоненты (сomponents), исключения (exceptions), утилиты (util)
* В пакете config хранится конфиг для contesto
* В пакете tests хранятся тесты и пакеты тестов


#### Исключения
Бывает необходимо поднять и обработать исключение.
Все типы исключений для карты, взаимодействия с WebApi и т.д. описываются в classes.exceptioins.exceptions.
Наследуются от базового типа исключений contesto, а затем от базового типа исключения API карт.


#### Утилиты
В данном пакете описываются утилиты и базовые классы тестов для API карт.
На данный момент там содержится базовый класс для тестов MapsAPIBaseTest унаследованный от
UnittestContestoTestCase, с переопределенным методом setUp.


#### Компоненты
В данном пакете описываются компоненты страницы, страница и базовой компонент.
Базовый компонент наследуется от класса BaseComponent contesto. В нем определяются черты (свойства и методы)
свойственные всем компонентам проекта.

### Code style
* Так как используется паттерн pageObject, в тестах не должно быть обращения к драйверу, за исключением пользовательских элементов (кнопки, ползунки и все что не входит в API карт)
* Для проверки кода перед коммитом рекомендуется создать или добавить в pre-commit git hook содержимое pep8-hook.sh. Для работы хука должен иметься pep8. 
* Имена файлов с тестами `<название>_test.py`
* Имена классов оформляются в `CapitalizedWords`
* Имена тестовых методов `<объект тестирования>_<что тестируется>_test(self, *args, **kwargs)`
* Допускается использование нескольких assert`ов в тесте если они связаны с тестируемым функционалом
* Использовать только assert`ы contesto
