Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Selenium и win-приложения, возможно ли автоматизировать? Что посоветуете использовать?


(Максим Таран) #1

Товарищи. Слышал краем уха, что при помощи Selenium можно автоматизировать win-приложения (в частности .net). Так ли это или кто-то что-то путает?


(Сергей Блохин) #2

Посмотрите в сторону http://fest.easytesting.org
А так, для Desktop обычно Sikuli используется или Autoit.


(5am) #3

или Microsoft UI Automation (которые стандартные в Visual Studio)


(Mykhailo Poliarush) #4

@McStar Это где ты такое слышал? Я вот первый раз такое слышу.
Никогда такой поддержки в Selenium WebDriver не было и 100% не будет.
Потому слоган и звучит “Selenium - Web Browser Automation”

Для автоматизации win приложений нужно использовать сторонние инструменты.


(Сергей Блохин) #5

Возможно имелось в виду философия Selenium.
Найти элемент, совершить действия с элементом, посмотреть свойства элемента.


(Дмитрий Жарий) #6

Когда-то я слышал о таких попытках, но тот проект был очень сырым, и сейчас я не вспомню.

@5am упомянул про “Microsoft UI Automation”. Это бесплатная библиотека, которая идет с .NET фреймворком. Но, она достаточно сложная для автоматизации.

На ее основе был построен фреймворк Coded UI, который идет только с Вижуалстудией Premium или Ultimate.

Есть библиотека White, которая тоже основана на “Microsoft UI Automation” и предоставляет API, немного похожий на Вебдрайверовский, но вебдрайвер там не используется.

Вот пример:

        [TestMethod]
        public void TestMethod1()
        {
            Application app = Application.Launch(@"D:\projects_current\swd-recorder\Bin\SwdPageRecorder.UI.exe");
            var mainWin = app.GetWindows().First( w => w.Title.StartsWith("SWD"));

            var button = mainWin.Get<Button>(SearchCriteria.ByText("Start"));

            button.RaiseClickEvent();

            var waitingIndicator = mainWin.Get<Label>("lblLoadingInProgress");

            System.Threading.Thread.Sleep(1000);

            while (waitingIndicator.Visible)
            {
                System.Threading.Thread.Sleep(100);
            }

            app.Close();

        }

С технической точки зрения, если кто-то напишет WhiteDriver, то и десктопная автоматизация на WebDriver будет возможна. Ведь Appium есть для iOS


(5am) #7

@dzhariy я имел ввиду как раз Coded UI, просто не совсем корректно выразился.

одно время пользовал его (Coded UI) для тестирования не больших приложений (и это был первый опыт в автоматизации тестирования) - в целом для Win app, еще куда не шло. Для тестирования web’a - Coded UI не понравился совсем.


(Дмитрий Жарий) #8

Я полностью согласен. Такие инструменты, как Coded UI рассматривают Web-приложение аналогично десктопному. Потом – генерируют код с кучей мусора.

CodedUI можно теоретически заточить под “ручное программирование” и создать нечто похожее на PageObjects. Я как-то пробовал, но лишь ради интереса. Но, это будет ход вопреки работы фреймворка.

Прикольно, что CodedUI тесты работают только в Internet Explorer, а для возможности запуска в других браузерах… используют WebDriver

http://msdn.microsoft.com/en-us/library/jj835758.aspx

Install the Selenium components for Coded UI Cross Browser Testing Visual Studio extension.


(Максим Таран) #9

Ну, я тоже удивился, чё за фигня. Хотел спросить у знающих товарищей, так как сам Selenium не использую. Вы все подтвердили мои подозрения :smile:


(Максим Таран) #10

А кто-нить вот эту штуку использовал? http://www.eclipse.org/jubula/


(Mykhailo Poliarush) #11

Я не использовал, но как-то я не очень хорошо отношусь к инструментам автоматизации, где можешь надо работать мышкой, а не программировать код. Из своего опыта уже много раз использовал подобные инструменты и они не дают всей гибкости создания тестов, которые нужно, как бы не старались разработчики инструмента.


(apetrovskiy) #12

Ответ очень прост: индусы (да и вообще восточные и дальневосточные люди) называют селениумом набор, как его называют, Java eco-system (сюда они причисляют селениум (потому что подавляющее число стартапов и аутсорса, как я полагаю, это сайты и порталы), ant/maven/gradle/etc).
Поэтому на вопросы на линкедыне типа “можно ли селениумом … сохранить файл, сделать скриншот, загрузить файл, распарсить (!) что-нибудь, и ещё кучу невообразимых вещей проделать” отвечают " а не пошёл бы ты поучить матчасть" (как ответили бы у нас, и как было бы правильно, если подойти буквально), а дают конструктивный ответ, как это проделать на джаве (реже, на чём-нибудь другом).

Они - движки прогресса и сленга. Пример из новостей: because на днях стал предлогом (благодаря Инет-мему noun because noun). Так и селениум становится на прой. жаргоне неким встроенным в джаву или IDE пакетом. :slight_smile:

И вопрос про тестирование виндовых и не только приложений я видел в линкедыновских группах не раз. :slight_smile:


(apetrovskiy) #13

Их две, Microsoft UI Automation :slight_smile: Ещё прикольней применять их вместе:
System.Windows.Automation из .NET 3.0+
и
System.Windows.Automation из https://uiacomwrapper.codeplex.com/

Оба писаны тем же человеком (состав команд менялся, но основные зубры те же самые), а одноимённые неймспейсы определённо помогают развить свои знания дотнета.
Второй лучше “видит” контролы, первый зато получает несравненно больше паттернов.

Цитата: "Since this CodePlex project simply wraps the underlying UIA COM interface, it can’t create patterns that aren’t available through the underlying COM API. In this case, Inspect is showing that the WinForms combo box doesn’t expose the ExpandCollapse pattern.

The next question would be, “OK, but why doesn’t the COM API expose that pattern for that control?” The managed client API for UI Automation had a number of workarounds, some of them unstable, to try to cope with WinForms and Win32 common controls. (Another example: the client API tries to show the children of a combo box when the combo box is collapsed, but since the owner of the combo box can change the children dynamically when the combo box is opened, this collapsed children list is often inaccurate.) The COM API for UIA doesn’t reproduce most of these workarounds."


(Максим Таран) #14

Хм. То есть, Selenium некое нарицательное имя? :smile: