Как стать автором
Обновить
103
0
Алексей Баранцев @barancev

Пользователь

Отправить сообщение
Математики там хватает. Для наглядности рекомендую сразу посмотреть более позднюю монографию 2008 года (где, правда, Петренко в соавторах нет, но идеи развиваются те же самые и написана монография сотрудниками его отдела) Теория соответствия для систем с блокировками и разрушением
Весьма утилитарное отношение к науке. Не всё и не сразу имеет прикладную ценность (приносит пользу).

Майкл Болтон — популяризатор, а не учёный. Кем Кэнер — тоже отличный популяризатор, но и учёный тоже. Однако многие ли его научные труды Вы читали или хотя бы можете назвать?

С другой стороны, загляните на сайт, например, кафедры высшей алгебры МГУ, посмотрите на темы исследований, и задайтесь вопросом — они там вообще приносят пользу или только диссертации защищают? Ах, не приносят? Ну так разогнать дармоедов!
И, да — WebDriver и Selenium RC это два принципиально разных инструмента. Я об этом писал в предыдущей статье, и ещё есть статья полуторагодовой давности, которая была написана сразу после выхода Selenium 2.0, в которой я постарался описать различия: «Раз селениум, два селениум»
Умеет в IE, FF, Chrome.
Драйверы для Opera, Safari, iOS, Android пока не поддерживают загрузку файлов.
Хм… что-то хабр неудачно импорты отформатировал в коде…
Файловые поля ввода заполняются точно так же, как и другие поля — методом sendKeys, в качестве параметра передаётся путь к файлу (диалог выбора файла при этом обрабатывается автоматически).

Пример (код на Grrovy):

import org.openqa.selenium.* import org.openqa.selenium.firefox.* import java.util.concurrent.* driver = new FirefoxDriver() driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS) driver.get("http://www.htmlcodetutorial.com/forms/_INPUT_TYPE_FILE.html") driver.findElementByName("upfile").sendKeys("c:\\windows\\win.ini") driver.findElementByCssSelector("td.content input[type='submit']").click()
WebDriver умеет работать с диалогом загрузки файлов НА сервер (то есть умеет заполнять поля ввода типа file, но не умеет загружать файлы С сервера. Есть такая проблема. Но я же не утверждаю, что WebDriver идеален :)
>>> Вот тут решение вопроса, как можно автоматизировать нажатие кнопки save.

Вы не путаете сохранение кода страницы и загрузку файла? Однако и то и другое выходит за пределы возможностей Selenium, поэтому…

>>> Я вижу на stackoverflow постоянно встречаются вопросы, как закачать файл и многие советуют для этого Селениум.

… те, кто даёт такие советы — лучше бы не давали. Желающим рекомендую ознакомиться вот с этой статьёй: How To Download Files With Selenium And Why You Shouldn’t @ Lazery Reflections. В ней описаны не все возможные способы загрузки файлов, но всё таки это наиболее удачное описание проблемы и способов её решения.
>>> Для них это единственный инструмент парсинга?

Что Вы имеете в виду? Ещё раз: Selenium WebDriver — это драйвер браузера. Взаимодействие с веб-сервером, парсинг, рендеринг страниц, интерпретацию JavaScript-кода — всё это делает браузер. А Selenium всего лишь предоставляет интерфейс для управления браузером.

>>> А почему джависты так любят Селениум?

Правильнее спросить наоборот — почему те, кто разрабатывают тесты на Selenium, предпочитают Java?

Причин как минимум две. Во-первых, реализация всех новых фич в Selenium сначала делается на Java, отлаживается, тестируется, и только после этого фича реализуется в клиентах на других языках. Почему в качестве основного языка выбран Java? Так исторически сложилось :)

Во-вторых, для языка Java разработано больше разных расширений и надстроек над Selenium. Хотя для Ruby, скажем, их тоже немало.
1. В рамках проекта Selenium клиент для языка PHP не разрабатывается. Есть целых пять независимых разработок, они описаны вот в этой статье: element34.ca/blog/a-survey-of-the-php-and-selenium-landscape, но ни одна из них не является «официально рекомендованной».

Я обычно пишу на Java, иногда на Ruby, изредка на Python. Поэтому про PHP вряд ли смогу помочь советом.

2. Отправить последовательность команд Control-S можно (я думаю, Вы имели в виду именно это сочетание клавиш?) — driver.findElement(By.tagName(«body»)).sendKeys(Keys.CONTROL + «s»), но после этого появится диалоговое окно, с которым Selenium WebDriver уже работать не умеет, и придётся привлекать дополнительные библиотеки, с помощью которых можно ввести в это окно нужное имя файла и подтвердить сохранение.
1. Про «глюк»: попробуйте использовать новую экспериментальную стратегию ожидания, про неё написано внизу этой странички — code.google.com/p/selenium/wiki/FirefoxDriver

2. С маками не помогу, не имею опыта работы с этой системой.

3. Чтобы «сграбить все линки» достаточно использовать простейший поиск: driver.findElements(By.tagName(«a»)). Или Вы что-то иное имеете в виду? Загрузить все страницы, на которые ведут ссылки? Ну так это уже не задача Selenium, а Ваша задача — написать «граббер», используя библиотеку Selenium WebDriver.

4. Метода для сохранения страницы нет. Есть метод для получения кода страницы — driver.getPageSource(). Только имейте в виду, что это уже будет не то, что было написано в оригинальном коде, а что-то типа «дампа DOM».
1. Используйте Selenium Grid. Если не хочется разворачивать кластер самостоятельно — запускайте в облаках.

2. IE пока не получается запускать больше двух экземпляров на одной машине, это известная проблема. Мы надеемся, что когда разработчики из MS подключатся к проекту, удастся это решить.

Браузеры Firefox и Chrome без особых проблем могут работать в количестве 5-10 штук на одной машине. Некоторые запускают и больше. У нас в баг-трекере есть даже жалоба на то, что «не удается запустить больше 200 браузеров на одной машине, пожалуйста, уберите это ограничение!» :)

Зависаний при этом быть никаких не должно. Но некоторые штуки типа выпадающих меню и прочей динамики могут работать некорректно. Частично по вине Selenium, частично потому, что если браузер не в фокусе, то события срабатывают иначе, чем тогда, когда он в фокусе. Например, onblur вообще не срабатывает, это правильное документированное поведение браузера. Так что если есть AJAX — см. совет под номером 1.
Оба можно. В рамках проекта Selenium помимо драйверов для реальных браузеров разрабатывается также драйвер для HtmlUnit, который, конечно, работает без всяких окошек.

Кроме того, есть проект GhostDriver, который представляет собой независимую реализацию интерфейса WebDriver как раз для PhantomJS. Есть вероятность того, что в какой-то момент он войдёт в состав проекта Selenium. На данный момент GhostDriver проходит успешно чуть более 90% официальных тестов для WebDriver (последняя цифра, которую я видел, была 91.64%).

Чем это лучше? Почему нельзя просто использовать PhantomJS? Можно, конечно. Вся фишка Selenium — в едином интерфейсе. Хотите — запускаете тесты в реальном браузере, хотите — запускаете те же самые тесты в PhantomJS через GhostDriver.
Это не имеет прямого отношения к инструментам семейства Selenium, задача запуска тестов как правило решается силами серверов сборки и непрерывной интеграции (Jenkins, TeamCity, TFS или ещё какого-нибудь). Поэтому вопрос к вашему серверу непрерывной интеграции — может ли он запускать тесты от лица разных пользователей?

С другой стороны, не так важно, под каким пользователем запускаются тесты. Гораздо важнее, от лица какого пользователя запускается браузер. Поэтому — строим Selenium Grid, а в его узлах запускаем сервера Selenium от лица нужных пользователей. Теперь стартуем тесты, и они выполняются в браузерах, которые работают под нужной учёткой.
Интерфейс сервера непрерывной интеграции теперь здесь: ci.seleniumhq.org:8080/
Кроме того, имеется альтернативный интерфейс: dashboard.ci.seleniumhq.org/

Про драйвер Firefox можно почитать вот тут: selenium2.ru/news/59-marionette-is-the-future-of-firefoxdriver.html

Передача драйверов в ведение компаний-вендоров имеет как плюсы, так и минусы. Плюсы в основном технические — они всё-таки лучше разбираются во внутренностях браузеров. Минусы в основном организационные, например — нецентрализованный баг-трекер, у каждого свой, это весьма неудобно.
1) code.google.com/p/selenium/wiki/ChromeDriver
и в частности
code.google.com/p/selenium/wiki/ChromeDriver#Overriding_the_Chrome_binary_location

2) Драйвер для Firefox при каждом запуске создаёт новый чистый профиль, поэтому долго стартует. Запустите браузер один раз, и используйте полученный инстанс драйвера во всех тестах.

3) WebDriver автоматически дожидается загрузки страницы. Но если у вас AJAX — это не помогает. Ожидайте появления нужного элемента, прежде чем с ним работать. Не используйте sleep!

4) Официальная документация для питона находится тут: selenium.googlecode.com/svn/trunk/docs/api/py/index.html
Про продолжение обещать не буду, заглядывайте на сайт, посвященный selenium (ссылка у меня в профиле), более технические статьи я обычно публикую там.

А на второй вопрос вкратце отвечу. Именно для этой цели предназначен Selenium Grid. Делаем кластер с пятью узлами. Для запуска тестов используем фреймворк, который умеет запускать тесты в параллельных потоках. Нацеливаем тесты на кластер — профит!

Если свой кластер строить не хочется — можно запускать тесты в облаках.
Я понимаю, что Вам очень хочется похвалить Sahi? :)
Хороший инструмент, кто же спорит.
Но всё-таки расскажите, в чём состоят заимствования?
Если учесть, что Selenium 2.0 (aka WebDriver) релизнулся впервые всего полтора года тому назад — сложно было его «давно пробовать», так что — наверняка о разных :)
Я имею в виду, что в дополнение к TestWatcher'у, который снимает скриншоты, было бы хорошо сделать аналоги для других тестовых фреймворков.

Информация

В рейтинге
Не участвует
Откуда
Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность