Автоматизация мобильного браузера на Android с помощью Appium

Я пишу простой тест для перехода на веб-сайт в мобильном браузере, в основном для понимания Appium. Я использую эмулятор андроида. Мой код выглядит так:

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

Когда я запускаю тест, браузер эмулятора ненадолго запускается, но прежде чем он перейдет на нужный мне сайт Википедии, я получаю следующее:

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)

Я не уверен, в чем моя ошибка. Любая помощь приветствуется.


person E.T.    schedule 29.01.2015    source источник


Ответы (4)


добавить приложение с желаемой возможностью, например,bilities.setCapability("app", "Chrome");

person SahilPatel    schedule 29.01.2015
comment
Боюсь, не работает. Я все еще получаю исключение SessionNotCreatedException. И теперь браузер даже больше не открывается, как раньше. - person E.T.; 29.01.2015
comment
Возможности DesiredCapabilities = new DesiredCapabilities(); возможности.setCapability(устройство,Android); Возможности.setCapability(приложение, Chrome); Возможности.setCapability(CapabilityType.BROWSER_NAME, ); возможности.setCapability(CapabilityType.VERSION, 5.0); Возможности.setCapability (имя устройства, TA9330FZ02); возможности.setCapability(CapabilityType.PLATFORM, WINDOWS) - person SahilPatel; 29.01.2015
comment
с этой возможностью я могу открыть хром на своем устройстве - person SahilPatel; 29.01.2015
comment
Извините, это все еще не работает для меня. Я скопировал ваше предложение, изменив только имя устройства, чтобы оно соответствовало моему устройству, но все равно получаю ту же ошибку. Возможно, на виртуальном устройстве, которое я использую, возникла проблема с Chrome. Поскольку мне все равно нужно использовать стандартный браузер Android для моих тестов, есть ли способ использовать его вместо Chrome? Я пытался заменить Chrome на Android, но это ничего не изменило. - person E.T.; 29.01.2015
comment
Спасибо, что нашли время помочь, кстати. - person E.T.; 29.01.2015
comment
Просто хочу добавить, что мне удалось открыть стандартный браузер Android с кодом в OP, но он разбился, прежде чем смог перейти на нужный веб-сайт. - person E.T.; 29.01.2015
comment
У меня те же проблемы, и я провел, может быть, день, пытаясь найти разные рекомендации в Интернете. Отстой, нет стандартного примера для Appium/Android/Browser. - person Shane; 15.08.2016

Я так понимаю, что к настоящему моменту у вас уже есть решение вашего вопроса. Но это ради таких людей, как я, которые ищут ответ на тот же вопрос выше. я устал пользоваться

capabilities.setCapability("browserName", "Chrome");

вместо

capabilities.setCapability("browserName", MobileBrowserType.BROWSER);

и это сработало.

person bharath Raj    schedule 11.07.2015

Даже я столкнулся с той же проблемой. В каталоге установки appium будет файл chromedriver.exe. Замените этот файл последней версией. Это решило проблему для меня. Дайте мне знать, если вам нужен более подробный ответ.

person HemaSundar    schedule 14.07.2015

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

    import os

    import unittest
    from appium import webdriver


    # Returns absoute path relative to this file and not cwd
    PATH = lambda p: os.path.abspath(
        os.path.join(os.path.dirname(__file__), p)
    )
    class SimpleAndroidTests(unittest.TestCase):
        def setUp(self):
            desired_caps = {}
    #Specify platform below(Android, iOS)
            desired_caps['platformName'] = 'Android'
    #Specify OS version(Settings->About phone -> android version)
            desired_caps['platformVersion'] = '5.0.1'
    #Obtain the Device name from Adb[For Android](Terminal Command: "adb devices")
            desired_caps['deviceName'] = 'TA93400A78'
    #Specify the path to Application
            desired_caps['app'] = PATH('Chrome-com.android.chrome-2171093-v39.0.2171.93.apk')

            self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

        def tearDown(self):
            # end the session
            self.driver.quit()


        def test_open_chrome(self):
            self.driver.implicitly_wait(20)
            self.driver.find_element_by_id("com.android.chrome:id/terms_accept").click()
            self.driver.implicitly_wait(5)
            for i in range(0,3):
                self.driver.find_element_by_id("com.android.chrome:id/positive_button").click()
                self.driver.implicitly_wait(5)
            self.driver.find_element_by_id("com.android.chrome:id/menu_button").click()
            self.driver.implicitly_wait(5)
            self.driver.find_element_by_name("New incognito tab").click()
            self.driver.implicitly_wait(5)
            self.driver.back()
            self.driver.implicitly_wait(5)
            self.driver.find_element_by_name("Bookmarks").click()
            self.driver.implicitly_wait(5)
            self.driver.back()
            self.driver.implicitly_wait(5)
            self.driver.find_element_by_name("Recent tabs").click()
            self.driver.implicitly_wait(5)
            self.driver.back()
            self.driver.implicitly_wait(5)
            self.driver.find_element_by_name("History").click()
            self.driver.implicitly_wait(5)
            self.driver.back()
            self.driver.implicitly_wait(5)
            self.driver.find_element_by_name("Bookmarks").click()
            self.driver.implicitly_wait(5)
            self.driver.back() 
            self.driver.implicitly_wait(5)
            self.driver.find_element_by_name("Settings").click()
            self.driver.implicitly_wait(5)
            self.driver.find_elements_by_name("com.android.chrome:id/header_title").click()
            self.driver.implicitly_wait(5)
            self.driver.back()
            self.driver.implicitly_wait(5)
            self.driver.find_element_by_name("Help & feedback").click()
            self.driver.implicitly_wait(5)
            self.driver.back()
            self.driver.implicitly_wait(5)






    if __name__ == '__main__':
        suite = unittest.TestLoader().loadTestsFromTestCase(SimpleAndroidTests)
        unittest.TextTestRunner(verbosity=2).run(suite)
person Community    schedule 30.01.2015
comment
Я не думаю, что это отвечает на вопрос ОП; они хотят управлять стандартным браузером Android без сбоев, их не интересует приложение браузера Google Chrome. Помните, что термин Chrome не обязательно относится к браузеру Google Chrome. - person Vince Bowdren; 02.07.2015