Size: a a a

QA — Автоматизация

2020 December 21

LY

Lev Yarushin in QA — Автоматизация
Igor
Всем привет, такая проблема: в тесте (selenium на python) нужно сделать скрины веб-версии сайта на мобильном устройстве, не просто видимой области, а всего вниз по скролу.

Проблема потому что: девайсы виртуальные на browserstack (не responsive mode в chrome), а значит: resize window и изменение масштаба не сработает (для моб. не поддерживается браузерстаком) скрин веб-элемента <body> не сработает (для моб. не поддерживается браузерстаком), скрин видимой части + скрол + скрин следующей части + склейка картинки тоже не сработает как хочется, т.к. в скрине будет адресная строка и кусок интерфейса мобильного устройства, и это все появится еще раз на месте склейки со вторым (3м,4м и тд.) скрином, убрать интерфейс не получится т.к. headless mode в моб. не поддерживается.

Готовые библиотеки скриншот-тейкеры с возможностью захвата полной страницы написаны для десктопа. Какие есть варианты (если они вообще есть)?
ЕМНИП у BS можно браузер в полноэкранном режиме запускать (kiosk-mode)
источник

I

Igor in QA — Автоматизация
Lev Yarushin
ЕМНИП у BS можно браузер в полноэкранном режиме запускать (kiosk-mode)
Для десктопного хрома - да, на мобильных эмуляторах - нет, и аналогичных настроек не нашел
источник

I

Igor in QA — Автоматизация
Алексей
ашот разве не делает скрин всей страницы?
нужно будет обращаться из тестов сначала в JPype, потом в сам Ashot, скорость тестов думаю здорово упадет, Ashot ведь только для Java есть?
источник

AS

Andrei Solntsev in QA — Автоматизация
Алексей
проорал дважды. Изоляция объекта в потоке джавы, главный бонус которой - многопоточность.  100 джава коров из 100
И в чём проблема? Да, как раз это в Java офигенно работает: 100 потоков, каждому своё значение в ThreadLocal - летает аж вжух!
источник

А

Алексей in QA — Автоматизация
Igor
нужно будет обращаться из тестов сначала в JPype, потом в сам Ashot, скорость тестов думаю здорово упадет, Ashot ведь только для Java есть?
ааа, у вас питон? Не заметил. Ну тут пробуйте со стак оверфлоу решения, там есть несколько не сильно геморных
источник

LY

Lev Yarushin in QA — Автоматизация
Igor
Для десктопного хрома - да, на мобильных эмуляторах - нет, и аналогичных настроек не нашел
тогда взять любую библилиотку для работы с изображениями и отрезать лишнее при сшивке. Можно с перекрытием делать скрины - сшивать легче
источник

SK

Sergey Korol in QA — Автоматизация
Alexei Barantsev 🗹
к сожалению, некоторые инструменты (включая популярный в местных кругах selenide) сильно на это завязаны...
Насколько я правильно помню, в Selenide драйвера не в ThreadLocal лежат, а в СoncurrentHashMap. Но связь с потоками есть по ключу, это да. Но в целом, ничего плохого в использовании ThreadLocal я не вижу (даже вне контекста драйвера). Помимо разнообразных нюансов с параллелизацией, у ThreadLocal есть один большой плюс - из него легко можно получить глобальный контейнер, лишенный классических проблем статических переменных. А это большой плюс в дизайне разнообразных оберток. Да, везде есть альтернативы. Но ThreadLocal в большинстве случаев - самый простой вариант решения сложных проблем. Другое дело, как вы уже упомянули выше, - люди частенько этим злоупотребляют. Но тут проблема не в ThreadLocal, как мне кажется. Более того, в своей собственной фабрике вы от него не отказались: https://github.com/barancev/webdriver-factory/blob/master/src/main/java/ru/stqa/selenium/factory/ThreadLocalSingleWebDriverPool.java#L28
источник

А

Алексей in QA — Автоматизация
Sergey Korol
Насколько я правильно помню, в Selenide драйвера не в ThreadLocal лежат, а в СoncurrentHashMap. Но связь с потоками есть по ключу, это да. Но в целом, ничего плохого в использовании ThreadLocal я не вижу (даже вне контекста драйвера). Помимо разнообразных нюансов с параллелизацией, у ThreadLocal есть один большой плюс - из него легко можно получить глобальный контейнер, лишенный классических проблем статических переменных. А это большой плюс в дизайне разнообразных оберток. Да, везде есть альтернативы. Но ThreadLocal в большинстве случаев - самый простой вариант решения сложных проблем. Другое дело, как вы уже упомянули выше, - люди частенько этим злоупотребляют. Но тут проблема не в ThreadLocal, как мне кажется. Более того, в своей собственной фабрике вы от него не отказались: https://github.com/barancev/webdriver-factory/blob/master/src/main/java/ru/stqa/selenium/factory/ThreadLocalSingleWebDriverPool.java#L28
У тредлокала есть один плюс - при виде кода с оным без серьезной причины можно его автора сразу откидывать из рассмотрения. Потому что глобальные переменные в целом - это зло. А глобальные потоковые переменные - особое джавистское зло. Да, когда ты один такой разраб, и пишешь код только для себя, там можно чего угодно наворотить, все равно никто не увидит, а ты более менее еще помнишь, где у тебя разложены волшебные магические штучки. А когда вас 10 человек, 10 проектов и в коде лежат такие мины - рано или поздно они начнут взрываться :) Да же при том, что типовой селен "фреймворк" - достаточно примитивная по своей сути штука.
З.Ы. Не бывает "простого решения сложных проблем". Бывают костыли, проблемы с которыми потом придется решать с еще большим гемором :) Выше - вполне себе пример этому :)
источник

SK

Sergey Korol in QA — Автоматизация
Ну с таким успехом можно сразу всех разработчиков популярных фреймворков и библиотек "откидывать из рассмотрения". Даже в ядре спринга можно встретить множество ThreadLocal'ов со статическими геттерами в мир. Но почему-то огромное количество людей его используют. И Selenide используют. Уверен, что и на фабрику Алексея есть спрос в определенных кругах. Идеального кода не существует. Да и ресурсов на его создание и поддержку, впрочем, тоже.
источник

D

Dmitry in QA — Автоматизация
+1
источник

D

Dmitry in QA — Автоматизация
тот же @ScenarioScope в кукумбере реализован через тредлокале. В тестнг тоже где-то видел. Так что это стандартный паттерн, а не какая-то дичь
источник

D

Dmitry in QA — Автоматизация
И при этом это не глобальная переменная, а часть раннера, которая наружу не торчит
источник

А

Алексей in QA — Автоматизация
Sergey Korol
Ну с таким успехом можно сразу всех разработчиков популярных фреймворков и библиотек "откидывать из рассмотрения". Даже в ядре спринга можно встретить множество ThreadLocal'ов со статическими геттерами в мир. Но почему-то огромное количество людей его используют. И Selenide используют. Уверен, что и на фабрику Алексея есть спрос в определенных кругах. Идеального кода не существует. Да и ресурсов на его создание и поддержку, впрочем, тоже.
Неа. Использование переменной, лайфсайкл которой запроектирован внутри треда разрабом спринга != хранение инстанса вебдрайвера в тредлокале потому что "самый простой вариант решения сложных проблем". Не надо мешать в одну кучу проектировочное решение (разумеется у тредлокала есть предназначение, именно поэтому его и добавляли) и пихание костылей с помощью глобал переменных(контекст для бедных) :)
источник

BO

Boris Osipov in QA — Автоматизация
Алексей
Неа. Использование переменной, лайфсайкл которой запроектирован внутри треда разрабом спринга != хранение инстанса вебдрайвера в тредлокале потому что "самый простой вариант решения сложных проблем". Не надо мешать в одну кучу проектировочное решение (разумеется у тредлокала есть предназначение, именно поэтому его и добавляли) и пихание костылей с помощью глобал переменных(контекст для бедных) :)
так. панимаю. так где там грань между "проектировочное решение" и "пихание костылей"? расcкажете?
источник

А

Алексей in QA — Автоматизация
Boris Osipov
так. панимаю. так где там грань между "проектировочное решение" и "пихание костылей"? расcкажете?
очень четкая, выше видна. Ребята решили сделать норм вещь - вынести в отдельный поток блокировки в джаве, и напоролись? Правильно, на простых решателей сложных проблем, сделавших в джаве (киллер фишка которой хорошая работа с потоками прямо из коробки) однопоточное решение. Питон с синтаксисом джавы это то, о чем мы так долго "мечтали" :)
источник

BO

Boris Osipov in QA — Автоматизация
Алексей
очень четкая, выше видна. Ребята решили сделать норм вещь - вынести в отдельный поток блокировки в джаве, и напоролись? Правильно, на простых решателей сложных проблем, сделавших в джаве (киллер фишка которой хорошая работа с потоками прямо из коробки) однопоточное решение. Питон с синтаксисом джавы это то, о чем мы так долго "мечтали" :)
окей. вы там часто из потока в поток драйвер передаете в тестах?)
источник

А

Алексей in QA — Автоматизация
Причем проорал я даже не с этого - ну вынесли и вынесли, время исправлять проблему - перенести драйвер в канкарент хэш мап. Проорал я с того, что они откатывать вынуждены. Из тредлокала перенести не могут
источник

А

Алексей in QA — Автоматизация
Boris Osipov
окей. вы там часто из потока в поток драйвер передаете в тестах?)
эээ, конечно. Если я использую джаву - я использую ее именно ради работы с потоками. в один поток питон быстрее и проще
источник

ZE

Zewa 🚽 Expert in QA — Автоматизация
Boris Osipov
окей. вы там часто из потока в поток драйвер передаете в тестах?)
Ага, я как-то хотел пошарить сквозь потоки драйвер, получилось только на какой-то не самой свежей и то инстанс самого селенида, который они потом заприватили вроде
источник

BO

Boris Osipov in QA — Автоматизация
Алексей
эээ, конечно. Если я использую джаву - я использую ее именно ради работы с потоками. в один поток питон быстрее и проще
эммм а зачем шарить один инстанс драйвера на >1 поток? смысл в чем? быстрее работать от этого ничего не станет. а покрешить драйвер оч легко.
источник