Selenium: начало работыСташевский Павел, 2010Pavel.Stashevskiy@softline.ru
План мероприятияПопытаемся установитьНемного про архитектуруКлиенты для RCЛокаторы – гуляем по DOM-деревуТиповые действияОжидания
УстановкаСтавим РНР (или Denwer?)Устанавливаем PEAR http://pear.php.net/manual/en/installation.getting.phpТеперь PHPUnithttp://www.phpunit.de/manual/3.0/en/installation.htmlСкачиваем Selenium RChttp://seleniumhq.org/download/Запускаем SeleniumRCjava –jar selenium-server.jarГотово, запускаем тесты!
Немного о том, как все устроено
Клиенты для RCTesting_SeleniumПростой клиент на PHP для Selenium RCНужно использовать TestCaseи TestSuitот PHPUnitЗато большая гибкостьPHPUnit_seleniumГотовый «продукт-расширение» для PHP и SeleniumTestCaseи Selenium в одном лице
ЛокаторыЛокатор - это строка, уникально идентифицирующая UI-элемент.Виды:id=<element_id>name=<element_name>dom=<dom_object>link=<link_text>xpath=<xpath_locator>css=<css_path>
ID<input type=text id='some_input_id' name='some_input_name' value='' />Самый быстрый по нахождениюСамый «уникальный» из локаторовЛокатор: id=some_input_id
Name<input type=text id='some_input_id' name='some_input_name' value='' />Быстрый по скоростиХорошая уникальность, но меньше чем у idИспользуется, как правило, для полей формыname=some_input_name
Link<a href='http://some_url'>Йассылко</a>Используется для ссылокЕсли ссылки не уникальны, то кликнет по первойLink=ЙассылкоМожно использовать Link=Йассылко*
DOMdom=document.forms['myForm'].myDropdowndom=document.images[56]Использует DOM-деревоМедленный и неудобный
XPathxpath=//table[@id='table1']//tr[4]/td[2]xpath=//input[@name='name2' and @value='yes']xpath=//*[text()="right"]Универсальный для любых объектовМедленный, особенно если длинный, и особенно если IEИзбегайте полных путейИщетсявсе первое //table/tbody/tr/td/a
CSScss=form[name=second_form]Основан на описании таблиц стилейУчитывает иерархиюБыстрее чем Xpath, поэтому используйте CSS 
Выбираем тип локатораИспользуем указание типа локатора (id=, name=, link=, xpath=, css= )Если тип не задан:Если локатор начинается с '//', то используется XPath. Если нет какого-либо префикса, то элемент ищется по ID Если элемент с заданным ID отсутствует, то элемент ищется по атрибуту name.
Средства для поискаFireBugXpath Checkerhttps://addons.mozilla.org/en-US/firefox/addon/1095/Selenium IDE
Selenium APIУправление сессией (Util)Действия (Action)Проверки (Getы, Isы)Ожидания (Wait)
Управление сессиейstart() – запускаем сессиюstop() – останавливаем сессиюsetTimeout() – таймаут для ожидания ответа от браузераsetSpeed() – скорость, с которой RC посылает команды браузеру
Action. Страницаopen( $url ) – открывает $url в текущем окнеgoBack( ) – вернуться назад (по истории в браузере)refresh( ) – обновить страницу в текущем окнеclose( ) – кликнуть «Закрыть» на всплывающих в popup-окнахopenWindow( string $url, string $windowID) – открыть всплывающее окно, потом выбрать с помощью selectWindow( string $windowID)
Action. Компонентыtype( string $locator, string $value) – устанавливает $value в любой input fieldclick( string $locator) – кликает на link, button, checkbox илиradio buttonclickAt( string $locator, string $coordString) - кликает на link, button, checkbox или radio button, учитывает позицию (’10,20’)submit( string $formLocator) – отправить форму
Action. Компонентыcheck( string $locator) – установить checkbox, отличается от click!!!uncheck( string $locator) – убрать выделение checkboxselect( string $selectLocator, string $optionLocator) – выбрать значение в спискеremoveSelection( string $locator, string $optionLocator) – удалить выбранное значениеremoveAllSelections( string $locator) – удалить все значения (для множеств. списков)
Action. Другие фишкиrunScript( string $script) – выполнить скрипт на страницеdoubleClick( string $locator) – двойной клик по всему, чему можноdoubleClickAt( string $locator) – двойной клик по всему чему нужно с координатами
Ожидания (Wait)waitForCondition( string $script, string $timeout)waitForPageToLoad( string $timeout)waitForPopUp( string $windowID, string $timeout)waitForFrameToLoad( string $frameAddress, string $timeout)
Получаем информацию со страницыisChecked( string $locator)isEditable( string $locator)isElementPresent( string $locator)isOrdered( string $locator1, string $locator2)
Получаем информацию со страницыarray getAllButtons( )array getAllFields( )array getAllLinks( )getBodyText( )getText( string $locator)getTitle( )getValue( string $locator) – возращает значение атрибута value
Презенташка!!!<?phprequire_once 'PHPUnit/Extensions/SeleniumTestCase.php';class Example extends PHPUnit_Extensions_SeleniumTestCase{  protected function setUp()  {    $this->setBrowser("*googlechrome");    $this->setBrowserUrl("http://allsoft.ru/");}  public function testMyTestCase()  {    $this->open("/");    $this->type("q", "kaspersky");    $this->submit("name=search");    $this->waitForPageToLoad("30000");$this->assertTrue($this->isTextPresent("Kaspersky Internet Security"));  }}?>
ВопросыPavel.Stashevskiy@softline.ruSkype: pavel.stashevsky_sl

Selenium: начало работы