java - 以编程方式启动时 Appium 不会初始化驱动程序

标签 java selenium command-line-arguments appium

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

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");

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

什么也没发生。该过程不会继续下一行(即设置 DesiredCapability)。 chrome 未在设备上启动。

注意:当我从命令行执行命令,然后从 DesiredCapability 行开始测试时,测试运行良好,并且 chrome 已成功初始化。

代码有什么问题?

最佳答案

最新的 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");

关于java - 以编程方式启动时 Appium 不会初始化驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34897272/

相关文章:

java - 正则表达式检测代码中的注释

c# - 等待时发生 StaleElementReferenceException

selenium webdriver 中的 Java else if 语句 - 阴性测试

c# - 我可以使用 .NET Remoting 进行控制台应用程序和由同一控制台应用程序创建的进程之间的通信吗?(两者都在同一台服务器上)

batch-file - 批处理文件 - 支持以百分号结尾的语法来访问参数

java - 为什么 Eclipse 说 "errors exist"但在控制台中什么也没显示?

java - 在 hibernate 启动时删除所有表

java - JPanel 和 JScrollPane 在 Swing App 中不可见

java - 关于 Selenium : find element by its child link text的问题

c中的命令行参数处理