Selenium vs AJAX
Upcoming SlideShare
Loading in...5
×
 

Selenium vs AJAX

on

  • 6,013 views

 

Statistics

Views

Total Views
6,013
Views on SlideShare
4,771
Embed Views
1,242

Actions

Likes
2
Downloads
70
Comments
0

2 Embeds 1,242

http://seleniumcamp.com 1240
http://webcache.googleusercontent.com 2

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Selenium vs AJAX Selenium vs AJAX Presentation Transcript

  • Selenium vs AJAX [Crash Course] Алексей Баранцев Software-Testing.Ru SeleniumCamp 2012
  • Я буду рассказывать про WebDriverПотому что за нимбудущее
  • Это курс уровня 300 Я предполагаю, что вы: понимаете, что WebDriver это не Selenium RC :) в целом знаете интерфейс WebDriver хорошо знаете, что такое DOM немного знаете JavaScript
  • «Клеточный уровень» автотестов
  • Тесты на «клеточном уровне» Подожди, пока можно Выполни выполнить действие действие Подожди, Выполни пока будет проверку готов результат
  • Подожди, пока… Загрузится страница Появится элемент Элемент станет видимым Элемент исчезнет Появится alert Появится окно…
  • Подожди, пока…загрузится страница
  • Завершение загрузки страницыFF, Chrome, IE, Opera – загрузка синхронная завершение определяется «автоматически» selenium.waitForPageLoad(" 30000 "); – не работает, если есть long poll или типа того
  • Завершение загрузки страницыFF – режим асинхронной загрузки FirefoxProfile fp = new FirefoxProfile(); fp.setPreference("webdriver.load.strategy", "unstable"); // до версии 2.19 было "fast"HtmlUnit client.setRefreshHandler(new WaitingRefreshHandler());
  • Подожди, пока…появится элемент
  • Но сначала – пропоиск элементов
  • Методы поиска(методы «отбора»)driver.findElementdriver.findElementselement.findElementelement.findElements
  • Встроенные стратегии поискаidnametagNameclassNamexpathcssSelectorlinkText
  • Забудьте про код страницы!
  • Selenium работает с DOM!
  • AJAXСложная структура DOMDOM строится динамическиDOM меняется!!!Нет уникальных id или nameВообще нет id или name
  • Подожди, пока…появится элемент
  • «Найден» – не значит «виден»! http://foto.rambler.ru/users/timnbjj/tags/12/4e27c513-38f7-092a-b29e-38e697847dcd/
  • «Виден» – не значит «доступен»!
  • Состояния элемента Отсутствует (не найден) Есть, но невидимыйЕсть, видимый, но не Есть, видимый, можно interactable выполнять действия Был, но удалён из DOM
  • Видимость элементаbot.dom.isShown = function(elem, opt_ignoreOpacity) { // Title elements are shown if and only if they belong to the bot window. // Option or optgroup is shown iff enclosing select is shown. // Map is shown iff image that uses it is shown. // Area is shown iff enclosing map is shown. // Any hidden input is not shown. // Any element with hidden visibility is not shown. // Any element with a display style equal to none or that has an ancestor // with display style equal to none is not shown. // Any transparent element is not shown. // Any element without positive size dimensions is not shown. // Zero-sized elements should still be considered to have positive size // if they have a child element or text node with positive size.
  • Имплицитные ожиданияdriver.manage().timeouts() .implicitlyWait(10, TimeUnit.SECONDS);dialog = driver.findElement(By.id("dialog-confirm-delete"));методы поиска становятся синхроннымиfindElements ищет хотя бы один элементожидание – на стороне браузера
  • Когда это не работаетнадо просто проверить наличие элементанадо найти один (любой) элемент из двухожидание исчезновения элемента
  • Эксплицитные ожиданияWebDriverWait + ExpectedConditionnew WebDriverWait(driver, 30).until( presenceOfElementLocated(By.id("dialog-confirm-delete"))); public static ExpectedCondition<WebElement> presenceOfElementLocated(final By locator){ return new ExpectedCondition<WebElement>() { public WebElement apply(WebDriver driver) { return findElement(locator, driver); } }; }
  • Подожди, пока… [что угодно]
  • Подожди, пока… Загрузится страница Появится элемент Элемент станет видимым Элемент исчезнет Появится alert Появится окно…
  • ExpectedConditions: готовые условия Загрузка страницы wait.until(titleIs("New page title")); Появление элемента wait.until(presenceOfElementLocated(locator)); Видимость элемента wait.until(visibilityOfElementLocated(locator)); Невидимость элемента wait.until(invisibilityOfElementLocated(locator)); Исчезновение элемента из DOM wait.until(stalenessOf(element));
  • Тонкая настройкаWebDriverWait – это FluentWait<WebDriver>withTimeout(timeOutInSeconds, TimeUnit.SECONDS);pollingEvery(sleepTimeOut, TimeUnit.MILLISECONDS);ignoring(NotFoundException.class);
  • WebElementWaitFluentWait<WebElement> public static Predicate<WebElement> displayed = new Predicate<WebElement>({ public boolean apply(WebElement el) { return el.isDisplayed(); }};new WebElementWait(element, 30).until(displayed);
  • Ожидание появления алертаwait.until(ExpectedConditions.alertIsPresent());
  • Как проверить отсутствие?в FF ожидание алерта «полусинхронное» driver.switchTo().alert() ждёт две секунды
  • Альтернатива: автоперехват любое действие может завершиться с UnhandledAlertException зато больше нет «вечной блокировки» на неожиданных алертах
  • Ожидание открытия нового окна
  • Ожиданиеоткрытия окна Нет готового ExpectedCondition Почему? Потому что его нельзя сделать Надо сначала запомнить driver.getWindowHandles()  потом кликнуть  а потом ждать, когда изменится список окон
  • Ещё немного про окнаНе переключайтесь слишком быстро! http://code.google.com/p/selenium/issues/detail?id=2764
  • Ещё немного про окнаНе забудьте переключиться обратно после закрытия окна
  • Действия с элементами
  • «Традиционные» действиякликнуть ссылки радиобатоны и чекбоксы спискиввести текстприцепить файл
  • Действия «с JavaScript’ом» клавиатурные сочетания ввести текст «п о с т е п е н н о» правая кнопка мыши перетаскивание наведение мыши двойной клик
  • Что умеет WebDriverclicksendKeysи всё 
  • Что умеет WebDriverselect? это несколько кликовtoggle? это просто clickcheck/uncheck? это просто click
  • «Сахар», впрочем, не мешаетclear для полей вводаsubmit для любого элемента формы Пользователь не может этого сделать!!!
  • «Сахар», впрочем, не мешаетnew Select(selectElement) selectByText(text) – с нормализацией пробелов selectByValue(value)
  • click: подробностиНа что можно кликнуть?Невидимые элементы: как по ним кликать?Какие обработчики сработают? клик поднимается вверх по DOM’у по крайней мере должен Координаты клика? левый верхний угол? центр?
  • Автоскроллирование
  • sendKeys: подробности  Где можно нажимать клавиши?  Как заполнить невидимое поле?  Какие обработчики сработают?  поднимаются вверх по DOM’у  по крайней мере должны 
  • Почему так медленно???каждая клавиша отдельноkeyDown, keyUp, keyPressособенно заглавные буквы!!!
  • А можно ли быстро? http://art-apple.ru/displayimage.php?album=13&pos=4
  • Native vs SynthesizedFirefoxProfile p = new FirefoxProfile();p.setEnableNativeEvents(false);
  • sendKeys для «нетекста» <input type=“file”> ENTER/RETURN стрелки и прочая навигация Keys.chord «хоткеи» Ctrl-A/Ctrl-C/Ctrl-V быстрая вставка
  • Actions: тонкие действия сlick contextClick moveToElement не персистентно!!! clickAndHold/release dragAndDrop sendKeys keyDown/keyUp
  • Ещё более тонкие действия Координаты moveToElement moveByOffset dragAndDropBy Действия «без элемента» click clickAndHold/release sendKeys keyDown/keyUp
  • Алексей Баранцев, Software-Testing.Ruemail: barancev@gmail.comskype: barancevhttp://software-testing.ru/test_automation/http://software-testing.ru/trainings/http://selenium2.ru/