2

I am testing a Hybrid Android app - Tubemate in Appium.

I'm using the following configuration:

  1. selenium-java = version 3.0.1
  2. appium java-client = version 4.1.2
  3. chromedriver = version 2.19
  4. Android = 6.0.1 Marshmallow
  5. Chrome Webview = version 44.0.2403.119

Everything is the latest version from mvn repository.

The following Java Code is used.

package tk.sathyacse67.tcs;

import org.testng.annotations.Test;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;

import org.testng.annotations.BeforeMethod;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterMethod;

public class HybridTest {
    AppiumDriver driver;

    @BeforeMethod
    public void beforeMethod() throws MalformedURLException {
        DesiredCapabilities android_dcb = new DesiredCapabilities();
        android_dcb.setCapability("platformName", "Android");
        android_dcb.setCapability("platformVersion", "6.0.1");
        android_dcb.setCapability("deviceName", "device");
        android_dcb.setCapability("appPackage", "devian.tubemate.home");
        android_dcb.setCapability("appActivity", "devian.tubemate.home.TubeMate");

        driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), android_dcb);
    }

    @Test
    public void f() throws InterruptedException, MalformedURLException {
        WebDriverWait wait = new WebDriverWait(driver, 30);
        driver.findElement(By.id("devian.tubemate.home:id/title_ic_drawer")).click();

        wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("devian.tubemate.home:id/title")));
        List<AndroidElement> a=driver.findElements(By.id("devian.tubemate.home:id/title"));
        a.get(6).click();

        driver.context("WEBVIEW_devian.tubemate.home");

        wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input#lst-ib"))).sendKeys("TCS");
    }

    @AfterMethod
    public void afterMethod() {
        driver.quit();
    }
}

But whenever I change my context from NATIVE_APP to WEBVIEW, it doesn't succeed always. Most of the time, Appium gets stuck at this stage.

> info: [debug] returning process name: devian.tubemate.home
> info: [debug] Available contexts: 
> info: [debug] ["WEBVIEW_devian.tubemate.home"]
> info: [debug] Available contexts: NATIVE_APP,WEBVIEW_devian.tubemate.home
> info: [debug] Connecting to chrome-backed webview
> info: Chromedriver: Changed state to 'starting'
> info: Chromedriver: Set chromedriver binary as: C:\Program Files (x86)\Appium\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win\chromedriver.exe
> info: Chromedriver: Killing any old chromedrivers, running: FOR /F "usebackq tokens=5" %a in (`netstat -nao ^| findstr /R /C:"9515 "`) do (FOR /F "usebackq" %b in (`TASKLIST /FI "PID eq %a" ^| findstr /I chromedriver.exe`) do (IF NOT %b=="" TASKKILL /F /PID %a))
> info: Chromedriver: No old chromedrivers seemed to exist
> info: Chromedriver: Spawning chromedriver with: C:\Program Files (x86)\Appium\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win\chromedriver.exe --url-base=wd/hub --port=9515
> info: Chromedriver: [STDOUT] Starting ChromeDriver 2.19.346078 (6f1f0cde889532d48ce8242342d0b84f94b114a1) on port 9515
> Only local connections are allowed.
> info: JSONWP Proxy: Proxying [GET /status] to [GET http://127.0.0.1:9515/wd/hub/status] with no body
> info: JSONWP Proxy: Got response with status 200: "{\"sessionId\":\"\",\"status\":0,\"value\":{\"build\":{\"version\":\"alpha\"},\"os\":{\"arch\":\"x86_64\",\"name\":\"Windows NT\",\"version\":\"10.0\"}}}"
> info: JSONWP Proxy: Proxying [POST /session] to [POST http://127.0.0.1:9515/wd/hub/session] with body: {"desiredCapabilities":{"chromeOptions":{"androidPackage":"devian.tubemate.home","androidUseRunningApp":true,"androidDeviceSerial":"EBAZFG563168"}}}

After sometime holding at that stage, it says the following and quit.

> info: [debug] Didn't get a new command in 60 secs, shutting down...
> info: Shutting down appium session
> info: [debug] Pressing the HOME button
> info: [debug] executing cmd: D:\tools_r25.2.3-windows\platform-tools\adb.exe -s EBAZFG563168 shell "input keyevent 3"
> info: [debug] Stopping logcat capture
> info: [debug] Logcat terminated with code null, signal SIGTERM
> info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"shutdown"}
> info: [debug] [BOOTSTRAP] [debug] Got command of type SHUTDOWN
> info: [debug] [BOOTSTRAP] [debug] Returning result: {"status":0,"value":"OK, shutting down"}
> info: [debug] [BOOTSTRAP] [debug] Closed client connection

What would be possible workaround?

  • I have already answered the similar problem here. You can refer this. – Vinod Feb 1 '17 at 13:12

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.