
Evgeniy
09.10.2017
19:25:01
либо называть кнопку по своей бизнесовой сути, но в аннотации к методу с ней IDE будет подсказывать инстанс возвращаемой пейджи

Anto
09.10.2017
19:26:01
договориться можно как угодно. и имплементировать как хочется :) я не вижу разницы возвращать ссылку из класса или создавать в тесте
ну разве что в диффе коммита нагляднее читать измененную логику теста, а не измененную логику двух пейджов в разных файлах

Evgeniy
09.10.2017
19:30:19
а вот тут пример бы , потому что не совсем понятно что поменялось на сайте

Google

Anto
09.10.2017
19:34:27
ну раз тема про другие страницы, то допустим, изменился переход другую страницу мобильного приложения. ну так получилось. соответственно, было “клик_эту_кнопка() -> view1” стало “клик_эту_кнопка() -> view2”. в общем в диффе будет так же все понятно ?ох. ну значит нет разницы

Pavel
09.10.2017
19:35:57
> возвращать ссылку из класса
Это как? Приведи код

Anto
09.10.2017
19:41:09
страница1:
def клик_эту_кнопка():
return new страница2()
страница2:
…
страница2 = страница1.клик_эту_кнопка()
или альтернативный вариант
страница1:
def клик_эту_кнопка():
….
страница2:
…
страница1.клик_эту_кнопка()
страница2 = new страница2()

Evgeniy
09.10.2017
19:42:28
это типа
# method 1, somewhere in the test
smarphones_page.add_do_cart(model_title='iphone 7s')
smartphones_page.go_to_cart()
cart = CartPage() # явно определяем переход на новую старницу, виджет, етс
cart.proceed_with_payment()
# method 2, somewhere in the test
smarphones_page.add_do_cart(model_title='iphone 7s')
cart = smartphones_page.go_to_cart()
cart.proceed_with_payment()потому что где-то в есть код:
# smartphones_page.py
def go_to_cart(self):
get_element(CART_BTN).click()
return CartPage(driver=self.driver) # передаем в переменную другой инстанс пейджи

Pavel
09.10.2017
19:46:59
method 1 менее читаемый. Кто вообще глядя на этот код свяжет что smartphones_page.go_to_cart() и cart = CartPage() как-то взаимосвязаны?
Между этими двумя строчками понапихают каких-нибудь хелперов и логика окончательно разъедется.
+ во втором методе можно доп. ассерты навесить в метод go_to_cart на создаваемую страницу, если оно потребуется.

Anto
09.10.2017
19:48:42
?

Evgeniy
09.10.2017
19:49:13
во втором методе создаваемой страницы уже должны быть софт ассерты в конструкторе класса

Anto
09.10.2017
19:49:27
с другой стороны. ассертить другую cart страницу в методе smartphones_page?
так вот да. ассерт себя в конструкторе себя - логично. ассерт другой страницы в чужом классе - как-то так

Google

Evgeniy
09.10.2017
19:50:47
нет, это не обязательно, как только ты вернул инстанс другой страницы - на это ответственность одного пейдж объекта заканчивается и начинается ответственность другого

Pavel
09.10.2017
19:51:04

Evgeniy
09.10.2017
19:52:03
то бишь это будешь возвращаться некая Abstarct factory решающая какие страницы возвращать.

Pavel
09.10.2017
19:52:52
Ну не, фактори это слишком сложно. А тут всегда возвращается одна и та же страница, просто еще у нее проверяется пара специфичных условий.

Anto
09.10.2017
19:52:54
хм ну тогда 3 варианта
1) ассертить следующую страницу и возвращать объект из метода
2) не ассертить, но возвращать объект из метода. ассертить в тесте перед следующими шагами
3) не возвращать ничего. инициализировать объект в тесте и ассертить в конструкторе

Pavel
09.10.2017
19:53:10
Это зародыш фактори.

Evgeniy
09.10.2017
19:54:01

Pavel
09.10.2017
19:54:21

Evgeniy
09.10.2017
19:55:03
например аргумент went_from='iphone_page'
где в конструкторе будут находится блоки софт ассертов на каждый вариант контекстов, которые нужно проверять

Pavel
09.10.2017
19:57:01
Если сложный случай с кучей кейсов то да, фабрика и нужна будет.

Anto
09.10.2017
19:57:24
эту логику ассерта по условию можно так же просто в теле теста сделать. или в методе и через аргумент. звучит равноценно. вопрос - при прочих равных условиях и при равнозначных переходах без сказочных условий - на каком варианте остановиться в общем случае ))

Pavel
09.10.2017
19:57:29
И опять же этот вызов фабрики легче сделать в методе go_to_cart(
А с new придется кучу мест править.

Evgeniy
09.10.2017
19:58:50
по большому счету без разницы в какой из пейдж это будет, главное, чтобы не в тесте :)
dry, и ты в порядке

Pavel
09.10.2017
19:59:26
> можно так же просто в теле теста сделать. или в методе и через аргумент.
Это не равноценно. Если у тебя 100500 тестов и в каждом проверяется независимо ассерт, то при изменении требований тебе надо будет исправить 100500 строк.
А в случае когда все инкапсулировано в метод/фабрику - в одном месте переписать.
> без сказочных условий
Вся инженерия ПО и борется с этими постоянно меняющимися сказочными условиями. Иначе все бы писали в процедурном стиле 1 раз и никаких тестов на код не надо было бы вообще.
И паттернов никаких не придумывали бы.

Google

Anto
09.10.2017
20:02:44
в случае когда одна страница ведет в 100500 страниц и потому 100500 тестов - да, согласен. в случае 10 страниц которые ведут в друг друга - ассерт просто будет или в тесте, или в пейдже. теже самые строки поменяются, только в разных местах
с точки зрения удобства когда все внезапно поменялось - мне удобнее ревью 1 файл. а не 10, на разные пейджы
то есть файл с бизнес логикой теста
или если перефразировать. в случае когда все поменялось и ассерты внутри страниц, то поменяется и сам тест, и ассерты. когда странцы инициализируются в тесте - поменяются только тесты
пейджы могут годами не меняться, но логика их переключения да

Pavel
09.10.2017
20:07:35
> или если перефразировать. в случае когда все поменялось и ассерты внутри страниц, то поменяется и сам тест, и ассерты.
Ну это же далеко не факт. Слишком абстрактный пример.

Evgeniy
09.10.2017
20:07:53
это какой-то рак теста, если есть пейджи, но ты в них не меняешь реализацию внутри методов

Pavel
09.10.2017
20:08:27
Бгг

Evgeniy
09.10.2017
20:09:08
у тебя есть 1000 тестов, которые каким-то образом попадали на карт. Ты НЕ захочешь менять это в 1000 тестов. Как ты хочешь это сделать? иметь метод go_to_cart и поменять только его

Pavel
09.10.2017
20:09:38
Вот конкретный пример: есть у тебя группа из 100500 тестов которая тестирует скидочно-акционную часть сайта. И тут тебе пришло требование, что при переходе в корзину теперь на странице внизу должна отображаться желтая полоска с номером купона. Ты идешь и меняешь только в одном методе ассерт.
Или идешь и добавляешь ассерты в 100500 тестов, а потом идешь в окно.

Evgeniy
09.10.2017
20:10:44
ну, Паша то же самое повторил :)

Pavel
09.10.2017
20:13:41
В конструктор пейдж обжекта добавлять лучше, но тоже опасно, т.к. конструктор на всю систему один, а вот таких групп тестов с разными группами условий может быть несколько.
Тут лучше либо в метод-прослойку, либо фабрика, ну или на худой конец отнаследоваться от пейдж обжекта и реализовывать в каждом конструктуре свои ассерты. Но это сложновато.

Evgeniy
09.10.2017
20:14:47

Pavel
09.10.2017
20:15:03
По последним трендам наследование это антипаттерн.

Evgeniy
09.10.2017
20:15:15
лол

Pavel
09.10.2017
20:15:17
Но в целом да, удобно :)

Evgeniy
09.10.2017
20:16:34
я не говорю про х10 Inception наследования, каким был графический кит при разработке под windows, (можно почитать в книге Банды четырех). С пейджами хватает максимум 2х суперклассов, больше я не встречал. Помогало выстроить набор софт ассертов в конструкторах на все случаи жизни

Google

Alexander
10.10.2017
06:38:38
Здравствуйте! Насколько актуально сейчас изучать автоматизацию на C# ?

Richard
10.10.2017
06:43:18
Для каких-то проектов, где исользуется си шарп - актуально.
Для каких-то, где не используется - нет.

Alexander
10.10.2017
06:47:29

Richard
10.10.2017
06:50:23
Эээ... Что?
Я имел ввиду, что если у вас в компании используется до диез в стеке технологий для автоматизации - то учите и это будет полезно.
А если питон, руби или джава, то зачем?

Prokop
10.10.2017
06:56:09
Если просто "нужно что то изучать" то смотри в сторону python и java

Alexander
10.10.2017
06:59:07

Prokop
10.10.2017
06:59:37
что лучше, веник или метла?
Все +- определенного инструмента раскрываются в разных ситуациях. Нужно учиться программировать, а не набирать код на определенном языке

Vyacheslav
10.10.2017
07:02:21

Алексей
10.10.2017
07:03:21

Vyacheslav
10.10.2017
07:04:07
Ну буду начинать холивар, каждый видит своё

Alexander
10.10.2017
07:04:52
Мозг говорит бери метлу, а сердце тянется к венику))

Igor
10.10.2017
07:07:36
без разницы что из этих двух учить, главное учить)) как сомнительный довод в пользу джава - это выше порог вхождения = меньше конкуренции. как такой же довод для пайтон - инфо для изучения языка подоступнее малость. мб если есть желание где-то конкретно работать, то узнать что там используют и так определиться.

Prokop
10.10.2017
07:11:12
По поводу порога вхождения спорно. Для написания простых автотестов нужно знать минимум что там что там)

Aleksandr
10.10.2017
07:11:36
какая разница на чем говнокодить?)
хоть на ассемблере

Alexander
10.10.2017
07:31:47
а если тестирование мобильное?

Prokop
10.10.2017
07:32:06
ответ тот же

Google

Prokop
10.10.2017
07:32:50
под апиум есть куча клиентских либ
вроде даже js

Anton
10.10.2017
07:47:54
под апиум есть куча клиентских либ
аппиум официально не поддерживается гуглом.
Если Ондроид приложение многопоточное и много-процессное, то аппиум будет валиться на ожиданиях. Плюс support library для ондроида постоянно дорабатывается и обновляется и аппиум тупо не успевает за ней. Плюс я не уверен, но интеграция со студией у аппиума не самая лучшая наверное.
Единственный плюс аппиума на мой взгляд - это кросс-платформенность.

Prokop
10.10.2017
07:54:40
не сталкивался ни с одной из этих проблем. Аппиум на андроид работает шикарно. С iOS есть траблы да, но вот андроид прям конфетка
Как многопоток может влиять на UI тесты я вообще смутно понимаю
А переключение между процессами(точнее активити в разных процессах) работает отлично

Anto
10.10.2017
08:06:06
к cлову об аппиумах. кто-нибудь тестирует reactnative на андроиде через последний релиз appium-uiautomator2? в предыдущей версии elemet id были не доступны. собственно вопрос - проблема решена?

Leanid
10.10.2017
08:37:09
Всем привет. Есть вопрос.
Запускаем автоматизацию на проекте и надо произвести выбор средств для автоматизации. Вроде как все остальное нашел как обойти но с этим проблемы. Задача только тестирование iOS версии.
Как вы автоматизировали тестирование in-app на iOS? Буду благодарен если посоветуете как решить эту проблему.

Shoo
10.10.2017
08:40:02

Leanid
10.10.2017
08:40:50
Извиняюсь, да именно
in-app purchase

Shoo
10.10.2017
08:41:48
https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/iTunesConnectInAppPurchase_Guide/Chapters/TestingInAppPurchases.html
http://help.testlio.com/testing-mobile-applications/testing-in-app-purchases-on-ios
https://support.magplus.com/hc/en-us/articles/203809008-iOS-How-to-Test-In-App-Purchases-in-Your-App
Ну и всё прочее с первой страницы поисковой выдачи :)
Или есть какие-то более конкретные проблемы?

Leanid
10.10.2017
08:43:48
да как проверить ручками я знаю. Подскажите как то же самое сделать например через Appium, XCUItest и т.д.