Подтвердить что ты не робот

Переход селена 1 в селен 2

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

  • Сколько было усилий, связанных с изменениями #, чтобы разместить 2 функции. Методы/изменения API #
  • Сколько было усовершенствований в плане времени выполнения тестов в Selenium 2
  • Любые лучшие практики/совместное обучение будут полезны
4b9b3361

Ответ 1

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

Плюсы:

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

Минусы:

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

Другие отличия:

  • Элементы страницы, к которым вы обращаетесь, должны быть "видимыми" на странице в тот момент, когда вы попросите селен найти их. Например, если у вас есть меню (содержащее список ссылок), которое открывается при наведении указателя мыши, вы должны убедиться, что оно открыто/видимо, прежде чем нажимать на ссылку внутри (что не было в Selenium 1). Это используется, поскольку вы будете тестировать то, что пользователь увидит на странице, но требует дополнительного кода. Я нашел два решения:
    • запустите Javascript, который откроет ваше меню, в моем случае driver.execute_script("document.getElementById('dashboard_menu_navigation').show()"), затем щелкните пункт меню driver.find_element_by_link_text('Orders').click()
    • используйте классы "Мышь/Клавиатура" для имитации реального взаимодействия, это, кажется, сломано в привязках 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 на момент написания), все это довольно годные к употреблению.

Надеюсь немного сэкономить...

Ответ 2

Переход от селена 1 к селену 2 происходит как бы простое перемещение из

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

to

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

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

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

Ответ 4

Вы можете использовать класс 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