Скрипты Appium не работают после переключения на WebView

Я попытался запустить тестовые случаи в гибридном приложении. Я могу переключиться на WebView с помощью driver.context("WEBVIEW").
Но после переключения на веб-просмотр метод driver.findElement() не работает в веб-просмотре и возвращает ошибку на сервере Appium, как показано ниже. Не могли бы вы помочь мне, как это решить?

Ниже приведены мои тестовые сценарии:

    DesiredCapabilities capabilities = new DesiredCapabilities();

    capabilities.setCapability(CapabilityType.BROWSER_NAME, "");

    capabilities.setCapability("deviceName","066e28s70b115a3b");

    capabilities.setCapability("platformVersion", "4.4.2");

    capabilities.setCapability("platformName","Android");

    capabilities.setCapability("app", "/Users/lin/codes/tester.apk");

    capabilities.setCapability("app-package", "com.test.tester");

    capabilities.setCapability("app-activity", "com.test.tester.myActivity");

    AppiumDriver driver = new AppiumDriver(new URL("http://my.local.address:4723/wd/hub"), capabilities);


     Set<String> contextNames = driver.getContextHandles();

     System.out.println(contextNames.size());

     for (String contextName : contextNames) {

       System.out.println(contextName);

       if (contextName.contains("WEBVIEW")){

         driver.context(contextName);

       }

     }

     Thread.sleep(5000);

     driver.findElement(By.xpath("//div[@class='item item-entrance']/h2[@class='grey-title mb20']")).click();

Следующий код не работает:

 driver.findElement(By.xpath("//div[@class='item item-entrance']/h2[@class='grey-title mb20']")).click();

А вот сообщение об ошибке из журнала сервера Appium:

info: Available contexts: NATIVE_APP,WEBVIEW_1

info: Responding to client with success: {"status":0,"value":["NATIVE_APP","WEBVIEW_1"],"sessionId":"7dd9ea41-f47c-4466-a108-21ce90284ad1"}

GET /wd/hub/session/7dd9ea41-f47c-4466-a108-21ce90284ad1/contexts 200 50ms - 124b

debug: Appium request initiated at /wd/hub/session/7dd9ea41-f47c-4466-a108-21ce90284ad1/context

debug: Request received with params: {"name":"WEBVIEW_1"}

info: Getting a list of available webviews

debug: executing: "/Users/lin/tools/android-sdk-macosx/platform-tools/adb" -s 066e28s70b115a3b shell "cat /proc/net/unix"

info: ["webview_devtools_remote_20051"]

info: Available contexts: NATIVE_APP,WEBVIEW_1

info: Connecting to chrome-backed webview

info: Creating Chrome session

info: Ensuring Chromedriver exists

info: Killing any old chromedrivers, running: ps -e | grep /Users/lin/codes/appiumGit/appium/build/chromedriver/mac/chromedriver | grep -v grep |grep -e '--port=9515$' | awk '{ print $1 }' | xargs kill -15

info: Successfully cleaned up old chromedrivers

info: Spawning chromedriver with: /Users/lin/codes/appiumGit/appium/build/chromedriver/mac/chromedriver

info: [CHROMEDRIVER] Starting ChromeDriver (v2.10.267517) on port 9515

Only local connections are allowed.

info: Making http request with opts: {"url":"http://my.local.address:9515/wd/hub/session","method":"POST","json":{"sessionId":null,"desiredCapabilities":{"chromeOptions":{"androidPackage":"com.test.tester","androidUseRunningApp":true,"androidDeviceSerial":"066e28s70b115a3b"}}}}

info: Could not connect yet; retrying

info: Making http request with opts: {"url":"http://my.local.address:9515/wd/hub/session","method":"POST","json":{"sessionId":null,"desiredCapabilities":{"chromeOptions":{"androidPackage": "com.test.tester","androidUseRunningApp":true,"androidDeviceSerial":"066e28s70b115a3b"}}}}

info: Didn't get a new command in 60 secs, shutting down...

info: Shutting down appium session...

info: [ADB] Pressing the HOME button

debug: executing: "/Users/lingzhixiang/tools/android-sdk-macosx/platform-tools/adb" -s 066e28s70b115a3b shell "input keyevent 3"

info: Stopping logcat capture

debug: Logcat terminated with code null, signal SIGTERM

info: Cleaning up Chromedriver

info: Killing chromedriver

info: Responding to client with error: {"status":13,"value":{"message":"An unknown server-side error occurred while processing the command. (Original error: socket hang up)","code":"ECONNRESET","origValue":"socket hang up"},"sessionId":"7dd9ea41-f47c-4466-a108-21ce90284ad1"}

POST /wd/hub/session/7dd9ea41-f47c-4466-a108-21ce90284ad1/context 500 60649ms - 270b

info: Chromedriver exited with code null

info: (killed by signal SIGTERM)

info: [BOOTSTRAP] [info] Got data from client: {"cmd":"shutdown"}

info: [BOOTSTRAP] [info] Got command of type SHUTDOWN

info: [BOOTSTRAP] [info] Returning result: {"value":"OK, shutting down","status":0}

info: [BOOTSTRAP] [info] Closed client connection

Кстати, я запустил сервер Appium 1.0.0 из исходного кода (> node appium.js --no-reset).


person xlzdew    schedule 22.05.2014    source источник
comment
Пожалуйста, перезагрузите устройство и попробуйте, иначе используйте версию appium с графическим интерфейсом.   -  person Abhishek Swain    schedule 23.05.2014
comment
Я мог бы получить исправление, постоянно контролируя chromedriver во время выполнения теста, chromedriver перестает отвечать на запросы при переключении обратно на веб-просмотр из natiove_app. Я разработал небольшой фрагмент кода, доступный по адресу github.com/mi2pankaj/chromeDriverHandler. проблемы, просто добавьте этот jar chromedriverHandler.jar в свой проект и используйте ChromedriverHandler.chromeDriverHandlerThread().start(); в вашем beforeclass/beforetest и ChromedriverHandler.chromeDriverHandlerThread().stop(); в вашем афтерклассе/афтертесте   -  person Pankaj Kumar Katiyar    schedule 18.01.2016


Ответы (3)


@xlzdew Измените driver.context("WEBVIEW") на driver.context("WEBVIEW_1")

person eduliant    schedule 11.06.2015

В вашем журнале сказано, что не удалось запустить драйвер Chrome на вашем устройстве. Пожалуйста, проверьте chromedriver в

/Users/lin/codes/appiumGit/appium/сборка/chromedriver/mac/chromedriver

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

person nofomopls    schedule 04.03.2019

Я считаю, что когда вы находитесь в WebView, поиск элементов по xpath не работает. Единственный метод поиска элемента, с которым я добился успеха, - это By.CSS_SELECTOR и класс элементов (.menu-item).

http://appium.io/slate/en/v1.2.0/?java#automating-hybrid-android-apps

person cvDev    schedule 08.10.2014
comment
Это ужасное заблуждение, абсолютно неправда. Это должно быть проголосовано против - person Huy; 11.08.2016
comment
ссылка недействительна - person nofomopls; 04.03.2019