Я делаю автоматизацию с Appium на платформе Android. По какой-то причине мне нужно подождать некоторое время во время теста. Тем не менее, Appium автоматически завершает сеанс, если он не получает команды в течение примерно 4 секунд. Может кто-нибудь помочь мне сказать мне, как заставить Appium не выходить из моего драйвера.
Я попытался добавить "newCommandTimeout" к возможностям, но это не работает.
capabilities.setCapability("newCommandTimeout", 120000);
Версия Appium: v1.9.1
Вот журналы приложения, когда сеанс завершается:
[W3C] Calling AppiumDriver.deleteSession() with args: ["d9a0e702-f477-439b-8502-aa9d3c93737f"]
[BaseDriver] Event 'quitSessionRequested' logged at 1548332599830 (20:23:19 GMT+0800 (Malay Peninsula Standard Time))
[Appium] Removing session d9a0e702-f477-439b-8502-aa9d3c93737f from our master session list
[AndroidDriver] Shutting down Android driver
29 января 2019 г. ОБНОВЛЕНИЕ:
Как подсказывает большинство людей, я попытался установить 300 в newCommandTimeout
capabilities.setCapability("newCommandTimeout", 300);
Сессия все еще завершается. Я использую Thread.sleep (5000), чтобы заставить скрипт ждать. Вот журналы для создания сессий и закрытия сессий в Appium. Отметка времени добавлена. Похоже, сессии закрываются автоматически после 10 секунд ожидания.
[2019-01-29 01:03:51][Appium] Creating new AndroidDriver (v4.1.1) session
[2019-01-29 01:03:51][Appium] Capabilities:
[2019-01-29 01:03:51][Appium] platform: ANDROID
[2019-01-29 01:03:51][Appium] platformName: android
[2019-01-29 01:03:51][Appium] appActivity: *****
[2019-01-29 01:03:51][Appium] appPackage: *****
[2019-01-29 01:03:51][Appium] deviceName: *****
[2019-01-29 01:03:51][Appium] language: en
[2019-01-29 01:03:51][Appium] locale: US
[2019-01-29 01:03:51][Appium] newCommandTimeout: 300
<SOME LOGS OMITTED>
[2019-01-29 01:04:10][HTTP] <-- POST /wd/hub/session 200 18650 ms - 913
[2019-01-29 01:04:10][HTTP]
[2019-01-29 01:04:10][HTTP] --> GET /wd/hub/session/f1dbcd92-fa13-4fc7-a9fd-e6a82b55f9e7
[2019-01-29 01:04:10][HTTP] {}
[2019-01-29 01:04:10][HTTP] <-- GET /wd/hub/session/f1dbcd92-fa13-4fc7-a9fd-e6a82b55f9e7 200 5 ms - 845
[2019-01-29 01:04:10][HTTP]
[2019-01-29 01:04:10][HTTP] --> GET /wd/hub/session/f1dbcd92-fa13-4fc7-a9fd-e6a82b55f9e7
[2019-01-29 01:04:10][HTTP] <-- GET /wd/hub/session/f1dbcd92-fa13-4fc7-a9fd-e6a82b55f9e7 200 3 ms - 845
[2019-01-29 01:04:10][HTTP]
[2019-01-29 01:04:20][HTTP] --> DELETE /wd/hub/session/f1dbcd92-fa13-4fc7-a9fd-e6a82b55f9e7
[2019-01-29 01:04:20][HTTP] {}
[2019-01-29 01:04:20][W3C] Calling AppiumDriver.deleteSession() with args: ["f1dbcd92-fa13-4fc7-a9fd-e6a82b55f9e7"]
[2019-01-29 01:04:20][BaseDriver] Event 'quitSessionRequested' logged at 1548738260177 (13:04:20 GMT+0800 (Malay Peninsula Standard Time))
[2019-01-29 01:04:20][Appium] Removing session f1dbcd92-fa13-4fc7-a9fd-e6a82b55f9e7 from our master session list
[2019-01-29 01:04:20][AndroidDriver] Shutting down Android driver
29 января 2019 ОБНОВЛЕНИЕ II:
После нескольких проб и ошибок я обнаружил, что основной причиной является driver.currentActivity () после сна. Я получаю это исключение. Поскольку наш фреймворк поймал это, он отправил сигнал выключения в Appium.
org.openqa.selenium.WebDriverException: java.net.SocketException: Software caused connection abort: recv failed
Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08-02T20:19:58.91Z'
System info: host: 'localhost', ip: '', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_192'
Driver info: driver.version: AndroidDriver
at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:233)
Это исключение возникает только тогда, когда я выполняю driver.currentActivity () после ожидания в течение 10 секунд. Моя цель - дать сценарию подождать, пока он не увидит другое действие. В настоящее время мой обходной путь заключается в следующем:
int counter = 0;
while(oDriver.currentActivity().contains("someActivity")) {
Thread.sleep(1000);
counter++;
if ( counter >= 10 ) break;
}
if (oDriver.currentActivity().contains("someActivity"))
System.out.println("Reached");