Accessing Android Browser with Appium

Hey there,

I’m new to Appium and trying to write a very simple program to familiarize myself with it. I have an Android emulator and want to use the Android standard browser to navigate to a website. My code looks something like this:

public class MyHomepageTest
{
    private WebDriver driver;

    String homePage = "http://en.wikipedia.org";

    @Test
    public void homepageTest() throws Exception {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "Nexus 7");
        capabilities.setCapability("platformName", "android");
        capabilities.setCapability("platformVersion", "5.0.1");
        capabilities.setCapability("browserName", "android");
        driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),
                capabilities);

        driver.get(homePage);
    }
}

When I execute homepageTest(), I get this:

org.openqa.selenium.SessionNotCreatedException: A new session could not be created. (Original error: No app set; either start appium with --app or pass in an 'app' value in desired capabilities, or set androidPackage to launch pre-existing app on device) (WARNING: The server did not provide any stacktrace information)

I would like to avoid having to start Appium with parameters. I’m guessing that “–app” means that there is no app being tested. Is there a way to include the “–app” in the code? I won’t be testing any apps for now, I just want to access the browser.

Thanks for any help.

Please try this

capabilities.setCapability(“browserName”, MobileBrowserType.BROWSER);

I think it should help you.

Thanks, that did take me further. I made the change you suggested and now, when I run the test, I see the browser briefly opened in the emulator, but before it can navigate to the website I specified, I get this:

org.openqa.selenium.SessionNotCreatedException: A new session could not be created. (Original error: Did not get session redirect from Chromedriver) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 6.00 seconds

I assume the problem is with

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

Do you have any idea what I should be doing differently?

Just as an update, I still haven’t been able to solve this. The latest version of my code looks like this:

import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileBrowserType;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.net.URL;

public class DLMobileTest
{
    private WebDriver driver;

    @Test
    public void loadingSinglePageTest() throws Exception{
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("platformVersion", "5.0.1");
        capabilities.setCapability("deviceName", "Nexus 7");
        capabilities.setCapability("browserName", MobileBrowserType.BROWSER);
        driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
        driver.get("http://en.wikipedia.org");
        driver.quit();
    }
}

The browser opens briefly, but closes before navigating to the website I want it to. Then I get the quoted error message.

org.openqa.selenium.SessionNotCreatedException: A new session could not be created. (Original error: Did not get session redirect from Chromedriver) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 5.97 seconds
Build info: version: '2.44.0', revision: '76d78cf323ce037c5f92db6c1bba601c2ac43ad8', time: '2014-10-23 13:11:40'
System info: host: 'COMPANY00010', ip: '192.168.178.21', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_20'
Driver info: io.appium.java_client.android.AndroidDriver
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599)
    at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:180)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:240)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:126)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:153)
    at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:109)
    at io.appium.java_client.android.AndroidDriver.<init>(AndroidDriver.java:39)
    at com.company.DLTest.DLMobileTest.loadingSinglePageTest(DLMobileTest.java:63)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)


Process finished with exit code -1

Hi Ethel,

have you resolved this issue i getting same problem here

if it is resolved please let me know how to over come this issue

please share some sample code.

Hi

I think you need to restart the Appium server.

I did eventually get Appium working, but it’s been a while and was a rather complicated process. Give me a few days to get back to that project and re-read my notes on what I did. I’ll share some sample code if I can.

I remember the main issue being not the code, but the configuration of Appium and other components (as an example, I discovered that Appium and the newest version of Chrome were incompatible, and had to revert to an older version of it. Things like that). So my code might not help much. Maybe the configuration details can, depending on the cause of your problem.