Список поддерживаемых методов
Ниже приведён список методов, поддерживаемых qtium-драйвером, на примере использования Appium Python Client:
-
Список команд для
execute_script
иexecute_async_script
, специфичных для ОС Аврора
Базовые методы для работы с устройством и приложениями
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')
get_device_time(format: str | None = None) -> str
Возвращает дату и время с устройства.
format
— (необязательный) набор спецификаторов формата. По умолчанию используется формат 'YYYY-MM-DDTHH:mm:ssZ', который соответствует стандарту ISO-8601. Информация по спецификаторам формата доступна по ссылке.
Примеры:
dt = driver.get_device_time()
или
device_date = driver.get_device_time('YYYY-MM-DD')
или
device_time = driver.get_device_time('HH:mm:ss')
is_locked(None) -> True | False
Проверяет, заблокировано ли устройство.
Возвращает True
, если заблокировано, False
в противном случае.
Пример:
res = driver.is_locked()
launch_app(None) -> WebDriver
Примечание. Для работы с каждым отдельным приложением необходимо создавать отдельный экземпляр WebDriver
.
Запускает на устройстве приложение, которое было указано при инициализации экземпляра объекта драйвера (appPackage
).
Возвращает ссылку на текущий объект, позволяя последовательно вызывать методы этого объекта.
Пример:
driver.launch_app()
query_app_state(appName: str) -> str
Запрашивает состояние приложения.
Возвращает одно из следующих состояний приложения в виде строки:
RUNNING_IN_FOREGROUND
;RUNNING_IN_BACKGROUND
;NOT_RUNNING
;CLOSING
(устаревший статус).
Пример:
state = driver.query_app_state('ru.omp.filemanager')
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']
Список методов для 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')