Java vs Python в автоматизации с Selenium

Это правильно подмечено, кросс-платформенность - это далеко не главный плюс Java, так как практически все компилируемые языки имеют компиляторы на всех распространённых платформах, но за что она получила распространение - она даёт меньше способов выстрелить себе в ногу в ввиду Динамического управления памятью (в отличие от С/С++ программист не думает о выделении памяти и сборке мусора).
Ценность Java больше в JVM, чем в самом языке. JVM дало рождение многим языкам подходящих для автотестов, например: Groovy, Jython, Scala, возможно в будущем Kotlin

За рубежом почему-то автоматизация на Python примерно так же распространена, как и на Java .
В СНГ - Java идет с большим отрывом.


Тема о Селениуме. Вопрос касается только тестирования с использованием Селениума. А вы куда-то дальше пошли. Учить питон для работы с вебдрайвером - это 1-2 вечера плотно посидеть с примерами. Дойдет автор до десктопа - появится топик: “Язык1 vs Язык2 в автоматизации тестирования Десктоп приложений”.

С лямбдами это вы явно промахнулись :smile: Ну а мавен я бы не назвал таким уж преимуществом, мавен\gradle и етс. это именно то что отталкивает меня от использования Java. Ну не охото мне писать всякие pom файлы чтобы тупо собрать программу или подтянуть зависимости. Но если вам нравится лепить абстракции, почему бы и нет :slight_smile:

P.S.: Недавно пощупал Kotlin от JetBrains, язык на jvm но гораздо приятнее чем Java по синтаксису. Кто еще не пробовал крайне рекомендую пощупать :slight_smile:

2 лайка

Не ну C++ однозначно хорош, но не будете же вы на нем писать автотесты :slight_smile:

Как раз на С++ три года и писал автотесты в скайпе ) Сейчас 50 на 50, некоторые тесты в С++ идут, некоторые на питоне, но даже тот питон что есть, это уже не совсем питон. Там нету ниодной строчки, которая на вызывает Windows API и не обращается к каким-то dll. Ну как-то так, я просто очень не долго в своей карьере тестировал что-то в браузере. Чаще это были тесты либо на уровне web api, либо уж напрямую с сетевым протоколом работал и каким-то клиенстким api.
Выше подмечено верно - Java осталась жить только в СНГ… и в Лондоне наверное. Вобщем везде где аутсорсят веб морды и в банках. В других местах она как-то просто пытается выжить. Питон популярен, очень. Руби - это больше азия и немного конкурент питону в штатах, но проигрывает всё больше и больше. С# на нем наверное в основном микрософт тесты для офисных приложений пишет, а так редко вообще кто говорит, может с недавним переходом на баш в винде ситуация начнет меняться, но я сомневаюсь. Скорее всего С++ 17 перебьет, так как по синтаксису он уже больше напоминает какой-то современный язык скриптования, чем тот старый олдскульный С. Один раз за 10 лет я встречал живой проэкт на Дэлфи.

1 лайк

Про Лямбды я имел в ввиду используется в контексте :
SeleniumElement element = driver.findElements(By.cssSelector(".class")).stream().filter(e -> e.getName().equals(“yourString”).collect(Collectors.toList());
Удобнее же…

filter(lambda e: e.tag_name == "yourString", driver.find_elements(By.CSS, ".class"))
# или
[e for e in driver.find_elements(By.CSS, ".class") if e.tag_name == "yourString"]

Не вижу чем ваш пример удобнее чем то что я написал выше. Да в питоне нет такой штуки как stream (хотя вроде где то на просторах интернетов что то похожее видел в виде либы), но подход с фильтром или генератором выглядит просто, да и тексту меньше :slight_smile:

В принципе да, выражения эквивалентны, но если Stream заменить ParalelStream, то операция выполнится гораздо быстрее на Java, так как ParalelStream превращает операцию в Map Reduce, очень актуально при работе с блоками
<‘div’>
"<‘ul’>
<‘li’>… (Over дофига)

Так про скорость не кто и не спорит :slight_smile: Вопрос в другом, а оно вам что даст кроме выигранных нескольких мс? На сколько часто у вас возникнет такая ситуация?

Не пишите то, о чем не знаете наверняка. parallel далеко не всегда ускоряет выполнение кода. Более того, в неумелых руках может еще и значительно замедлить. Не говоря уже о том, что некоторый код может в принципе не параллелиться, что в итоге сломает весь ваш stream.

Приведите несколько конкретных примеров JMH benchmarks для различных операций над коллекциями web-элементов, тогда и поговорим о скорости.

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

Открою секрет - есть возможность “на лету” вносить правки в Java код, не останавливая приложение под дебагом

Всё это субъективно. Я в своё время начал с питона, но он у меня никак не пошёл и не прижился хоть и неоднократно к нему подступался с разных сторон. Java, c другой стороны пошла за милую душу. ХЗ в чём проблема. Перейду на питон только в случае крайней необходимости.

1 лайк

просветите? не совсем понимаю как это делать. если ,class собирается перед каждым запуском
Если вы говорите про эвуалейт, то это не всем то, что позволяет делать питон

Как минимум IDEA можно настроить так, что находясь под дебагом можно изменить код, IDEA его скомпилит и “на горячую” заменит в рантайме jvm

А есть кокретный мануал как это сделать?было бы очень полезно!

10 секунд в гугле:
https://www.jetbrains.com/help/idea/2016.2/reloading-classes.html

1 лайк

Спасибо, попробую! Это же меняет дело.

попробовал, через раз этот метод работает, и очень долго думает при пересборке(на фоне питона).

Не имеет никакого значения, на каком языке вы пишете тесты. Вы в первую очередь решаете не свою проблему, а проблему бизнеса.

Иногда бизнес требует, чтобы тесты были легко читаемы человеком с улицы , иногда, чтобы тесты могли поддерживаться разработчиками. Как бы то ни было, выбор не берется из воздуха: это, как правило, чисто индивидуальная особенность проекта. Я мог написать на новом месте работы тесты на Java\Selenide, например. Но уже имея стек технологий в тестировании из PHP, JS, тащить в тестовую среду на все машины Java - которое выходит за рамки LAMP-технологий - некошерно. PHP - имеет не очень актуальные версии вебдрайвера (поддерживаемые третьими сторонами), остается Nighwatch.js или Selenium Python. Т.к. Selenium де факто стандарт сейчас на рынке, выбор остановился на Питоне и Селениуме.

Написать код и запустить его что на Джаве что на Питоне - разница буквально в 1 дне вникания того, как это работает на другом языке. Дальше по факту развернутой тестовой инфраструктуры будут возникать вопросы, которые абсолютно аналогичны для обоих языков. И вопросы эти будут отличаться лишь заменой python<>java в поисковом запросе к Гуглу,

3 лайка