Automation testing desktop applications Tips and Tricks
О себе: - Пишу автотесты для Web, Android, iOS, Windows, MacOS, Browser Extension
О себе: - Пишу автотесты для Web, Android, iOS, Windows, MacOS, Browser Extension - Знаком с языками Objective-C и Swift
О себе: - Пишу автотесты для Web, Android, iOS, Windows, MacOS, Browser Extension - Знаком с языками Objective-C и Swift - Python на уровне разговорного :)
О себе: - Пишу автотесты для Web, Android, iOS, Windows, MacOS, Browser Extension - Знаком с языками Objective-C и Swift - Python на уровне разговорного :) - Люблю комиксы
Внимание! Эта презентация может содержать отсылочный юмор
Push в ветку Сборка в Jenkins Сохранение в “облаке” Отправка писем “Тихая” установка Allure репорт Запуск автотестов Отчет о тестировании Упрощенная схема автотестов KeepSolid
Топ 10 инструментов автоматизации тестирования 2018
Средства автоматизации тестирования десктопных приложений
- PyAutoGUI - LDTP - SikuliX - Selenium Фреймворки
import pyautogui screenWidth, screenHeight = pyautogui.size() currentMouseX, currentMouseY = pyautogui.position() pyautogui.moveTo(100, 150) pyautogui.click() pyautogui.moveTo(500, 500, duration=2, tween=pyautogui.tweens.easeInOutQuad) pyautogui.typewrite('Hello world!', interval=0.25) pyautogui.press('esc') pyautogui.keyDown('shift') PyAutoGUI
>>> import atomac >>> atomac.launchAppByBundleId('com.apple.Automator') >>> automator = atomac.getAppRefByBundleId('com.apple.Automator') >>> window = automator.windows()[0] >>> window.AXTitle u'Untitled' >>> sheet = window.sheets()[0] Linux версия - LDTP Windows версия - Cobra Mac версия - PyATOM LDTP
Для поиска элементов GUI Sikuli использует только их скриншоты SikuliX
Почему мы выбрали Selenium?
Почему мы выбрали Selenium? - Стильно, модно, молодежно
Почему мы выбрали Selenium? - Стильно, модно, молодежно - Имитация действий пользователя
Почему мы выбрали Selenium? - Стильно, модно, молодежно - Имитация действий пользователя - В основном ты взаимодействуешь с web-элементами
Почему мы выбрали Selenium? - Стильно, модно, молодежно - Имитация действий пользователя - В основном ты взаимодействуешь с web-элементами - Большое комьюнити
Почему мы выбрали Selenium? - Стильно, модно, молодежно - Имитация действий пользователя - В основном ты взаимодействуешь с web-элементами - Большое комьюнити - Один API для множества платформ: Web, Windows, Mac, Android, iOS, Browser Extension
Хорошие новости! Существует два драйвера: - Winium Desktop - WinAppDriver Драйвера для Windows
Плохие новости: Если вы должны поддерживать Windows 8.1, Windows 7 - у Вас нет выбора :( Только Winium Драйвера для Windows
Новости для Mac OS: Существует только один драйвер - AppiumForMac Драйвера для Mac OS
Селекторы Windows Хорошие новости: Winium поддерживает несколько стратегий поиска элементов: byAutomationId, byName, byClassName, byXpath Плохие новости: QT не поддерживает добавление атрибутов AutomationId и ClassName
Селекторы Mac OS - доступен только один критерий поиска - Xpath - необходим полный путь к элементу
Селекторы Mac OS - доступен только один критерий поиска - Xpath - необходим полный путь к элементу Хороший пример: "/AXApplication[@AXTitle='Calculator']/AXMenuBarItems/AXMenuBar Item[@AXTitle='View']/AXMenu/AXMenuItem[@AXTitle='Scientific']"
Селекторы Mac OS Хороший пример: "/AXApplication[@AXTitle='Calculator']/AXMenuBarItems/AXMenuBar Item[@AXTitle='View']/AXMenu/AXMenuItem[@AXTitle='Scientific']" Плохой пример: "/AXApplication[@AXTitle='Calculator']/AXMenuBarItems/AXMenuBar Item[@AXTitle='View']/AXMenuItem[@AXTitle='Scientific']" (не абсолютный путь: отсутствует AXMenu)
- не очень удобные инспекторы Разница между автоматизацией в десктоп и браузере
Inspect.exe UIA Verify Инспекторы Windows
Инспектор Mac OS
- не очень удобные инспекторы - имплементированы не все свойства selenium Разница между автоматизацией в десктоп и браузере
- не очень удобные инспекторы - имплементированы не все свойства selenium - модули только для одной платформы Разница между автоматизацией в десктоп и браузере
- не очень удобные инспекторы - имплементированы не все свойства selenium - модули только для одной платформы - различаются консольные утилиты Разница между автоматизацией в десктоп и браузере
- не очень удобные инспекторы - имплементированы не все свойства selenium - модули только для одной платформы - различаются консольные утилиты - “захват” мыши Разница между автоматизацией в десктоп и браузере
Проблемы при автоматизации Mac OS приложений
Метод “find_elements” не работает в AppiumForMac if len(driver.find_elements_by_id(element_id)) > 0: # do_something Проблема
def is_element_present(): try: driver.find_element_by_xpath(element) return True except: return False if is_element_present() is True: # do something Решение
from selenium.common.exceptions import NoSuchElementException def is_element_present(): try: driver.find_element_by_xpath(element) return True except NoSuchElementException: return False if is_element_present() is True: # do something Безопасное решение
driver.get_screenshot_as_png() - сохраняет скриншот размером 19.8 Mb Проблема
При запуске через Jenkins формируется скриншот, который невозможно открыть через Jenkins Проблема
import tempfile import os def custom_screenshot(): f = tempfile.NamedTemporaryFile() name = f.name os.system("screencapture -R 0,0,1920,1080 %s" % name) with open(name, 'rb') as fp: new_file = fp.read() f.close() return new_file Решение
Размер скриншота уменьшился с 20 до 5 Mb Результат
Проблема Проверка наличия и закрытие диалогового окна
Ввод пароля и клик на кнопку в системном диалоговом окне Проблема
tell application "System Events" if exists (processes where name is "SecurityAgent") then tell process "SecurityAgent" to keystroke "*****" delay 0.5 tell application "System Events" to keystroke return delay 0.5 end if end tell Решение
Jenkins помечает весь тест ран как failure, даже если упал только 1 тест Проблема
Обернуть скрипт запуска тестов в команды set+/set- и переложить определение статуса билда на JUnit test result Решение
AppiumForMac крашится после нескольких запусков тестов Проблема
import subprocess subprocess.run(['open', 'AppiumForMac.app']) # start subprocess.run(['osascript', '-e', 'quit app "AppiumForMac.app"']) # stop Решение
Ошибка при сборке приложения для Mac OS на Jenkins slave машине errSecInternalComponent Command CodeSign failed with a nonzero exit code ** ARCHIVE FAILED ** Проблема
$ security unlock-keychain -p 'password' login.keychain Решение
Проблемы при автоматизации Windows приложений
В DOM присутствуют элементы с одинаковыми селекторами Проблема
- Кликать по координатам Решение
- Кликать по координатам - Находить элемент по индексу: driver.find_elements_by_name('Close')[index].click() Решение
- Кликать по координатам - Находить элемент по индексу: driver.find_elements_by_name('Close')[index].click() - Найти element с name “Firefox”, в нем найти элемент с name “Close” и кликнуть по нему Решение
Методы close() и quit() возвращают ошибку “WebDriverException: Message: Process has exited, so the requested information is not available.” Проблема
Close Кликнуть по координатам или по кнопке “Close” Quit taskkill /IM "<service>.exe" /f Решение
Есть элементы типа “list item” в которых отсутствует атрибут “accessiblename” Проявляется если используется класс QListWidget Проблема
- Устанавливать текст размером 9999 в элементах “list item” Решение
- Устанавливать текст размером 9999 в элементах “list item” - Наследоваться от QAbstractItemView Class и переопределить все необходимые атрибуты Решение
- Устанавливать текст размером 9999 в элементах “list item” - Наследоваться от QAbstractItemView Class и переопределить все необходимые атрибуты - использовать QLayout Class и в него вставлять объекты класса QWidget Решение
Результат
Не работают команды set+/set- как в Linux/Mac OS X, даже если упал один тест Jenkins помечает билд как “failure” Проблема
Команда exit 0 + JUnit test result report Решение
Окно “User Account control Windows” появляется при “тихой” установке приложения Проблема
Выключить нотификации в User Account Access Settings Решение
● Selenium driver для Linux не реализован :( ● Много дистрибутивов Linux Проблемы при автоматизации Linux приложений
Никак :( Как мы это решили?
Сценарии которые нам не удалось покрыть автотестами - пробуждение после “сна” системы - рестарт системы - смена пользователя в системе - нахождение элементов в браузере Chrome
Уменьшение времени тест рана
Уменьшение времени тест рана - Замена безусловных тайм аутов на условные
Уменьшение времени тест рана - Замена безусловных тайм аутов на условные - Поиск элементов внутри других элементов (для Windows)
Уменьшение времени тест рана - Замена безусловных тайм аутов на условные - Поиск элементов внутри других элементов (для Windows) - Не использовать метод find_elements (для Mac OS)
Уменьшение времени тест рана - Замена безусловных тайм аутов на условные - Поиск элементов внутри других элементов (для Windows) - Не использовать метод find_elements (для Mac OS) - Проверка валидности пользователя для теста
Уменьшение времени тест рана - Замена безусловных тайм аутов на условные - Поиск элементов внутри других элементов (для Windows) - Не использовать метод find_elements (для Mac OS) - Проверка валидности пользователя для теста - Общая авторизация для группы тестов
Уменьшение времени тест рана - Замена безусловных тайм аутов на условные - Поиск элементов внутри других элементов (для Windows) - Не использовать метод find_elements (для Mac OS) - Проверка валидности пользователя для теста - Общая авторизация для группы тестов - Тест дизайн
Итоги
- Не пытайтесь все сделать сами! Итоги
- Не пытайтесь все сделать сами! - Ответственно подойдите к выбору инструментов перед началом работы Итоги
- Не пытайтесь все сделать сами! - Ответственно подойдите к выбору инструментов перед началом работы - Не все тест кейсы стоит автоматизировать Итоги
- Не пытайтесь все сделать сами! - Ответственно подойдите к выбору инструментов перед началом работы - Не все тест кейсы стоит автоматизировать - Каждая операционная система имеет свои ограничения May the Force be with you! Итоги
Контакты: email: alexeystyagaylo@gmail.com skype: zalexeyz29 Code examples Q&A

Automation testing desktop applications

  • 1.
  • 2.
    О себе: - Пишуавтотесты для Web, Android, iOS, Windows, MacOS, Browser Extension
  • 3.
    О себе: - Пишуавтотесты для Web, Android, iOS, Windows, MacOS, Browser Extension - Знаком с языками Objective-C и Swift
  • 4.
    О себе: - Пишуавтотесты для Web, Android, iOS, Windows, MacOS, Browser Extension - Знаком с языками Objective-C и Swift - Python на уровне разговорного :)
  • 5.
    О себе: - Пишуавтотесты для Web, Android, iOS, Windows, MacOS, Browser Extension - Знаком с языками Objective-C и Swift - Python на уровне разговорного :) - Люблю комиксы
  • 6.
    Внимание! Эта презентация можетсодержать отсылочный юмор
  • 8.
    Push в ветку Сборкав Jenkins Сохранение в “облаке” Отправка писем “Тихая” установка Allure репорт Запуск автотестов Отчет о тестировании Упрощенная схема автотестов KeepSolid
  • 10.
  • 11.
  • 12.
    - PyAutoGUI - LDTP -SikuliX - Selenium Фреймворки
  • 13.
    import pyautogui screenWidth, screenHeight= pyautogui.size() currentMouseX, currentMouseY = pyautogui.position() pyautogui.moveTo(100, 150) pyautogui.click() pyautogui.moveTo(500, 500, duration=2, tween=pyautogui.tweens.easeInOutQuad) pyautogui.typewrite('Hello world!', interval=0.25) pyautogui.press('esc') pyautogui.keyDown('shift') PyAutoGUI
  • 14.
    >>> import atomac >>>atomac.launchAppByBundleId('com.apple.Automator') >>> automator = atomac.getAppRefByBundleId('com.apple.Automator') >>> window = automator.windows()[0] >>> window.AXTitle u'Untitled' >>> sheet = window.sheets()[0] Linux версия - LDTP Windows версия - Cobra Mac версия - PyATOM LDTP
  • 15.
    Для поиска элементовGUI Sikuli использует только их скриншоты SikuliX
  • 16.
  • 17.
    Почему мы выбралиSelenium? - Стильно, модно, молодежно
  • 18.
    Почему мы выбралиSelenium? - Стильно, модно, молодежно - Имитация действий пользователя
  • 19.
    Почему мы выбралиSelenium? - Стильно, модно, молодежно - Имитация действий пользователя - В основном ты взаимодействуешь с web-элементами
  • 20.
    Почему мы выбралиSelenium? - Стильно, модно, молодежно - Имитация действий пользователя - В основном ты взаимодействуешь с web-элементами - Большое комьюнити
  • 21.
    Почему мы выбралиSelenium? - Стильно, модно, молодежно - Имитация действий пользователя - В основном ты взаимодействуешь с web-элементами - Большое комьюнити - Один API для множества платформ: Web, Windows, Mac, Android, iOS, Browser Extension
  • 22.
    Хорошие новости! Существует двадрайвера: - Winium Desktop - WinAppDriver Драйвера для Windows
  • 23.
    Плохие новости: Если выдолжны поддерживать Windows 8.1, Windows 7 - у Вас нет выбора :( Только Winium Драйвера для Windows
  • 24.
    Новости для MacOS: Существует только один драйвер - AppiumForMac Драйвера для Mac OS
  • 25.
    Селекторы Windows Хорошие новости: Winiumподдерживает несколько стратегий поиска элементов: byAutomationId, byName, byClassName, byXpath Плохие новости: QT не поддерживает добавление атрибутов AutomationId и ClassName
  • 26.
    Селекторы Mac OS -доступен только один критерий поиска - Xpath - необходим полный путь к элементу
  • 27.
    Селекторы Mac OS -доступен только один критерий поиска - Xpath - необходим полный путь к элементу Хороший пример: "/AXApplication[@AXTitle='Calculator']/AXMenuBarItems/AXMenuBar Item[@AXTitle='View']/AXMenu/AXMenuItem[@AXTitle='Scientific']"
  • 28.
    Селекторы Mac OS Хорошийпример: "/AXApplication[@AXTitle='Calculator']/AXMenuBarItems/AXMenuBar Item[@AXTitle='View']/AXMenu/AXMenuItem[@AXTitle='Scientific']" Плохой пример: "/AXApplication[@AXTitle='Calculator']/AXMenuBarItems/AXMenuBar Item[@AXTitle='View']/AXMenuItem[@AXTitle='Scientific']" (не абсолютный путь: отсутствует AXMenu)
  • 29.
    - не оченьудобные инспекторы Разница между автоматизацией в десктоп и браузере
  • 30.
  • 31.
  • 32.
    - не оченьудобные инспекторы - имплементированы не все свойства selenium Разница между автоматизацией в десктоп и браузере
  • 33.
    - не оченьудобные инспекторы - имплементированы не все свойства selenium - модули только для одной платформы Разница между автоматизацией в десктоп и браузере
  • 34.
    - не оченьудобные инспекторы - имплементированы не все свойства selenium - модули только для одной платформы - различаются консольные утилиты Разница между автоматизацией в десктоп и браузере
  • 35.
    - не оченьудобные инспекторы - имплементированы не все свойства selenium - модули только для одной платформы - различаются консольные утилиты - “захват” мыши Разница между автоматизацией в десктоп и браузере
  • 36.
  • 37.
    Метод “find_elements” неработает в AppiumForMac if len(driver.find_elements_by_id(element_id)) > 0: # do_something Проблема
  • 38.
    def is_element_present(): try: driver.find_element_by_xpath(element) return True except: returnFalse if is_element_present() is True: # do something Решение
  • 39.
    from selenium.common.exceptions importNoSuchElementException def is_element_present(): try: driver.find_element_by_xpath(element) return True except NoSuchElementException: return False if is_element_present() is True: # do something Безопасное решение
  • 40.
    driver.get_screenshot_as_png() - сохраняетскриншот размером 19.8 Mb Проблема
  • 41.
    При запуске черезJenkins формируется скриншот, который невозможно открыть через Jenkins Проблема
  • 42.
    import tempfile import os defcustom_screenshot(): f = tempfile.NamedTemporaryFile() name = f.name os.system("screencapture -R 0,0,1920,1080 %s" % name) with open(name, 'rb') as fp: new_file = fp.read() f.close() return new_file Решение
  • 43.
    Размер скриншота уменьшилсяс 20 до 5 Mb Результат
  • 44.
    Проблема Проверка наличия изакрытие диалогового окна
  • 45.
    Ввод пароля иклик на кнопку в системном диалоговом окне Проблема
  • 46.
    tell application "SystemEvents" if exists (processes where name is "SecurityAgent") then tell process "SecurityAgent" to keystroke "*****" delay 0.5 tell application "System Events" to keystroke return delay 0.5 end if end tell Решение
  • 47.
    Jenkins помечает весьтест ран как failure, даже если упал только 1 тест Проблема
  • 48.
    Обернуть скрипт запускатестов в команды set+/set- и переложить определение статуса билда на JUnit test result Решение
  • 49.
    AppiumForMac крашится посленескольких запусков тестов Проблема
  • 50.
    import subprocess subprocess.run(['open', 'AppiumForMac.app'])# start subprocess.run(['osascript', '-e', 'quit app "AppiumForMac.app"']) # stop Решение
  • 51.
    Ошибка при сборкеприложения для Mac OS на Jenkins slave машине errSecInternalComponent Command CodeSign failed with a nonzero exit code ** ARCHIVE FAILED ** Проблема
  • 52.
    $ security unlock-keychain-p 'password' login.keychain Решение
  • 53.
  • 54.
    В DOM присутствуютэлементы с одинаковыми селекторами Проблема
  • 55.
    - Кликать покоординатам Решение
  • 56.
    - Кликать покоординатам - Находить элемент по индексу: driver.find_elements_by_name('Close')[index].click() Решение
  • 57.
    - Кликать покоординатам - Находить элемент по индексу: driver.find_elements_by_name('Close')[index].click() - Найти element с name “Firefox”, в нем найти элемент с name “Close” и кликнуть по нему Решение
  • 58.
    Методы close() иquit() возвращают ошибку “WebDriverException: Message: Process has exited, so the requested information is not available.” Проблема
  • 59.
    Close Кликнуть по координатамили по кнопке “Close” Quit taskkill /IM "<service>.exe" /f Решение
  • 60.
    Есть элементы типа“list item” в которых отсутствует атрибут “accessiblename” Проявляется если используется класс QListWidget Проблема
  • 61.
    - Устанавливать текстразмером 9999 в элементах “list item” Решение
  • 62.
    - Устанавливать текстразмером 9999 в элементах “list item” - Наследоваться от QAbstractItemView Class и переопределить все необходимые атрибуты Решение
  • 63.
    - Устанавливать текстразмером 9999 в элементах “list item” - Наследоваться от QAbstractItemView Class и переопределить все необходимые атрибуты - использовать QLayout Class и в него вставлять объекты класса QWidget Решение
  • 64.
  • 65.
    Не работают командыset+/set- как в Linux/Mac OS X, даже если упал один тест Jenkins помечает билд как “failure” Проблема
  • 66.
    Команда exit 0+ JUnit test result report Решение
  • 67.
    Окно “User Accountcontrol Windows” появляется при “тихой” установке приложения Проблема
  • 68.
    Выключить нотификации вUser Account Access Settings Решение
  • 69.
    ● Selenium driverдля Linux не реализован :( ● Много дистрибутивов Linux Проблемы при автоматизации Linux приложений
  • 70.
    Никак :( Как мыэто решили?
  • 71.
    Сценарии которые намне удалось покрыть автотестами - пробуждение после “сна” системы - рестарт системы - смена пользователя в системе - нахождение элементов в браузере Chrome
  • 72.
  • 73.
    Уменьшение времени тестрана - Замена безусловных тайм аутов на условные
  • 74.
    Уменьшение времени тестрана - Замена безусловных тайм аутов на условные - Поиск элементов внутри других элементов (для Windows)
  • 75.
    Уменьшение времени тестрана - Замена безусловных тайм аутов на условные - Поиск элементов внутри других элементов (для Windows) - Не использовать метод find_elements (для Mac OS)
  • 76.
    Уменьшение времени тестрана - Замена безусловных тайм аутов на условные - Поиск элементов внутри других элементов (для Windows) - Не использовать метод find_elements (для Mac OS) - Проверка валидности пользователя для теста
  • 77.
    Уменьшение времени тестрана - Замена безусловных тайм аутов на условные - Поиск элементов внутри других элементов (для Windows) - Не использовать метод find_elements (для Mac OS) - Проверка валидности пользователя для теста - Общая авторизация для группы тестов
  • 78.
    Уменьшение времени тестрана - Замена безусловных тайм аутов на условные - Поиск элементов внутри других элементов (для Windows) - Не использовать метод find_elements (для Mac OS) - Проверка валидности пользователя для теста - Общая авторизация для группы тестов - Тест дизайн
  • 79.
  • 80.
    - Не пытайтесьвсе сделать сами! Итоги
  • 81.
    - Не пытайтесьвсе сделать сами! - Ответственно подойдите к выбору инструментов перед началом работы Итоги
  • 82.
    - Не пытайтесьвсе сделать сами! - Ответственно подойдите к выбору инструментов перед началом работы - Не все тест кейсы стоит автоматизировать Итоги
  • 83.
    - Не пытайтесьвсе сделать сами! - Ответственно подойдите к выбору инструментов перед началом работы - Не все тест кейсы стоит автоматизировать - Каждая операционная система имеет свои ограничения May the Force be with you! Итоги
  • 84.

Editor's Notes

  • #8 *https://www.bbc.co.uk/sport/av/football/21257057 За 2 года ежедневной работы с автотестами для Mac OS и Windows наша команда успела наступить не на одни грабли, найти способы их решения или обхода. Подружили автотесты с Allure репортом, Jenkins, запуском на удаленной машине, настройка сборки приложений через Jenkins и много другое.
  • #9 Наша команда разработчиков, тестировщиков и системных администраторов настроила CI/CD на Jenkins для Mac OS, Windows, Android and iOS приложений. Не знаю как вам а мне эта схема напомнила...
  • #10 Вселенную в уменьшенном варианте, и как у каждой вселенной, у нашей системы есть свои супергерои и суперзлодеи. Но об этом чуть позже, не переключайтесь
  • #14 Кроссплатформенный фреймворк для эмуляции простых действий пользователя (перемещения мыши, клики, нажатия кнопок и т. п.). Отсутствует работа с элементами, применим если не меняется UI и нельзя по другому найти элементы
  • #15 LDTP - Linux Desktop Testing Project, тут уже присутствует работа с элементами и получение их свойств. Недостатки - не учитывается видимость элементов, небольшое комьюнити
  • #16 Sikuli — технология поиска и автоматизации работы с элементами GUI на основе изображений (скриншотов). Приненима если GUI не меняется
  • #23 Winium - Supported Platforms: Windows Presentation Foundation (WPF), Windows Forms (WinForms) WinAppDriver - Supported Platforms: Universal Windows Platform (UWP), Windows Presentation Foundation (WPF), Windows Forms (WinForms) and Classic Windows (Win32) apps on Windows 10 PCs
  • #26 Xpath в браузере и Xpath для Winium - это как говориться два разных Xpath (доступны далеко не все возможности которые есть в Web)
  • #31 Также позволяют выделять элементы и просматривать их атрибуты, но не обладают теми же возможностями что и инспекторы в браузерах
  • #32 Этот инспектор позволяет выделять интересующие элементы, просматривать их основные атрибуты, но не показывает полный путь к элементу
  • #37 проверка наличия элемента на странице размер скриншотов закрытие системных диалоговых окон AppiumForMac крашится после нескольких запусков тестов маркировка билда в Jenkins как unstable ошибка при сборке приложения через Jenkins
  • #38 Хотя если запустить в дебаг он может отработать, но если он будет часто встречаться в коде - ваше приложение через некоторое время перестанет отвечать на запросы даже со стороны пользователя
  • #39 Реализовать свой метод, но это не безопасное решение, так как перехватываются все ошибки, а не только NoSuchElementException
  • #41 driver.get_screenshot_as_png() - сохраняет скриншот размером 19.8Mb, как уменьшить общий объем репорта?
  • #42 Если запускать через Jenkins - скриншоты в allure репорте не открываются, хотя если их открывать по прямой ссылке - они доступны
  • #43 Делать скриншоты самостоятельно
  • #45 Есть диалоговые окна, с которыми можно взаимодействовать из кода
  • #46 Нажать на кнопку и ввести в поле ввода пароль, а добраться через код к ним нельзя
  • #47 AppleScript
  • #48 Если хоть один тест в тест ране помечается как failed - Jenkins помечает весь билд как failure
  • #50 При запуске нескольких тестов все ок
  • #51 Стартовать AppiumForMac перед запуском тестов и закрывать его после того как тесты прошли
  • #52 При сборке Mac приложения через Jenkins slave, если Jenkins Master - Linux server, во время архивации билда - появляется ошибка “errSecInternalComponent”
  • #53 Разблокировать keychain keychain - технология, с помощью которой, в одном месте операционных системах Mac OS и iOS, в защищенном виде, сохраняются личные данные пользователя (логины и пароли).
  • #54 элементы с одинаковыми названиями методы close() и quit() возвращают ошибку атрибут “name” для элементов списка маркировка билда в Jenkins как unstable диалоговое окна “Access Control Panel”
  • #55 Как закрыть браузер, если название атрибута “Close” повторяется для всех открытых приложений?
  • #59 Harvey Dent
  • #61 Эта проблема из-за того что используется QListWidget
  • #62 если список небольшой и требуются внутри виджеты - лучше использовать QLayout Class и в него вставлять объекты класса QWidget
  • #63 если список небольшой и требуются внутри виджеты - лучше использовать QLayout Class и в него вставлять объекты класса QWidget
  • #64 если список небольшой и требуются внутри виджеты - лучше использовать QLayout Class и в него вставлять объекты класса QWidget
  • #66 Mordru
  • #67 Doctor Fate
  • #68 Sinestro, это окошко появляется не в основном рабочем столе, а когда блокируется экран (примерно такой же как и при введение пароля для пользователя)
  • #69 Одной силой воли не тут не обойдешься, понадобилось немножко хитрости:)
  • #71 Не все стоит автоматизировать, в некоторых ситуациях время на написание и поддержку автотестов больше чем время на мануальное тестирование за определенный период
  • #72 Все тест кейсы которые связаны с этими сценариями мы прогоняем вручную
  • #73 Самый сложный из всех пунктов, тест менеджмент можно вести не только на уровне тест кейсов, но и на уровне кода - используя преимущества xUnit тестового фреймворка (параметризация тестов, запуск тестов по тегам, DDT)
  • #74 Самый сложный из всех пунктов, тест менеджмент можно вести не только на уровне тест кейсов, но и на уровне кода - используя преимущества xUnit тестового фреймворка (параметризация тестов, запуск тестов по тегам, DDT)
  • #75 Самый сложный из всех пунктов, тест менеджмент можно вести не только на уровне тест кейсов, но и на уровне кода - используя преимущества xUnit тестового фреймворка (параметризация тестов, запуск тестов по тегам, DDT)
  • #76 Самый сложный из всех пунктов, тест менеджмент можно вести не только на уровне тест кейсов, но и на уровне кода - используя преимущества xUnit тестового фреймворка (параметризация тестов, запуск тестов по тегам, DDT)
  • #77 Самый сложный из всех пунктов, тест менеджмент можно вести не только на уровне тест кейсов, но и на уровне кода - используя преимущества xUnit тестового фреймворка (параметризация тестов, запуск тестов по тегам, DDT)
  • #78 Самый сложный из всех пунктов, тест менеджмент можно вести не только на уровне тест кейсов, но и на уровне кода - используя преимущества xUnit тестового фреймворка (параметризация тестов, запуск тестов по тегам, DDT)
  • #79 Самый сложный из всех пунктов, тест дизайн можно вести не только на уровне тест кейсов, но и на уровне кода - используя преимущества xUnit тестового фреймворка (параметризация тестов, запуск тестов по тегам, DDT)
  • #80 И с ними приходиться мириться, а иногда обходить
  • #81 И с ними приходиться мириться, а иногда обходить
  • #82 И с ними приходиться мириться, а иногда обходить
  • #83 И с ними приходиться мириться, а иногда обходить
  • #84 И с ними приходиться мириться, а иногда обходить