gpt4 book ai didi

android - 异常线程 "main"org.openqa.selenium.remote.UnreachableBrowserException : Could not start a new session, 使用 appium 时

转载 作者:太空狗 更新时间:2023-10-29 14:57:10 26 4
gpt4 key购买 nike

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

如果我手动运行“appium.exe”并且运行代码工作正常,但是当我开始从代码运行 appium 并且交互时出现问题。

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

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

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


}

我的移动脚本是,

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

获取以下异常,

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

最佳答案

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

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

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

关于android - 异常线程 "main"org.openqa.selenium.remote.UnreachableBrowserException : Could not start a new session, 使用 appium 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30302110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com