【问题标题】:Appium does not initialize driver when launched programaticallyAppium 在以编程方式启动时不会初始化驱动程序
【发布时间】:2016-04-26 03:14:55
【问题描述】:

我正在使用 Java 和 Selenium 通过命令行初始化 Appium,以便在 Android chrome 浏览器上运行测试。 但是,该进程运行无限时间,“DesiredCapabilities”行中的代码不会被执行。 代码:

Process proc;
String path_to_appium = System.getenv("APPIUM_HOME") + File.separator + "node_modules" + File.separator + "appium" + File.separator + "bin" + File.separator + "appium.js";
String path_to_node = System.getenv("APPIUM_HOME") + File.separator + "node.exe";
proc = Runtime.getRuntime().exec("\"" + path_to_node + "\"" + " " + "\"" + path_to_appium + "\"" + " " + "--address 127.0.0.1 --browser-name Chrome --platform-name Android --platform-version 17 --automation-name Appium --chromedriver-port 9516 --bootstrap-port 4724 --no-reset --local-timezone --log appium_log.log");

System.out.println("Android Chrome driver would be used");

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("platformName","Android");
capabilities.setCapability("deviceName", "HTC One X");
capabilities.setCapability("platformVersion", "4.2.2");
capabilities.setCapability("device", "android");
capabilities.setCapability("browserName", MobileBrowserType.CHROME);

Thread.sleep(2000);
driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
driver.get("test.com");

我在控制台中没有得到任何输出。

什么都没有发生。该过程不会继续下一行(即设置DesiredCapabilities)。 chrome 无法在设备上启动。

注意:当我从命令行执行命令,然后从DesiredCapabilities 行开始测试时,测试运行正常,chrome 初始化成功。

代码有什么问题?

【问题讨论】:

    标签: java selenium command-line-arguments appium


    【解决方案1】:

    问题出在最新的 appium 版本中,即 1_4_16_1。

    当 appium 服务器以编程方式启动时,它正在创建一个死锁,因此驱动程序没有被初始化。

    使用Appium的ServerArguments换行后问题解决

    proc = Runtime.getRuntime().exec("\"" + path_to_node + "\"" + " " + "\"" + path_to_appium + "\"" + " " + "--address 127.0.0.1 --browser-name Chrome --platform-name Android --platform-version 17 --automation-name Appium --chromedriver-port 9516 --bootstrap-port 4724 --no-reset --local-timezone --log appium_log.log");
    

    下面的代码:

                ServerArguments serverArguments = new ServerArguments();
                serverArguments.setArgument("--address","127.0.0.1");
                serverArguments.setArgument("--chromedriver-port", 9516);
                serverArguments.setArgument("--bootstrap-port", 4724);
                serverArguments.setArgument("--browser-name", "Chrome");
                serverArguments.setArgument("--no-reset", true);
                serverArguments.setArgument("--local-timezone", true);
                AppiumServer appiumServer = new AppiumServer(appium_folder, serverArguments);
                appiumServer.startServer();
    driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    driver.get("test.com");
    

    【讨论】:

    • 你可以在使用服务器功能后发布完整的代码,因为它可以帮助其他人
    • 我只替换了一行。仍然供参考,添加了用于初始化驱动程序的更多代码。
    【解决方案2】:

    我认为问题在于你在 proc 输出中循环,你永远不会离开那里,看你甚至没有得到“这是命令的标准错误(如果有的话):\n "

    我会将输出日志放在另一个线程上,以便您的程序可以继续运行,以下代码可以改进但应该可以完成工作:

    Process proc;
    String path_to_appium = System.getenv("APPIUM_HOME") + File.separator + "node_modules" + File.separator + "appium" + File.separator + "bin" + File.separator + "appium.js";
    String path_to_node = System.getenv("APPIUM_HOME") + File.separator + "node.exe";
    proc = Runtime.getRuntime().exec("\"" + path_to_node + "\"" + " " + "\"" + path_to_appium + "\"" + " " + "--address 127.0.0.1 --browser-name Chrome --platform-name Android --platform-version 17 --automation-name Appium --chromedriver-port 9516 --bootstrap-port 4724 --no-reset --local-timezone --log appium_log.log");
    
    BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
    BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
    
    new Thread()
    {
        public void run() {
            // read thae output from the command
            System.out.println("Here is the standard output of the command:\n");
            String s = null;
            while ((s = stdInput.readLine()) != null) {
                System.out.println(s);
            }
    
            // read any errors from the attempted command
            System.out.println("Here is the standard error of the command (if any):\n");
            while ((s = stdError.readLine()) != null) {
                System.out.println(s);
            }
        }
    }.start();
    
    System.out.println("Android Chrome driver would be used");
    
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("platformName","Android");
    capabilities.setCapability("deviceName", "HTC One X");
    capabilities.setCapability("platformVersion", "4.2.2");
    capabilities.setCapability("device", "android");
    capabilities.setCapability("browserName", MobileBrowserType.CHROME);
    
    Thread.sleep(2000);
    driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    driver.get("test.com");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      • 2022-10-08
      • 2016-08-24
      • 2014-11-17
      相关资源
      最近更新 更多