WebdriverJS

Добрый день, коллеги, обращается к Вам совсем новичек в автоматизации в общем и в работе с Селениумом в частности.  Но я усердно учился (во многом разобрался, но пока, в большинстве своем - теоретически), планировал начать автоматизацию на проекте на java.  Но не тут то было. Получил задачу разобраться с реализацией всего этого с помощью WebdriverJS. А теперь собственно проблема: Помогите кто чем может (имеются ввиду ссылки-советы-рекомендации). С джаваскриптом знаком, но очень плохо, буду усиленно вспоминать, что знал, и учить новое. Но за любой совет буду безмерно благодарен.

На данный момент все что у меня есть это http://code.google.com/p/selenium/wiki/WebDriverJs. И тут мне пока не все ясно:( Буду рад любой помощи и разъяснениям.

 

Оффтоп:

Warning: WebDriverJS is targeted at developers comfortable with asynchronous programming. Users new to JavaScript may find WebDriverJS difficult to work with.

Я предполагаю, тебе надо искать инфу по работе с  JS.

Мне удалось (не без помощи) эту штуку запустить, но теперь (после того как я понял как вебдрайвер работает с джавой), я не могу понять зачем делать все так сложно, кто изачем придумал ТАК реализовать совместимость Вебдрайвера с джаваскриптом:( (это крик души) 

 

А у меня встречный вопрос: :)
А почему вас заставляют работать именно на JavaScript? 
Есть уже довольно протоптанные пути с C#/Java/Python/Ruby, в которых и тест фреймворки готовы, и статей в интернетах целая куча. 
Работа на платформе NodeJS  будет сложнее, по крайней мере, потому, что там нет такого разнообразия инструментов. Ну, и сам JavaScript как язык не так уж и прост в силу того, что там есть подводные камни, о которых необходимо знать. 
Я не противник использования JavaScript, а просто хочу предупредить, что некоторые вещи реализуются не лучшим образом. 
 
Ну, и я глянул на примеры к WebdriverJS
https://github.com/Camme/webdriverjs/tree/master/examples
 
Как раз они написаны в стиле NodeJS – асинхронного событийного сервера. Именно потому так код и выглядит. 
 
client
.init() // initiate the client
.url("http://www.onezerozeroone.com/projects/webdriverjs/testsite/index2.html") // go to a specific url
.getSize("#foo", function(result){ /*console.log(result); */ })
 
Но, зачем вам то эта асинхронная событийность в тестовом коде? 
 

А почему вас заставляют работать именно на JavaScript? 

Потому что посчитали, что нужно чтоб все члены команды имели возможность работать с этими тестами. Джаваскрипт знают все (кроме меня), а остальные языки нет (фронтендщик и я не знаем С#, а я учился в свое время на джаве автоматизировать)

 

Как раз они написаны в стиле NodeJS – асинхронного событийного сервера. Именно потому так код и выглядит. 

Но, зачем вам то эта асинхронная событийность в тестовом коде? 

она бы и не нужна, но NodeJS чуть ли ни единственный способ работать с WebdriverJS

 

Это довольно веский аргумент, когда вся команда собирается работать с тестами. 
 
Так как вы установили и настроили все только сегодня, понятное дело, что все может показаться непривычным и сложным. 
Эту проблему со временем можно решить, написав свой фреймворк. 
 
Для Руби есть простой фреймворк Capybara, где можно поискать вдохновение :)
https://github.com/jnicklas/capybara
 
Кстати, часть этого функционала реализована в ZombieJS под Ноду:
http://zombie.labnotes.org/
 

Не следует путать стороннюю реализацию https://github.com/Camme/webdriverjs/  с той, которая реализована в рамках проекта Seleniuim http://code.google.com/p/selenium/wiki/WebDriverJs

Тем более, что первая из упомянутых как раз НЕ асинхронная, а блокирующаяся, а вторая действительно полностью асинхронная. Причём дело тут не в событийности, а в том, что она не блокируется на операциях до их "завершения" (что такое "завершение нажатия на кнопку" вообще?)

Для обеспечения асинхронности реализация, которая сделана в Selenium, основана на использовании "промисов", поэтому выглядит с непривычки действительно весьма экзотично :)