线程“main"中的异常org.openqa.selenium.remote.UnreachableBrowserException:无法启动新会话,使用 appium 时 [英] Exception in thread "main" org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session, When using appium

查看:27
本文介绍了线程“main"中的异常org.openqa.selenium.remote.UnreachableBrowserException:无法启动新会话,使用 appium 时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为在我的机器上运行的 Appium 服务器运行代码时总是出错.谁能帮我解决这个问题.我关注了一些线程,但没有一个不能解决我的问题.

如果我手动运行appium.exe"&运行代码工作正常,但是当我从代码开始运行 appium 时,&互动是一个问题.

配置:Windows 7 64 位、Appium 1.2.4.1、Selenium 2.45、Appium Java 客户端 - 2.2、java 1.6

以下是以编程方式启动 Appium 服务器的代码

公共类 AppiumServerUtils {公共无效启动服务器(){CommandLine command = new CommandLine("cmd");command.addArgument("/c");command.addArgument("F:\\Softwares\\Selenium\\Appium\\AppiumForWindows-1.2.4.1\\Appium\\node.exe");command.addArgument("F:\\Softwares\\Selenium\\Appium\\AppiumForWindows-1.2.4.1\\Appium\\node_modules\\appium\\bin\\appium.js");command.addArgument("--address");command.addArgument("127.0.0.1",false);command.addArgument("--port",false);command.addArgument("4723",false);command.addArgument("--bootstrap-port",false);command.addArgument("4724",false);command.addArgument("--selendroid-port",false);command.addArgument("8082",false);command.addArgument("--no-reset",false);command.addArgument("--local-timezone");command.addArgument("--log");command.addArgument("F:\\Softwares\\Selenium\\Appium\\appiumServerLogs.txt");DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();DefaultExecutor executor = new DefaultExecutor();executor.setExitValue(1);尝试 {executor.execute(命令,resultHandler);} catch (IOException e) {e.printStackTrace();}}公共无效停止服务器(){CommandLine command = new CommandLine("cmd");command.addArgument("/c");command.addArgument("taskkill");command.addArgument("/F");command.addArgument("/IM");command.addArgument("node.exe");DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();DefaultExecutor executor = new DefaultExecutor();executor.setExitValue(1);尝试 {executor.execute(命令,resultHandler);} catch (IOException e) {e.printStackTrace();}}

}

我的移动脚本是,

静态AndroidDriver驱动;AppiumServerUtils aServer = new AppiumServerUtils();aServer.startServer();DesiredCapabilities mDesiredCapabilities = 新的 DesiredCapabilities();mDesiredCapabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");mDesiredCapabilities.setCapability(MobileCapabilityType.DEVICE_NAME,Nexus S");mDesiredCapabilities.setCapability(MobileCapabilityType.APP_PACKAGE, "com.android.vod");mDesiredCapabilities.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.android.vod.launcher.Main");mDesiredCapabilities.setCapability(MobileCapabilityType.APP_WAIT_ACTIVITY, "com.android.vod.tools.remotecontrol.dialogs.Authentication");mDesiredCapabilities.setCapability(MobileCapabilityType.VERSION, "4.3");driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), mDesiredCapabilities);androidDriver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);androidDriver.hideKeyboard();驱动程序关闭();

得到以下异常,

<块引用>

线程main"org.openqa.selenium.remote.UnreachableBrowserException 中的异常:无法启动新会话.可能的原因是远程服务器地址无效或浏览器启动失败.构建信息:版本:'2.45.0',修订版:'5017cb8',时间:'2015-02-26 23:59:50'系统信息:主机:'Saravanan-PC',ip:'192.168.101.22',os.name:'Windows 7',os.arch:'x86',os.version:'6.1',java.version:'1.6.0_45'驱动程序信息:driver.version:AndroidDriver在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:593)在 io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:180)在 org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:240)在 org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:126)在 org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:153)在 io.appium.java_client.AppiumDriver.(AppiumDriver.java:109)在 io.appium.java_client.android.AndroidDriver.(AndroidDriver.java:40)在 com.helloappium.HelloAppium.main(HelloAppium.java:48)引起:org.apache.http.conn.HttpHostConnectException: Connect to 127.0.0.1:4723 [/127.0.0.1] failed: Connection denied: connect在 org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:142)在 org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:319)在 org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363)在 org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219)在 org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195)在 org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86)在 org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)在 org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)在 org.openqa.selenium.remote.internal.ApacheHttpClient.fallBackExecute(ApacheHttpClient.java:126)在 org.openqa.selenium.remote.internal.ApacheHttpClient.execute(ApacheHttpClient.java:72)在 org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:133)在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:572)……还有 7 个引起:java.net.ConnectException:连接被拒绝:连接在 java.net.PlainSocketImpl.socketConnect(Native Method)在 java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)在 java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)在 java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)在 java.net.Socket.connect(Socket.java:529)在 org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:72)在 org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:125)……还有 20 个[36minfo[39m: 欢迎使用 Appium v​​1.2.4 (REV 71584425ecf777349e3215f0f18e71e7782acfb6)[36minfo[39m: Appium REST http 接口监听器启动于 127.0.0.1:4723[36minfo[39m: [debug] 非默认服务器参数:{"address":"127.0.0.1","noReset":true,"log":"F:\Softwares\Selenium\Appium\appiumServerLogs.txt","localTimezone":true,"selendroidPort":8082}[36minfo[39m:控制台日志级别:调试[36minfo[39m:文件日志级别:调试

解决方案

我设法重现了该问题.出现这个问题是因为 appium 需要相对较长的时间来启动.如果将您构建的命令行复制到 cmd 提示符并启动它,您就可以看到它.appium 大约需要 30 秒才能准备好.所以肮脏的解决方案只是在移动脚本中的 aServer.startServer(); 之后添加 Thread.sleep(30000); .更好的解决方案是等到 appium 准备就绪.为此,我认为最好的方法是读取输出流并验证它是否包含预期的响应.

这个简单的代码展示了这种方法(没有响应验证)

InputStream is = new InputStream() {@覆盖public int read() 抛出 IOException {返回0;}};executor.getStreamHandler().setProcessOutputStream(is);尝试 {executor.execute(命令,resultHandler);for (int i=1; i<10; i++) {int nRead = is.read();如果(nRead!=0)休息;线程睡眠(5000);}}catch (IOException e) {e.printStackTrace();}catch (InterruptedException e) {e.printStackTrace();}}

Getting an error always while running code for Appium server which is running on my machine. Could anyone help me out from this. I had followed some threads but none of them could not resolve my issue.

If i run manually "appium.exe" & run code is working fine but when i start running appium from code & interacting is giving a problem.

Configurations: Windows 7 64 bit, Appium 1.2.4.1, Selenium 2.45, Appium Java client - 2.2, java 1.6

Below is the code to launch Appium server programmatically

public class AppiumServerUtils {

    public  void startServer(){

      CommandLine command = new CommandLine("cmd");
      command.addArgument("/c");
      command.addArgument("F:\\Softwares\\Selenium\\Appium\\AppiumForWindows-1.2.4.1\\Appium\\node.exe");
      command.addArgument("F:\\Softwares\\Selenium\\Appium\\AppiumForWindows-1.2.4.1\\Appium\\node_modules\\appium\\bin\\appium.js");
      command.addArgument("--address");
      command.addArgument("127.0.0.1",false);
      command.addArgument("--port",false);
      command.addArgument("4723",false);
      command.addArgument("--bootstrap-port",false);
      command.addArgument("4724",false);
      command.addArgument("--selendroid-port",false);
      command.addArgument("8082",false); 
      command.addArgument("--no-reset",false);
      command.addArgument("--local-timezone");
      command.addArgument("--log");
      command.addArgument("F:\\Softwares\\Selenium\\Appium\\appiumServerLogs.txt");
      DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();
      DefaultExecutor executor = new DefaultExecutor();
      executor.setExitValue(1);

      try {
       executor.execute(command, resultHandler);
      } catch (IOException e) {
       e.printStackTrace();
      }
     }

     public  void stopServer(){

      CommandLine command = new CommandLine("cmd");
      command.addArgument("/c");
      command.addArgument("taskkill");
      command.addArgument("/F");
      command.addArgument("/IM");
      command.addArgument("node.exe");

      DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();
      DefaultExecutor executor = new DefaultExecutor();
      executor.setExitValue(1);

      try {
        executor.execute(command, resultHandler);
      } catch (IOException e) {
        e.printStackTrace();
      }


     }

}

My script for mobile is,

static AndroidDriver driver;

    AppiumServerUtils aServer = new AppiumServerUtils();
    aServer.startServer();

DesiredCapabilities mDesiredCapabilities = new DesiredCapabilities();
    mDesiredCapabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
    mDesiredCapabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Nexus S");
    mDesiredCapabilities.setCapability(MobileCapabilityType.APP_PACKAGE, "com.android.vod");
    mDesiredCapabilities.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.android.vod.launcher.Main");
    mDesiredCapabilities.setCapability(MobileCapabilityType.APP_WAIT_ACTIVITY, "com.android.vod.tools.remotecontrol.dialogs.Authentication");
    mDesiredCapabilities.setCapability(MobileCapabilityType.VERSION, "4.3");

    driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), mDesiredCapabilities);
androidDriver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
androidDriver.hideKeyboard();
driver.close();

Getting the following Exceptions,

Exception in thread "main" org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure. Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50' System info: host: 'Saravanan-PC', ip: '192.168.101.22', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_45' Driver info: driver.version: AndroidDriver at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:593) at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:180) at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:240) at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:126) at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:153) at io.appium.java_client.AppiumDriver.(AppiumDriver.java:109) at io.appium.java_client.android.AndroidDriver.(AndroidDriver.java:40) at com.helloappium.HelloAppium.main(HelloAppium.java:48) Caused by: org.apache.http.conn.HttpHostConnectException: Connect to 127.0.0.1:4723 [/127.0.0.1] failed: Connection refused: connect at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:142) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:319) at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363) at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195) at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57) at org.openqa.selenium.remote.internal.ApacheHttpClient.fallBackExecute(ApacheHttpClient.java:126) at org.openqa.selenium.remote.internal.ApacheHttpClient.execute(ApacheHttpClient.java:72) at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:133) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:572) ... 7 more Caused by: java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:529) at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:72) at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:125) ... 20 more [36minfo[39m: Welcome to Appium v1.2.4 (REV 71584425ecf777349e3215f0f18e71e7782acfb6) [36minfo[39m: Appium REST http interface listener started on 127.0.0.1:4723 [36minfo[39m: [debug] Non-default server args: {"address":"127.0.0.1","noReset":true,"log":"F:\Softwares\Selenium\Appium\appiumServerLogs.txt","localTimezone":true,"selendroidPort":8082} [36minfo[39m: Console LogLevel: debug [36minfo[39m: File LogLevel: debug

解决方案

I managed to reproduce the problem. The problem occurs because for appium takes relatively long time to start. You can see it if copy the command line that you built to the cmd prompt and launch it. It takes about 30 sec for appium to be ready. So the dirty solution is just to add Thread.sleep(30000); after aServer.startServer(); in the mobile script. The better solution is wait until appium will ready. For this purpose I think the best approach - read output stream and verify that it contains the expected response.

This simple code shows this approach (without the response verification)

InputStream is = new InputStream() {
    @Override
    public int read() throws IOException {
        return 0;
    }
};
executor.getStreamHandler().setProcessOutputStream(is);
try {
     executor.execute(command, resultHandler);
     for (int i=1; i<10; i++) {
         int nRead = is.read();
         if(nRead!=0)
             break;
         Thread.sleep(5000);
         }
     }catch (IOException e) {
            e.printStackTrace();
     }catch (InterruptedException e) {
            e.printStackTrace();
     }
}

这篇关于线程“main"中的异常org.openqa.selenium.remote.UnreachableBrowserException:无法启动新会话,使用 appium 时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆