Объективная разница температур. Мы, например, живем на втором этаже и у нас зимой очень холодный пол и еще сквозит откуда-то с окон. Вызывали специалиста, который настраивал окна, ставил какие-то дополнительные крепления. Бесполезно, всё равно дует. При этом на два этажа выше соседи выкручивают батареи на минимум, у них жара.
может это было давно? Мы семьей переехали 3 года назад в Иннополис из Омска. Никаких конфликтов на национальной почве ни разу не видели. Ладно Иннополис, в котором намешано очень много национальностей, но мы бываем очень часто в Казани, да и в другие города РТ ездили. Слышал, что есть какие-то преференции в бизнесе, но как-то я далёк от этого, не сталкивался.
Соседушку, 120 дом.
Всё как есть. Я живу в Иннополисе больше 3-х лет. За эти годы город очень сильно изменился и всё в лучшую сторону. Мне очень нравится, что от моей квартиры до рабочего места 6 минут пешком.
Использовать Cucumber в таком виде как используете вы является одним из самых распространенных антипаттернов, но, как и любой другой антипаттерн в определенных условиях он имеет право на жизнь.
Структура, которую задаёт Cucumber, может неплохо помочь в организации кода, однако тоже самое можно сделать и без него.
В Cucumber 5 TypeRegistry является deprecated, на много проще определить свои преобразователи с помощью аннотаций @ParameterType и @DataTableType.
Спасибо за ссылки на мои статьи, несколько месяц подумываю написать статью про нововведения Cucumber 5, но как-то не доходят руки.
Почему не использовали WinAppDriver или Winium раз все равно используете совместно с WebDriver'ом?
Да и вообще можно было воспользоваться AutoItX. Существенно себе облегчили бы жизнь при дебаге в случае возникновения ошибки. Да и сопровождать ваше решение такое себе. И да, атрибуты элементов windows-окон также могут поменяться, как и атрибуты web-элементов.
Selenium Grid — это кластер из Selenium Hub + нескольких Node.
B Selenium Hub и Node — это Selenium Server, запущенный на разных машинах в разных режимах.
Selenium Grid предназначен для параллельного запуска браузеров на большом количестве машин. Ноды могут быть на разных ОС и с разными браузерами.
Selenium Hub принимает запрос на запуск определенного браузера, на определенной платформе. Используя эту информацию Selenium Hub выбирает доступную ноду и все последующей команды по управлению браузером, отправляемые Selenium, пересылает на неё.
Selenoid — это имплементация Selenium Hub. В Selenoid ноды запускаются в докер-контейнерах.
Так для этого и существует FluentWait. Это просто готовое решение одной проблемы, не нравится, пишите свое. Честно, я вообще не понял суть статьи, проблема высосана из пальца
Не понимаю, какая разница SearchContext или WebDriver? Ну усекли вы возможности до 2 методов, а WebDriver то никуда не делся.
Всё взаимодействие с браузером осуществляется через него.
Когда вы ищите что-то из контекста WebElement'а, вы всё равно возвращаетесь к WebDriver'у.
Вы совсем не правы. В классе ExpectedConditions есть еще как минимум один метод, возвращающий не Boolean и не WebElement, это метод alertIsPresent. Еще есть метод numberOfElementsToBeMoreThan, который прекрасно справляется со своей задачей и возвращает List элементов, есть visibilityOfAllElementsLocatedBy/visibilityOfAllElements, которые также нормально возвращают List элементов с проверкой на пустоту списка.
Возвращаемое значение не всегда требуется, но есть больше количество кастомных conditions с возвращаемыми объектами различных классов.
То, что Simon Stewart использует в своем примере не ту переменную, скорее опечатка, а не правило. Не стоит на это обращать внимание.
Буду говорить за Java. Вообще вроде как всё логично.
Класс WebDriverWait расширяет класс FluentWait, который является реализацией интерфейса Wait. В интерфейсе Wait определен один метод — until, принимающий Funtion<? super T, V>, т.е. функцию с входным параметром T и выходным V. И это вроде как сделано не просто так, мы не должны завязываться на внешние переменные(доступные из «клиентского кода»), по этому в функцию передаем всё необходимое для её выполнения. Слабое связывание.
WebDriverWait в качестве T использует интерфейс WebDriver:
public class WebDriverWait extends FluentWait<WebDriver>
добавляет в igoring NotFoundException.class, т.е. игнорирует практически все исключения, которые могу быть вызваны при работе с WebDriver, а также переопределяет метод timeoutException, добавляя в сообщение диагностическую информацию по текущей сессии WebDriver'а.
Что из этого следует? А то, что в случае если WebDriver не нужен в контексте ожидания, используйте FluentWait с необходимым входным параметром.
Честно, так и не понял о чем статья. О там как пользоваться куками в Selenium? Ну не знаю…
Если есть возможно, то лучше мониторить изменения на стороннем сервисе через предоставляемое ими API, может есть такая возможность?
Вообще не понимаю, зачем заходить туда Selenium'ом, таким образом подвергать опасности и без того хрупкие UI-тесты.
В случае необходимости периодически руками проверять UI.
Да и вообще тестить сторонние сервисы, да еще и на проде, это мне кажется прям совсем не правильно.
К теме статьи это не относится, но да, вы правы. Разработчики вынуждены были отказаться от поддержки других JVM-языков. На сколько я знаю, они стремятся поддерживать одинаковый функционал во всех реализациях Cucumber, но в связи с тем, что сейчас в core-jvm команде всего 3 человека и все они занимаются разработкой только в свободное время, а так же участвуют в других core-командах cucumber, поддерживать такое количество JVM-языков нереально.
Всё как есть. Я живу в Иннополисе больше 3-х лет. За эти годы город очень сильно изменился и всё в лучшую сторону. Мне очень нравится, что от моей квартиры до рабочего места 6 минут пешком.
Структура, которую задаёт Cucumber, может неплохо помочь в организации кода, однако тоже самое можно сделать и без него.
В Cucumber 5 TypeRegistry является deprecated, на много проще определить свои преобразователи с помощью аннотаций @ParameterType и @DataTableType.
Спасибо за ссылки на мои статьи, несколько месяц подумываю написать статью про нововведения Cucumber 5, но как-то не доходят руки.
Да и вообще можно было воспользоваться AutoItX. Существенно себе облегчили бы жизнь при дебаге в случае возникновения ошибки. Да и сопровождать ваше решение такое себе. И да, атрибуты элементов windows-окон также могут поменяться, как и атрибуты web-элементов.
B Selenium Hub и Node — это Selenium Server, запущенный на разных машинах в разных режимах.
Selenium Grid предназначен для параллельного запуска браузеров на большом количестве машин. Ноды могут быть на разных ОС и с разными браузерами.
Selenium Hub принимает запрос на запуск определенного браузера, на определенной платформе. Используя эту информацию Selenium Hub выбирает доступную ноду и все последующей команды по управлению браузером, отправляемые Selenium, пересылает на неё.
Selenoid — это имплементация Selenium Hub. В Selenoid ноды запускаются в докер-контейнерах.
Так для этого и существует FluentWait. Это просто готовое решение одной проблемы, не нравится, пишите свое. Честно, я вообще не понял суть статьи, проблема высосана из пальца
Всё взаимодействие с браузером осуществляется через него.
Когда вы ищите что-то из контекста WebElement'а, вы всё равно возвращаетесь к WebDriver'у.
Возвращаемое значение не всегда требуется, но есть больше количество кастомных conditions с возвращаемыми объектами различных классов.
Буду говорить за Java. Вообще вроде как всё логично.
Класс WebDriverWait расширяет класс FluentWait, который является реализацией интерфейса Wait. В интерфейсе Wait определен один метод — until, принимающий Funtion<? super T, V>, т.е. функцию с входным параметром T и выходным V. И это вроде как сделано не просто так, мы не должны завязываться на внешние переменные(доступные из «клиентского кода»), по этому в функцию передаем всё необходимое для её выполнения. Слабое связывание.
WebDriverWait в качестве T использует интерфейс WebDriver:
добавляет в igoring NotFoundException.class, т.е. игнорирует практически все исключения, которые могу быть вызваны при работе с WebDriver, а также переопределяет метод timeoutException, добавляя в сообщение диагностическую информацию по текущей сессии WebDriver'а.
Что из этого следует? А то, что в случае если WebDriver не нужен в контексте ожидания, используйте FluentWait с необходимым входным параметром.
Если есть возможно, то лучше мониторить изменения на стороннем сервисе через предоставляемое ими API, может есть такая возможность?
Вообще не понимаю, зачем заходить туда Selenium'ом, таким образом подвергать опасности и без того хрупкие UI-тесты.
В случае необходимости периодически руками проверять UI.
Да и вообще тестить сторонние сервисы, да еще и на проде, это мне кажется прям совсем не правильно.
Да, вы правы, об этом я делал заметку в
Есть даже подсветка геркина — <source lang="gherkin">