воскресенье, 13 января 2013 г.

How to start with Selenium (C#, Java, Python)

Много популярных языков программирования в той или иной мере поддерживают работу с Selenium webdriver. Выбор стоит за Вами, что более предпочтительно, опыт работы, требования проекта или личный интерес. В данной статье мы хотим описать процессы настройки Selenium в связке с разными языками программирования, с которыми приходилось иметь возможность и опыт работать.

Для того, чтобы настроить среду Python+Selenium необходимо скачать:
- python http://www.python.org/download/releases/2.7.3/ Устанавливаем и добавляем пути c:\Python2x; c:\Python2x/lib, c:\Python2x/Scritps в переменную оружения. 
Дальше нам необходимо установить пакетный менеджер, чтобы в будущем, при необходимости, легко и быстро можно было устанавливать дополнительные модули. Совсем скоро мы будем таким образом устанавливать Селениум, не скачивая при этом ничего вручную:
- http://pypi.python.org/pypi/setuptools. Скачиваем ez_setup.py и запускаем в командой строке (Windows или Linux) python ez_setup.py. Установяться необходимые зависимости. 
http://pypi.python.org/pypi/pip#downloads Скачиваем, распаковываем архив, в командой строке переходим в распакованную папку и устанавливаем запустив команду python setup.py install

Следующий шаг не обязательный, но рекомендуемый. На этом этапе можно установить, так называемую, виртуальную среду, для того чтобы держать в чистоте и порядке исходный дистрибутив, и в дальнейшем с виртуальными средами будет удобно работать, проводя любые эксперементы. Устанавливаем уже через пакетный менеджер pip install virtualenv. Подробно на virtualenv не будем сейчас останавливатся. Детально можно посмотреть на оф. сайте  http://www.virtualenv.org/en/latest/index.html#installation.

Если считать что мы просто установили python и pip, и наконец-то горим желанием начать работать с Selenium, устанавливаем его командой: pip install selenium. Заметка, когда вышла новая версия Selenium, то всего лишь нужно обновиться той же командой, только с параметром pip install selenium --upgrade.

Теперь можно начинать писать тесты. По умолчанию webdriver работает с браузером Firefox. Для поддержки других браузеров нужно скачать соответсвующие библиотеки http://code.google.com/p/selenium/downloads/list. Перед началом работы с IE 7 и выше, нужно не забыть на тестовой машине включить\отключить защищённый режим для всех зон в браузере. http://code.google.com/p/selenium/wiki/InternetExplorerDriver.

Тесты пишем используя модуль unittest. С его помощью, вы удобно сможете организовать тест-кейсы, и составить тест-свиты. В качестве среды разработки, можно использовать блокнот, стандартную IDLE, Eclipse, Vim и прочее. Для статистики на Хабре проходил опрос на эту тему Какой редактор или IDE вы используете для Python?

Пример:
 import unittest  
 from selenium import webdriver  
 from selenium.webdriver.support.ui import WebDriverWait   
 #Каждый класс будет можно считать тест-свитов, каждый метод с префиксом test_  
 #будет вашим тест-кейсом  
 class homePageTest(unittest.TestCase):  
     def setUp(self):  
       self.driver = webdriver.Chrome()  
     def tearDown(self):  
       self.driver.close()  
 #ниже приведённая команда пропускает тест-кейс. Если нет необхомости в его запуске, либо он ещё не готов  
     @unittest.skip("This test is not ready yet. Skipped")    
     def test_LoginButtonsSearchbox(self):  
       driver = self.driver  
       driver.get(testEnv)  
       try:  
         liveButton = driver.find_element_by_xpath('//*[@id="content2323"]/div/p[3]/a/span/span')  
         liveButton.click()  
       except:  
         msg = "Live Button from homepage is unaccessible"  
         print "\n" + msg + "\n"  
         sendanemail(msg, msg)  
       self.assertIn(CurrentButtonID, ButtonID)  
     def test_RegistrationControls(self):  
       driver = self.driver  
       driver.get(testEnv)  
       try:  
         self.assertTrue(driver.find_element_by_name("nickname") > 0)             
       except NoSuchElementException:  
         print "Nickname box is absent"      
       try:  
         #wait for 3 seconds element present structure  
         self.assertTrue(WebDriverWait(driver, 3).until(lambda driver : driver.find_element_by_name("email")))         
       except TimeoutException:  
         print "Email box is absent\n"  
 class PaymentPageTest(unittest.TestCase):  
     def setUp(self):  
       self.driver = webdriver.Chrome()  
     def tearDown(self):  
       self.driver.close()  
     def test_BaseElements(self):  
       # here you will add your tests  
     def test_CardNumber(self):  
       # here you will add your tests      
 #Создаём тест-свиты  
 suite1 = unittest.TestLoader().loadTestsFromTestCase (homePageTest)  
 suite2 = unittest.TestLoader().loadTestsFromTestCase (PaymentPageTest)  
 #Объеденяем свиты, которые хотим запускать  
 alltests = unittest.TestSuite([suite1, suite2])  
 unittest.TextTestRunner(verbosity=1).run(alltests) #Как параметр можно передать отдельный свит  

Чтобы настроить Eclipse для работы с python, необходимо скачать:
- eclipse http://www.eclipse.org/downloads/. Скачать и установить.
- pydev http://pydev.org/download.html.
- здесь же и мануал, как установить pydev http://pydev.org/manual_101_install.html

Если вы только начинаете разбираться с атоматизированным тестированием и хотите использовать python + selenium, то рекомендуем также посмотреть очень хорошую базовую документацию без лишнй воды тут http://selenium-python.readthedocs.org/en/latest/index.html. А дальше по мере поступления, проблемы будут решаться уже опытным путём.
На следующем шаге рекомендуем ознакомиться с Nose - автоматически собирает и запускает тесты.

Selenium Web driver (IntelliJ Idea + Java):
Теперь небольшой мануал по подгтовке среды для разработки автоматизированных тестов на Java + Selenium + IntelliJ Idea. Необходимо выполнить следующие шаги:
1. Скачать JDK и установить. Желательно устанавливать в корень диска, чтобы в пути к директории не было пробелов, которые есть по умолчанию в пути, если это 'Program Files'
2. Скачать Selenium Webdriver и добавить путь в переменную окружения (на момент пубилкация, возможно уже доступна более новая версия, рекомендуем проверить на оф. сайте)
3. Перегрузиться, так как бывает что переменные окружения глючно обновляются.
4. Скачать и установить InelliJ IDEA (на самом деле не принципиально, можно писать в чем угодно, будет различие в настройке среды и сборке)
5. Настраиваем InelliJ IDEA.
Инструкция по настройке среды тут, файлы которые в ней указаны можно скачать тут и тут, ну а вебдрайвер мы уже скачали раньше.

Полезно, базовые методы и тут
Selenium Web driver (C# + VisualStudio2010 +NUnit):
Если же вы используете VisualStudio 2010 (на самом деле не важно какая версия, мы просто все проделывали на 10 версии), то можно для среди разработки автоматизированных тестов использовать VisualStudio 2010 +NUnit. Для подготовки такой среди необходимо выполнить следующие шаги:
1.   Установить Nunit http://www.nunit.org/index.php?p=download - эта вспомогательная система для запуска и управления тестами. Установите bin .net Zip файл последней стабильной версии (например, NUnit-2.6.2-net-1.1.zip). Если же вы планируете модифицыровать Nunit тогда выберите соответствующий установочный файл.
Библиотеки Nunit нужно будет подключить в проект: nmock.dll, nunit.core.dll, nunit. framework.dll

2.    Сохраните набор библиотек для .NET (bindings for Selenium, including the RC and WebDriver APIs.) Скачать можно по ссылке https://code.google.com/p/selenium/downloads/list.
Во вложение должны быть следующие библиоткети, которые также нужно подключить в проект: Castle.Core.dll, Ionic.Zip.Reduced.dll, Newtonsoft.Json.Net35.dll, Selenium.WebDriverBackedSelenium.dll, ThoughtWorks.Selenium.Core.dll, WebDriver.dll, WebDriver.Support.dll.

3.     Откройте VS 2010 > Нажмите правой клавишей мыши на Solution в Solution explorer> Нажмите Add> New project> Visual C# , тип Class Library.
Заметка: Если вы открыли VS 2010 и у вас нет никаких подключений к серверу и существующих Solutions, то просто выбирите File> New file и добавьте любой файл. У вас появится Solution и вот в нем вы уже можетt создать свой проект.

4.     Добавьте Nunit и .NET библиотеки в проект. Нажмите правой кнопкой мыши на Имя проекта> Нажмите Add References…> выберите вкладку Browse и добавьте необходимые библиотеки. Или второй вариант, выберите в меню Project properties > References path и нажмите кнопку Reference path, найдите необходимые библиотеки и добавьте их.

5.    Далее уже можно писать свой первый тест. Пример первого теста указан далее по ссылке, а также более детальная информация про Selenium 2.0 и как запустить Nunit http://bugscatcher.net/archives/1067

Заметка: После того как вы запустили первый тест, у вас может появится ошибка 
«your webdriver cannot be found», то вам необходимо указать путь где физически у вас 
размещен браузер, в данном случае FF. Найдите где у вас находится екзешный файл для FF
и замените путь в коде. У нас FF находится в следующей папке:
Заменить: driver = new FirefoxDriver();
На: driver = new FirefoxDriver(new FirefoxBinary("c:\\Users\\[Your user name]\\AppData\\Local\\Mozilla Firefox\\firefox.exe"), null);

Также много полезной информации вы можете узнать здесь:
http://bugscatcher.net/archives/1232 - WebDriver: Основные команды
http://automated-testing.info/knowledgebase/article/webdriver-osnovnye-komandy – WebDriver: Основные команды
http://www.vr-online.ru/content/nunit-delaem-testy-pravilno-3054 - Работа с NUnit
http://www.vr-online.ru/content/c-nunit-delaem-testy-pravilno-chast-2-3343 - Работа с NUnit
Всё проверено на работоспособность на текущих версиях.

1 комментарий:

  1. переменную оружения. #Ошибка в слове ОКРУЖЕНИЯ

    c:\Python2x; c:\Python2x/lib, c:\Python2x/Scritps ";" "\"

    ОтветитьУдалить