Автоматизиране на мобилния браузър на Android с Appium

Пиша прост тест за навигация до уебсайт в мобилен браузър, най-вече за да разбера Appium. Използвам емулатор за Android. Моят код изглежда така:

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

Когато стартирам теста, браузърът на емулатора стартира за кратко, но преди да навигира до сайта на Wikipedia, към който се стремя, получавам това:

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)


добавете приложение в желаната възможност като capabilities.setCapability("app", "Chrome");

person SahilPatel    schedule 29.01.2015
comment
Страхувам се, че не работи. Все още получавам SessionNotCreatedException. И сега браузърът дори вече не се отваря, както преди. - person E.T.; 29.01.2015
comment
DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(устройство,Android); capabilities.setCapability(приложение, Chrome); capabilities.setCapability(CapabilityType.BROWSER_NAME,); capabilities.setCapability(CapabilityType.VERSION, 5.0); capabilities.setCapability(deviceName,TA9330FZ02); capabilities.setCapability(CapabilityType.PLATFORM, WINDOWS) - person SahilPatel; 29.01.2015
comment
с тази възможност мога да отворя chrome в устройството си - 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/браузър. - 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
Не мисля, че това отговаря на въпроса на OP; искат да управляват стандартния браузър за android, без да се срива, не се интересуват от приложението за браузър google chrome. Не забравяйте, че терминът Chrome не се отнася непременно до браузъра Google Chrome. - person Vince Bowdren; 02.07.2015