Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Selenium 2.0: обзор новых возможностей

10,604 views

Published on

  • Be the first to comment

Selenium 2.0: обзор новых возможностей

  1. 1. Selenium 2.0: новые возможности Павел Сташевский, Тестировщик [email_address]
  2. 2. План мероприятия <ul><li>Что такое Selenium 2.0 и как он появился? </li></ul><ul><li>Архитектура Selenium 2.0 </li></ul><ul><li>Возможности, преимущества и недостатки </li></ul><ul><li>Обзор Selenium 2.0 API </li></ul><ul><li>Вопросы-ответы </li></ul>
  3. 3. Что такое Selenium 2.0? Selenium 1.0 Webdriver Selenium 2.0 merge
  4. 4. Архитектура Selenium 1.0 Автотесты ( Java, PHP, Phyton, Ruby, C#, …) Selenium RC HTTP Браузеры Web-application
  5. 5. Архитектура Selenium 2 .0 Автотесты ( Java, PHP, Phyton, Ruby, C#, …) Selenium RC HTTP Браузеры Web-application
  6. 6. Архитектура Selenium 2.0 Автотесты Браузеры Web-application
  7. 7. Архитектура Selenium 2.0 Автотесты Браузеры Web-application Driver API (ООП) для управления браузером
  8. 8. Принцип работы драйвера <ul><li>В отличие от Selenium 1.0 не ограничен JS- песочницей </li></ul><ul><li>Работает с каждым браузером «индивидуально» </li></ul><ul><li>Драйвер – это объект, которым можно управлять из тестов </li></ul>
  9. 9. Преимущества Selenium 2.0/Webdriver <ul><li>Разработка и подключение новых драйверов, адаптированных под конкретную тестовую среду </li></ul><ul><li>Убыстрение скорости выполнения тестов </li></ul><ul><li>Более «продвинутое» АПИ для написания тестов (проще писать и проще поддерживать) </li></ul><ul><li>Решение проблем версии 1.0 (принцип Паретто) </li></ul>
  10. 10. Недостатки и проблемы
  11. 11. Какие поддерживаются языки? <ul><li>Java </li></ul><ul><li>Phyton </li></ul><ul><li>Ruby </li></ul><ul><li>C# </li></ul>
  12. 12. Какие бывают драйверы? <ul><li>HtmlUnitDriver </li></ul><ul><li>FirefoxDriver </li></ul><ul><li>ChromeDriver </li></ul><ul><li>InternetExplorerDriver </li></ul><ul><li>OperaDriver ( https://github.com/operasoftware/operadriver/ ) </li></ul><ul><li>SafariDriver </li></ul><ul><li>Мобильные драйверы </li></ul><ul><ul><li>AndroidDriver </li></ul></ul><ul><ul><li>IphoneDriver </li></ul></ul>
  13. 13. HtmlUnitDriver – безбраузерный режим <ul><li>Быстрый, но не в реальном браузере </li></ul><ul><li>Реализован на java, поэтому кроссплатформенный </li></ul><ul><li>Поддерживает java script </li></ul>WebDriver driver = new HtmlUnitDriver();
  14. 14. “ Hello, world!” на Selenium 2.0 public class GoogleTest { protected WebDriver driver; @BeforeClass public void setUp() { driver = new ChromeDriver(); } @Test public void testSearch() { driver.get(&quot;http://google.ru&quot;); WebElement search = driver.findElement(By.name(&quot;q&quot;)); search.sendKeys(&quot;Selenium 2.0&quot;); WebElement btn = driver.findElement(By.name(&quot;btnG&quot;)); btn.submit(); } @AfterClass public void tearDown() { driver.quit(); } }
  15. 15. Режим совместимости с Selenium1 <ul><li>Используем WebDriverBackedSelenium </li></ul><ul><li>Используем синтаксис Selenium 1.0 с некоторыми преимуществами Selenium 2.0 </li></ul><ul><li>АПИ Selenium 1.0 маппится на Selenium 2.0 </li></ul>
  16. 16. Режим совместимости c Selenium1 WebDriver driver = new FirefoxDriver(); String baseUrl = &quot;http://book.ru&quot;; Selenium selenium = new WebDriverBackedSelenium(driver,baseUrl); selenium.open(&quot;/&quot;); selenium.click(&quot;link=chapter1&quot;); // rest of the test code
  17. 17. Selenium API <ul><li>WebDriver – для управления браузером/текущей загруженной страницей </li></ul><ul><li>WebElement – для работы с элементами на странице </li></ul>WebDriver driver = new FirefoxDriver(); WebElement element = driver.findElement(By.id(“id”));
  18. 18. WebDriver ы interface WebDriver IphoneDriver AndroidDriver RemoteWebDriver ChromeDriver InternetExplorerDriver FirefoxDriver
  19. 19. WebDriver API <ul><li>void get(java.lang.String url) – открыть страницу </li></ul><ul><li>WebElement findElement(By by) – найти элемент (если несколько, то первый) </li></ul><ul><li>List<WebElement> findElements(By by) – найти элементы по локатору </li></ul><ul><li>void quit() – закрыть сессию с браузером </li></ul><ul><li>WebDriver.TargetLocator switchTo() – переключение между popup- ми, алертами, окошками </li></ul>
  20. 20. Работа с окошками <ul><li>Работа с окошками браузера </li></ul><ul><ul><li>driver.getWindowHandles() </li></ul></ul><ul><ul><li>driver.switchTo().window(windowName) </li></ul></ul><ul><li>Работа со фреймами </li></ul><ul><ul><li>driver.switchTo().frame( &quot;frameName&quot; ); </li></ul></ul><ul><li>Работа с алертами </li></ul><ul><ul><li>Alert alert = driver.switchTo().alert(); </li></ul></ul>
  21. 21. Локаторы и поиск элементов <ul><li>By.id(&quot;idOfObject&quot;) </li></ul><ul><li>By.linkText(&quot;TextUsedInTheLink&quot;) </li></ul><ul><li>By.partialLinkText(&quot;partOfThelink&quot;) </li></ul><ul><li>By.tagName(&quot;theHTMLNodeType&quot;) </li></ul><ul><li>By.className(&quot;cssClassOnTheElement&quot;) </li></ul><ul><li>By.cssSelector(&quot;cssSelectorToTheElement&quot;) </li></ul><ul><li>By.xpath(&quot;//Xpath/to/the/element&quot;) </li></ul><ul><li>By.name(&quot;nameOfElement&quot;) </li></ul>
  22. 22. Поиск элементов <ul><li>WebElement </li></ul>Ex.1 WebElement element = driver.findElement(By.id(“id”)); Ex.2 WebElement select = driver.findElement(By.xpath( &quot;//select&quot; )); List<WebElement> allOptions = select.findElements(By.tagName( &quot;option&quot; ));
  23. 23. Работа с WebElement <ul><li>WebElement – представление HTML- элемента (тега) вместе с его содержимым </li></ul><ul><li>Действия: </li></ul><ul><ul><li>void click () – клик по элементу </li></ul></ul><ul><ul><li>void submit () – отправка формы </li></ul></ul><ul><ul><li>String getValue () – получение значения элемента </li></ul></ul><ul><ul><li>void sendKeys (keysToSend) – ввод текста в input- элемент </li></ul></ul><ul><ul><li>void clear () – очистка input- элемента </li></ul></ul><ul><ul><li>String getElementName () – получение name элемента </li></ul></ul><ul><ul><li>String getAttribute (java.lang.String name) – получение значения атрибута </li></ul></ul><ul><ul><li>boolean toggle () – клик по чекбоксу </li></ul></ul>
  24. 24. Работа с WebElement <ul><li>WebElement – представление HTML- элемента (тега) вместе с его содержимым </li></ul><ul><li>Действия: </li></ul><ul><ul><li>boolean isSelected () </li></ul></ul><ul><ul><li>void setSelected () </li></ul></ul><ul><ul><li>boolean isEnabled () </li></ul></ul><ul><ul><li>String getText () </li></ul></ul><ul><ul><li>WebElement findElement (By by) </li></ul></ul><ul><ul><li>List<WebElement> findElements (By by) </li></ul></ul>
  25. 25. WebElement для разных браузеров <ul><li>Существуют реализации WebElement для разных браузеров: </li></ul><ul><ul><li>FirefoxWebElement </li></ul></ul><ul><ul><li>InternetExplorerElement </li></ul></ul><ul><ul><li>И др. </li></ul></ul><ul><li>Они поддерживают расширенную функциональность, т.е. специализированы под конкретный браузер ( drag-and-drop, положение элементов на странице) </li></ul><ul><li>Но тогда теряется кроссфункциональность! </li></ul>
  26. 26. Работаем с Ajax <ul><li>Работа осуществляется через специальный вид элемента на странице RenderedWebElement </li></ul><ul><li>Этот элемент может как отображаться на странице, так и не отображаться </li></ul><ul><li>Если элемент не отображается, то метод findElement() не выбросит Exception </li></ul>
  27. 27. Работаем с Ajax: пример long end = System.currentTimeMillis() + 5000;     while (System.currentTimeMillis() < end) {                  RenderedWebElement resultsDiv = RenderedWebElement) driver.findElement(By.id(&quot;gac_m&quot;));      if (resultsDiv.isDisplayed()) {          break;      } }
  28. 28. Еще возможности <ul><li>Можно работать с куками </li></ul><ul><li>Можно использовать профили для Firefox </li></ul><ul><li>Можно выполнять JS на страницах </li></ul><ul><li>Поддержка HTML5 </li></ul><ul><li>И многое другое </li></ul>
  29. 29. RemoteWebDriver <ul><li>Предназначен для запуска тестов на удаленной машине </li></ul><ul><li>Для его использования нужен клиент (RemoteWebDriver) и сервер ( RemoteWebDriverServer) </li></ul><ul><ul><li>RemoteWebDriver (Capabilities desiredCapabilities) </li></ul></ul>
  30. 30. Вопросы-ответы <ul><li>Вопросы  )) </li></ul>Павел Сташевский, Тестировщик [email_address] http://stashevskiy.blogspot.com http://twitter.com/paulstashevsky

×