使用Appium在Android上自动化移动浏览器

时间:2015-01-29 09:20:10

标签: android testing selenium 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();
    }
}

当我运行测试时,模拟器的浏览器会短暂启动,但在它导航到我想要的维基百科网站之前,我明白了:

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)

我不确定我的错误是什么。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:1)

在所需的功能中添加应用程序 capabilities.setCapability(“app”,“Chrome”);

答案 1 :(得分:0)

我现在明白你会得到一个解决你问题的方法。但这是为了像我这样的人寻找上述同一问题的答案。我累了用

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

而不是

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

并且有效。

答案 2 :(得分:0)

即使我遇到同样的问题。在appium安装目录中,chromedriver.exe文件将存在。将该文件替换为最新版本。这解决了我的问题。如果您需要更详细的答案,请告诉我。

答案 3 :(得分:-1)

以下是从apk安装chrome的示例代码,您可以尝试不同的选项来测试作为要求,自动安装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)