Los scripts de Appium no funcionan después de cambiar a WebView

I tried to run test cases in hybrid app. I can switch to WebView with using driver.context("WEBVIEW").
But after I switch to webview, driver.findElement() method to do not perform under webview, and it returns the error in the Appium server as below. Could you help me how to solve this?

Below are my test scripts:

    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();

The following code doesn't not work:

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

And here is the error message from Appium server log:

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

BTW, I started the Appium 1.0.0 server from source (>node appium.js --no-reset).

preguntado el 22 de mayo de 14 a las 14:05

Please restart the device and try, else use the GUI version of appium. -

I could get a fix by monitoring chromedriver all the time during test execution, chromedriver becomes unresponsive while switching back to webview from natiove_app. I developed a small piece of code available at github.com/mi2pankaj/chromeDriverHandler, it has solved my all problems, just add this jar chromedriverHandler.jar to your project and use ChromedriverHandler.chromeDriverHandlerThread().start(); in your beforeclass / beforetest and ChromedriverHandler.chromeDriverHandlerThread().stop(); in your afterclass / aftertest -

3 Respuestas

@ xlzdew Please change driver.context("WEBVIEW") to driver.context("WEBVIEW_1")

Respondido el 11 de junio de 15 a las 06:06

Your log said it couldn't start chrome driver on your device. So pls check the chromedriver in

/Users/lin/codes/appiumGit/appium/build/chromedriver/mac/chromedriver

is working or not, or it requires execution permission. You can test it by using some chrome driver commands.

respondido 04 mar '19, 09:03

I believe that when you're in a WebView, finding elements by xpath does not work. The only method of finding an element that I have had success with is By.CSS_SELECTOR and the elements class (.menu-item).

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

Respondido 08 Oct 14, 23:10

That's terribly misleading, absolutely untrue. This should be down voted - Son-Huy Pham

el enlace no es valido - nofomopls

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.