Селен 1 в Селен 2 Миграция - PullRequest
       30

Селен 1 в Селен 2 Миграция

12 голосов
/ 17 апреля 2011

Селен 2 был в бета-фазе в течение последних нескольких месяцев. Хотелось бы узнать, есть ли у кого-нибудь из нас анализ / переход с селена 1 на селен 2

  1. Сколько было предпринято усилий с точки зрения изменений # для размещения 2 функций. Методы / изменения API #
  2. Сколько было улучшений с точки зрения времени выполнения тестов в Selenium 2
  3. Были бы полезны любые передовые практики / обмен знаниями

Ответы [ 4 ]

21 голосов
/ 17 мая 2011

Сам переживаю переход.Если у вас был опыт Selenium 1, Selenium 2 на самом деле чувствует себя совсем иначеВот мои плюсы и минусы Selenium 2 против Selenium 1, которые я пока вижу (я использую Python, поэтому некоторые из них специфичны для Python):

Плюсы:

  • Гораздо быстрее.
  • Нет необходимости запускать отдельный сервер.
  • Ушли: wait_for_page_to_load (), wait_for_element_present () и т. Д. Все взаимодействия элементов, клики и т. Д. Теперь блокируются, что хорошо.Единственная проблема связана с асинхронно загружаемым контентом (Ajax), см. Ниже:

Минусы:

  • Загрузка / ожидание асинхронного контента, который раньше был «свободным»с wait_for_page_to_load () теперь требует кодирования.Вот решения, которые я нашел до сих пор:
    • использовать PageFactory / AjaxElementLocatorFactory, как объяснено здесь , к сожалению, я не смог найти эквивалент для Python.
    • использовать webdriver.implicitly_wait(N), похоже, что это делает трюк с Python, но использование этого, по-видимому, приводит к тому, что мой скрипт пропускает изменения элементов, которые он раньше обнаруживал.
    • не делает sleep (T), цикл до элементапоявляется и т. д., что побеждает цель всего этого (и делает wait_for_page_to_load красивым) ...
  • Все это все еще кажется немного сырым.Разные драйверы и привязки, кажется, пропускают разные функцииНе сказать, что вы не можете использовать его, но будьте готовы найти «альтернативные решения» для определенных проблем.
  • Документация немного сомнительна (я думаю, что она относится к предыдущей точке).Специально для Python.Будьте готовы читать код и много экспериментировать (что, к счастью, легко с Python).Большинство «учебных пособий», которые вы найдете в Интернете (опять же, особенно на Python, Java, кажется, гораздо лучше освещены), предназначены только для того, чтобы начать работу с простейшими веб-приложениями.
  • Нет привязок PHPНе большой, я предпочитаю Python, но наш оригинальный набор был PHP, поэтому я заметил.
  • SeleniumIDE кажется бесполезным с Selenium 2.

Другие различия:

  • Элементы страницы, к которым вы обращаетесь, должны быть «видны» на странице в тот момент, когда вы просите селен найти их.Например, если у вас есть меню (содержащее список ссылок), которое открывается, когда вы наводите указатель мыши, вы должны убедиться, что оно открыто / отображается, прежде чем щелкнуть ссылку внутри (чего не было в Selenium 1).).Это используется, так как вы будете тестировать то, что пользователь увидит на странице, но вам потребуется дополнительный код.Я нашел два решения:
    • запустить Javascript, который откроет ваше меню, в моем случае driver.execute_script("document.getElementById('dashboard_menu_navigation').show()"), затем щелкните пункт меню driver.find_element_by_link_text('Orders').click()
    • , используйте классы Mouse / Keyboard для имитации реального взаимодействияэто, кажется, нарушено в привязках Python (см. «Минусы» выше):

Пример (который генерирует 'WebElement' object has no attribute 'mouse_move_to' сегодня):

element=driver.find_element_by_id('mn_dashboard')
mouse=Mouse()
mouse.move_to(element)

Список минусов кажется длиннее, но это в основном, если вы пришли из Selenium 1. Я предпочитаю легкость и скорость Selenium 2, и, несмотря на ранний код (использующий 2.0b4 на момент написания), все это вполне пригодно для использования.

Надеюсь спасти кого-нибудь когда-нибудь ...

10 голосов
/ 18 апреля 2011

Переход от Selenium 1 к Selenium 2 так же просто перейти от

Selenium selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.example.com");
selenium.open("/");

к

Webdriver driver = new FirefoxDriver();
Selenium selenium = new WebDriverBackedSelenium(driver, "http://www.example.com");
selenium.open("/");

Поскольку Selenium 2 более тесно связан с браузером, вы увидите огромную разницу.Я видел, как тесты выполнялись, по крайней мере, в 2 раза быстрее, но в некоторых случаях я видел, что они работают в 4 раза быстрее.

Все те же самые лучшие практики, которые вы изучили во время Selenium, будут переведены через

1 голос
/ 21 ноября 2011

Вы можете использовать класс WebDriverBackedSelenium для преобразования интерфейса WebDriver в интерфейс Selenium:

Selenium selenium = new WebDriverBackedSelenium(webDriver, baseUrl);

или вы можете использовать метод getUnderlyingWebDriver () для преобразования интерфейса Selenium в интерфейс WebDriver:

WebDriver webDriver = ((WebDriverBackedSelenium)selenium).getUnderlyingWebDriver();

Я разместил слайды одной из моих недавних презентаций о том, как начать работу с Selenium 2, здесь:

http://www.slideshare.net/sebarmeli/getting-started-with-selenium-2

Одной из лучших практик в Selenium 2 является шаблон PageObject.

Если вы используете Java и Maven, вы можете попробовать этот плагин Archetype (который также дает вам первый вкус к шаблону PageObject):

https://github.com/sebarmeli/Selenium2-Java-QuickStart-Archetype
1 голос
/ 24 сентября 2011

Слайды, которые тоже могут помочь, размещены здесь:

http://www.slideshare.net/rogerjhu1/lessons-learned-migrating-tests-to-selenium-v2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...