Документация
ОС Аврора 5.2.0

Список поддерживаемых методов

Ниже приведён список методов, поддерживаемых qtium-драйвером, на примере использования Appium Python Client:

Базовые методы для работы с устройством и приложениями

activate_app(appId: str) -> WebDriver

Примечание. Для работы с каждым отдельным приложением необходимо создавать отдельный экземпляр WebDriver.

Открывает приложение, если оно не запущено или запущено в фоновом режиме.

Параметр appId не используется при вызове activate_app(), но его необходимо указывать для корректного выполнения.

Возвращает ссылку на текущий объект, позволяя последовательно вызывать методы этого объекта.

Пример:

driver.activate_app('ru.omp.filemanager')

close_app(None) -> WebDriver

Примечание. Для работы с каждым отдельным приложением необходимо создавать отдельный экземпляр WebDriver.

Останавливает запущенное на устройстве приложение, которое было указано при инициализации экземпляра объекта драйвера (appPackage). Если указанное приложение не активно, сервер возвращает ошибку 500, и генерируется исключение.

Возвращает ссылку на текущий объект, позволяя последовательно вызывать методы этого объекта.

Пример:

driver.close_app()

execute(command: str, arguments: None | Dict[str, Any]) -> Dict[str, str]

Позволяет отправить на выполнение команду, поддерживаемую Appium непосредственно в виде строки.

Возвращает JSON-ответ команды в виде объекта словаря.

Примеры:

res = driver.execute('launchApp')

или

driver.execute('queryAppState', {'appId':'ru.omp.filemanager'})
ответ: {'value': 'RUNNING_IN_FOREGROUND'}

или

driver.execute('getDeviceTimeGet')
ответ: {'value': 'Sun Dec 1 19:48:28 2024'}

или

driver.execute('isLocked')
ответ: {'value': False}

execute_async_script(script: str, args: List[str]) -> str

Позволяет асинхронно выполнить команду, специфичную для ОС Аврора из доступного набора расширений.

Пример:

driver.execute_async_script('app:swipe', 'left')

execute_script(script: str, args: List[str]) -> str

Позволяет синхронно выполнить команду, специфичную для ОС Аврора из доступного набора расширений.

Пример:

driver.execute_script('app:swipe', 'left')

set_network_connection(connectionType: double)

Устанавливает тип сетевого соединения на устройстве.

  • 0 — нет;
  • 1 — авиарежим;
  • 2 — только wi-fi;
  • 4 — только мобильные данные;
  • 6 — все сети включены.

Примеры:

driver.set_network_connection(1)

или

driver.set_network_connection(6)

terminate_app(appId: str) -> str

Завершает приложение, если оно запущено. Если указанное приложение не активно, сервер возвращает ошибку 500, и генерируется исключение.

В случае успеха возвращает пустую строку.

Параметр appId не используется при вызове terminate_app(), но его необходимо указывать для корректного выполнения.

Пример:

driver.terminate_app('ru.omp.filemanager')

Методы для работы с UI-элементами

Для работы с UI-элементами на странице приложения сначала необходимо позиционировать их с помощью методов find_element или find_elements, а затем производить доступные действия с найденными объектами.

find_element или find_elements(locatorStrategy: str (By.ID), selector: str) -> WebElement/WebElements list

Данные методы используются для поиска UI-элементов на странице приложения, аналогично способам, используемым при работе с qainspector.
Для поиска элемента необходимо указать стратегию поиска (элемент класса By из selenium.webdriver.common: By.NAME, By.ID, By.CLASS_NAME, By.XPATH) и локатор в соответствующем формате. Разница между find_element и find_elements только в возвращаемом значении. Первый метод возвращает первый найденный элемент в виде объекта WebElement или генерирует исключение, если элемент не найден. Второй метод возвращает список всех подходящих под критерий поиска элементов в виде объектов WebElement или пустой список при отсутствии таковых.

Примеры:

from selenium.webdriver.common.by import By
driver.find_element(By.NAME, 'Устройство')

или

from selenium.webdriver.common.by import By
driver.find_element(By.ID, 'MoreButton')

или

from selenium.webdriver.common.by import By
driver.find_element(By.CLASS_NAME, 'MainPage')

или

from selenium.webdriver.common.by import By
driver.find_element(By.XPATH, "//MiniComboBox[@value='Адрес' and @enabled='true']")

У элементов, найденных с помощью методов find_element или find_elements, можно получать доступные свойства или передавать их в качестве параметров другим методам, а также вызывать методы, такие как:

  • get_property(property_name: str);
  • location();
  • click().

Примеры:

top_element = driver.find_element(By.XPATH, "//PageStackIndicator")
top_boundary = top_element.location['y'] + top_element.get_property('height')

или

driver.find_elements(by=By.ID, value="MoreButton").click()

Более подробно об этих методах можно прочитать в документации Selenium.

Список команд для execute_script и execute_async_script, специфичных для ОС Аврора

app:clickContextMenuItem

Выполняет выбор элемента контекстного меню.

Примеры:

driver.execute_script('app:clickContextMenuItem', 'ContextMenu_0x12345678', 'some text label')

или

driver.execute_script('app:clickContextMenuItem', 'ContextMenu_0x12345678', index)

ContextMenu_0x12345678 — идентификатор элемента меню, который необходимо найти до использования этого метода (например, с помощью find_element или find_elements).

app:enterCode

Используется для ввода цифрового кода с элемента "Клавиатура". Для подтверждения действия используется #, для отмены действия — *.

Пример:

driver.execute_script('app:enterCode', '12345#')

app:goBack

Примечание. Не работает в приложениях со SplitView.

Выполняет действие навигации "Назад" на текущей странице.

Пример:

driver.execute_script('app:goBack')

app:goForward

Примечание. Не работает в приложениях со SplitView.

Выполняет действие навигации "Вперёд" на текущей странице.

Пример:

driver.execute_script('app:goForward')

app:peek

Выполняет действие peek (движение от одного края экрана к другому) в выбранном направлении.

Пример:

driver.execute_script('app:peek', 'left')

Допустимые направления:

  • left;
  • right;
  • up;
  • down.

app:pullDownTo

Выполняет вытягивание вниз ("PullDown") с вызовом PullDownMenu и выбором требуемого элемента. Если элементы отображаются не в начале представления, то сначала происходит прокрутка к верху и только потом выполняется вытягивание верхнего меню. Данный метод не работает с меню, сформированными динамически.

Примеры:

driver.execute_script('app:pullDownTo', 'some text label')

или

driver.execute_script('app:pullDownTo', index)

app:pushUpTo

Выполняет действие "Вытягивание вверх" ("PushUp") с вызовом "PushUpMenu" и выбором требуемого элемента. Если элементы отображаются не в конце представления, то сначала происходит прокрутка до конца и только потом вытягивается нижнее меню. Данный метод не работает с меню, сформированными динамически.

Примеры:

driver.execute_script('app:pushUpTo', 'some text label')

или

driver.execute_script('app:pushUpTo', index)

app:scrollToItem

Выполняет прокрутку до определённого элемента. Метод завершается, когда указанный элемент становится полностью видимым или после 10 неудачных попыток изменить его положение. При неудачном пролистывании исключение не возникает.

Пример:

driver.execute_script('app:scrollToItem', 'ContextMenu_0x12345678')

ContextMenu_0x12345678 — идентификатор элемента, который необходимо найти до использования этого метода (например, с помощью find_element или find_elements).

app:swipe

Выполняет свайп (движение от центра экрана к краям) в выбранном направлении.

Пример:

driver.execute_script('app:swipe', 'left')

Допустимые направления:

  • left;
  • right;
  • up;
  • down.

app:waitForPageChange

Синхронно ожидает изменения страницы. Метод возвращает управление в программу или после любого изменения на странице или по достижении установленного таймаута. Данный метод не работает со страницами, использующими SplitView.

Пример:

driver.execute_script('app:waitForPageChange', 1000)

1000 — таймаут в миллисекундах ожидания изменения.

app:waitForPropertyChange

Синхронно ожидает изменения значения свойства элемента. Метод возвращает управление в программу или после указанного изменения или по достижении установленного таймаута.

Пример:

driver.execute_script('app:waitForPropertyChange', 'ContextMenu_0x12345678', 'opened', true, 10000)

ContextMenu_0x12345678 — идентификатор элемента, который необходимо найти до использования этого метода (например, с помощью find_element или find_elements).

Можно использовать None в качестве значения свойства, чтобы ждать любого изменения свойства, или точное значение, чтобы следить за ним.

10000 — таймаут в миллисекундах для ожидания изменения.

system:shell

Выполняет shell-скрипт или команду на устройстве с привилегиями root. Необходимо использовать с осторожностью.

Пример:

output = driver.execute_script('system:shell', '/bin/sh', ['-c', 'ls -la /'])
print(output)

или

output = driver.execute_script('system:shell', 'ls', ['-la', '/'])
print(output)

system:shellIncludeStderr

Выполняет shell-скрипт или команду на устройстве с привилегиями root с возможностью обработки stdErr, stdOut и exitcode, возвращаемыми при выполнении скрипта. Необходимо использовать с осторожностью.

Пример:

driver.execute_script('system:shellIncludeStderr', '/bin/sh', ['-c', 'ls -la /'])
stdout = result['stdout']
stderr = result['stderr']
exitcode = result['exitcode']

mobile:get_device_time

Возвращает дату и время с устройства.

Опционально принимает набор спецификаторов формата. По умолчанию используется формат 'E MMM d HH:mm:ss yyyy'. Информация по спецификаторам формата доступна по ссылке.

Примеры:

dt = driver.execute_script('mobile:get_device_time')

или

device_date = driver.execute_script('mobile:get_device_time', 'YYYY-MM-DD')

или

device_time = driver.execute_script('mobile:get_device_time', 'HH:mm:ss')

mobile:is_locked

Проверяет, заблокировано ли устройство.

Возвращает True, если заблокировано, False в противном случае.

Пример:

res = driver.execute_script('mobile:is_locked')

mobile:query_app_state

Запрашивает состояние приложения.

Возвращает одно из следующих состояний приложения в виде строки:

  • RUNNING_IN_FOREGROUND;
  • RUNNING_IN_BACKGROUND;
  • NOT_RUNNING;

Пример:

state = driver.execute_script('mobile:query_app_state', 'ru.omp.filemanager', 'ru.omp.filemanager')

mobile:isKeyboardShown

Проверяет, открыта ли экранная клавиатура.

Возвращает True, если открыта, False в противном случае.

Пример:

res = driver.execute_script('mobile:isKeyboardShown')

network_connection -> int

Возвращает текущий тип сетевого соединения на устройстве в виде целого числа.

  • 0 — нет соединения;
  • 1 — авиарежим;
  • 2 — только Wi-Fi;
  • 4 — только мобильные данные;
  • 6 — все сети включены.

Пример:

connection_mode = driver.network_connection
print(f"Текущий режим сети: {connection_mode}")

appium:setAutoPrimary

Включает или отключает автоматический выбор основного окна.

Основное окно — это окно, в котором выполняются команды теста (поиск, клик, ввод и т.д.). По умолчанию драйвер пытается выбрать основное окно автоматически. Если автоматический режим отключен, окно необходимо выбрать вручную с помощью appium:setWindow.

Аргументы, передаваемые в виде словаря:

  • enabled (Boolean) — True для включения автоматического выбора, False для отключения.

Пример:

driver.execute_script("appium:setAutoPrimary", {"enabled": False})

appium:findWindowByElement

Выполняет поиск окна текущего экземпляра приложения, которое содержит элемент, соответствующий заданному селектору.

Возвращает windowId (идентификатор) первого найденного окна. Этот идентификатор можно передать в appium:setWindow для переключения контекста выполнения.

Аргументы, передаваемые в виде словаря:

  • strategy — стратегия поиска элемента внутри окна. Может быть строкой или константой из selenium.webdriver.common.by.By.
  • value — значение для поиска (например, имя класса, текст и т.д.).

Поддерживаемые стратегии:

Стратегия (str или By) Описание
By.ID, "id", "object name", "accessibility id" Поиск элемента по его id (эквивалентно objectName в QML)
By.CLASS_NAME , "class name" Поиск элемента по имени его класса
By.PARTIAL_LINK_TEXT, "partial link text", "text", "contains" Поиск элемента, текст которого содержит указанное значение
By.LINK_TEXT, "text_exact", "link text" Поиск элемента, текст которого в точности равен указанному значению
By.XPATH , "xpath" Поиск элемента с использованием выражения XPath
"property" Поиск элемента по строке свойства

Пример:

from selenium.webdriver.common.by import By

softkeys_window = driver.execute_script("appium:findWindowByElement", {
    "strategy": By.CLASS_NAME,
    "value": "SoftKeysPanel"
})

appium:setWindow

Устанавливает текущее основное окно в то, которое идентифицируется windowId. Все последующие действия (поиск, клик, ввод и т.д.) будут выполняться в этом окне.

Примечание. Если appium:setAutoPrimary включен, драйвер может впоследствии переопределить выбор этого окна при изменении состояния приложения. Чтобы этого избежать, необходимо вызвать appium:setAutoPrimary с параметром {"enabled": False} перед установкой окна вручную.

Аргументы, передаваемые в виде словаря:

Пример:

driver.execute_script("appium:setWindow", {"windowId": softkeys_window})

Список методов для execute_script и execute_async_script, используемых для тестирования специальных сценариев

app:emulatefillMemory

Эмулирует использование всей свободной и доступной памяти. Выделяет память в цикле до тех пор, пока операционная система не уничтожит процесс. Принимает количество мегабайт для выделения памяти оператором new() и таймаут (в миллисекундах) для одной итерации цикла.

Примеры:

  • C выделением 100 Мб и ожиданием 5 сек после каждого выделения в цикле:

    driver.execute_script('app:emulatefillMemory', 100, 5000)
    
  • C выделением 100 Мб и стандартным ожиданием (3 сек) на каждой итерации цикла:

    driver.execute_script('app:emulatefillMemory', 100)
    

app:emulateFreeze

Эмулирует зависание приложения до истечения заданного таймаута (в миллисекундах). По умолчанию таймаут составляет 10 секунд (10000 мс).

Примеры:

  • C таймаутом 5 сек:

    driver.execute_script('app:emulateFreeze', '5000')
    
  • C таймаутом по умолчанию:

    driver.execute_script('app:emulateFreeze')
    

app:emulateMemoryLeak

Эмулирует утечку памяти. Принимает количество мегабайт для выделения памяти оператором new() и таймаут (в миллисекундах) после выделения.

Примеры:

  • C выделением 100 Mб и ожиданием 5 сек:

    driver.execute_script('app:emulateMemoryLeak', 100, 5000)
    
  • C выделением 100 Mб и стандартным ожиданием (3 сек):

    driver.execute_script('app:emulateMemoryLeak', 100)
    

app:emulateNullPtrCrash

Эмулирует аварийное завершение программы из-за обращения к нулевому указателю.

Пример:

driver.execute_script('app:emulateNullPtrCrash')

Действия W3C (W3C Actions)

W3C Actions API — это стандартизированный способ эмуляции сложных действий пользовательского ввода (касания, нажатия клавиш, прокрутка колесом мыши). Он позволяет выстраивать последовательности элементарных действий и выполнять их на устройстве.

Основной принцип работы заключается в создании цепочки действий с помощью ActionChains, её последующем выполнении через метод perform() и сбросе состояния ввода с помощью reset_actions().

Для создания последовательностей используются следующие "строительные блоки":

  • actions.w3c_actions.pointer_action — действия указателя (касания экрана):
    • move_to_location(x, y) — перемещает указатель в абсолютные экранные координаты;
    • move_to(origin=element, x=0, y=0) — перемещает указатель относительно центра указанного элемента;
    • pointer_down(button=0) / pointer_up(button=0) — имитирует нажатие/отпускание пальца (для сенсорного ввода используется button=0);
    • pause(seconds) — добавляет паузу в последовательность действий.
  • actions.w3c_actions.key_action — действия с клавиатурой:
    • key_down(value) / key_up(value) — нажимает/отпускает клавишу.
  • actions.w3c_actions.wheel_action — действия колеса прокрутки:
    • scroll_by_amount(x, y) — прокручивает на указанное смещение по осям X и Y.
  • actions.perform() — отправляет собранную последовательность действий драйверу на выполнение;
  • actions.reset_actions() — сбрасывает состояние ввода на устройстве. Рекомендуется вызывать после сложных цепочек действий.

Пример реализации свайпа с помощью W3C Actions:

from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.pointer_input import PointerInput

def swipe(self, x_1: int, y_1: int, x_2: int, y_2: int) -> None:
    actions = ActionChains(self.driver, duration=300)
    actions.w3c_actions = ActionBuilder(self.driver, mouse=PointerInput(interaction.POINTER_TOUCH, 'touch'))
    actions.w3c_actions.pointer_action.move_to_location(x=x_1, y=y_1)
    actions.w3c_actions.pointer_action.pointer_down()
    actions.w3c_actions.pointer_action.move_to_location(x=x_2, y=y_2)
    actions.w3c_actions.pointer_action.release()
    actions.w3c_actions.pointer_action.pause(duration=5000)
    actions.perform()

Примечания:

  • Координаты задаются в пикселях устройства, с точкой отсчёта (0,0) в левом верхнем углу экрана.
  • Можно создавать несколько источников ввода (например, для имитации жестов несколькими пальцами), добавляя шаги для каждого из них перед вызовом perform().
  • Этот механизм является предпочтительным для эмуляции пользовательских жестов.

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.