суббота, 29 марта 2014 г.

Несоответствие версии Selenium версии браузера (Chrome, Firefox и другие)

Одна из проблем работы с селениум заключается в том, что очень часто последняя версия Selenium Web Driver не работает с последними версиями браузеров. В такой ситуации выходов может быть несколько:
1) Подождать пока обновится драйвер для Вашего браузера. Как правило адаптация под новые версии добавляется довольно быстро. Особенно это касается firefox, потому что драйвер для него - это одна из основных частей самого продукта Selenium 2.0.
2) Тестировать на старой версии браузера. Для большинства приложений небольшое различие версий браузера не приводит к каким то фатальным проблемам. Поэтому если у Вас обычное корпоративное приложение или сайт, не использующие самые-самые последние возможности браузеров, то фатальных проблем быть не должно. Просто делаем даунгрэйд браузера и гоняем тесты не на самой последней версии.
Как обновить браузер на более старую версию?
Для Firefox можно запретить обновление в настройках (Firefox->Options->Advanced->Update) - Ставите галку, чтобы файрфокс не проверял наличие обновлений и убираете галку использования фонового сервиса для установки обновлений.

После этого скачиваете нужную версию браузера и устанавливаете поверх существующей (можно даже не удалять существующую)
Для Google Chrome ставите нужную версию и запрещаете обновления. Как запретить обновляться хрому, можете почитать тут.
Как правило, если версии не имеют сильных различий, то обновление браузера может пройти безболезненно. Но если же вдруг почему-то тесты перестали запускаться с примерно такой ошибкой - надо подумать о соответствии драйвера и браузера:
Hit exception trying to create new WebDriver instance: org.openqa.selenium.WebDriverException: Failed to connect to binary FirefoxBinary(C:\Program Files\Mozilla Firefox\firefox.exe) on port 7055;
 Узнать, с какой версией браузера может работать драйвер можно, поискав в описании драйвера список поддерживаемых версий. Например, для хрома описание поддерживаемых версий можно найти здесь.



суббота, 15 марта 2014 г.

Решение проблемы нехватки места на диске с помощью Junction

    Иногда происходит так, что место на диске С:\ заканчивается в не очень подходящий момент. И если возможности ничего удалить нет, а место получить нужно, то ситуация не очень приятная. Да, во многих программах можно настроить папку установки и\или место хранения каких-то используемых файлов. Но это работает не для всех. А еще это может быть виртуальная машина, на которой ничего такого не стоит, но места уже нет на системном диске.

    В таком случае очень поможет поддержка символических ссылок на каталоги, которая уже довольно давно появилась в Windows (с версии Windows 2000).

    В чем суть этой технологии. На другом диске создается папка - копия существующей. А с исходного диска файлы удаляются и создается символическая ссылка. После этого при обращении пользователя\программы\системы к файлу на исходном диске происходит работа с этим файлом - "копией" (которая теперь является оригиналом). 

    Стандартными средствами Windows  этого сделать нельзя. Но есть бесплатная программа Junction, которую можно скачать здесь. С помощью неё можно легко и просто создать символическую ссылку на папку. Это консольное приложение с очень небольшим набором команд, в которых сложно запутаться.
    Рассмотрим на примере задачу, решение которой и привело меня к этой утилите.
   Есть виртуальная машина с дисками С  и D. На ней стоит Hudson. По умолчанию он свои проекты складывает C:\Documents and Settings\<username>\.hudson. 



    Проект в svn по размеру огромный, поэтому при попытке его выкачать Hudson столкнулся с тем, что место на диске С закончилось. А на диске D места много. Самый простой способ в этой ситуации - создать символическую ссылку с  C:\Documents and Settings\<username>\.hudson.  например на  E:\hudson. Тогда все файлы будут доступны по старым ссылкам на диск С, но фактически они будут храниться ( и занимать место) на диске D. 
    Итак, наконец, последовательность действий:
1. Скачиваем Junction
2. Распаковываем архив в любую папку
3. Открываем cmd (Нажимаем Win+R, в открывшееся окно пишем cmd, нажимаем enter)
4. Копируем все файлы из "C:\Documents and Settings\<username>\.hudson" в "E:\hudson"
5. Удаляем "C:\Documents and Settings\<username>\.hudson"
6. Выполняем команду junсtion "C:\Documents and Settings\<username>\.hudson" "E:\hudson"

    Директория "C:\Documents and Settings\<username>\.hudsonсоздастся при успешном выполнении команды. 

   Если после запуска ошибок не появилось, то можно убедиться в успешности переноса перейдя в "C:\Documents and Settings\<username>\.hudson" и увидев там все файлы, находящиеся в исходной папке на диске D.

Чтобы удалить привязку выполняем команду junction -d "C:\Documents and Settings\<username>\.hudson".

    Какие могут возникнуть проблемы:
1. 'junction' is not recognized as an internal or external command,
operable program or batch file. - при возникновении такой ошибки нужно 
1.1. или открыв cmd перейти в папку с распакованным junction (выполнить cd <junctiondir>)
1.2. или при выполнении команды указывать полный путь до файла, например
"C:\Program Files\Junction\junction.exe" "C:\dir" "D:\dir"
2.  Error setting junction for c:\dir: The data present in the reparse point buffer is invalid. - эта ошибка происходит при неправильном указании пути - проверьте, что пути указаны правильно, а если они с пробелами, то в кавычках.