Сам переживаю переход.Если у вас был опыт 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 на момент написания), все это вполне пригодно для использования.
Надеюсь спасти кого-нибудь когда-нибудь ...