[英]Appium server will not start from Eclipse through Java on a Mac
當我嘗試使用Java從eclipse啟動我的Appium服務器時,出現錯誤消息“ org.openqa.selenium.WebDriverException:連接被拒絕”,我一直對此感到困惑,並且我不知道自己在做什么錯。 任何幫助,將不勝感激
這是控制台日志:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building TestngCucumberBoilerPlate 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.7:resources (default-resources) @ TestngCucumberBoilerPlate ---
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/<redacted>/Documents/BlueprintTestngCucumber/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.2:compile (default-compile) @ TestngCucumberBoilerPlate ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.7:testResources (default-testResources) @ TestngCucumberBoilerPlate ---
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 6 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.2:testCompile (default-testCompile) @ TestngCucumberBoilerPlate ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ TestngCucumberBoilerPlate ---
[INFO] Surefire report directory: /Users/<redacted>/Documents/BlueprintTestngCucumber/target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running TestSuite
entered start server
commands given
Attempting to start server
Appium server started.
capabilities Set.
cucumberrunner.takescreenshot
Tests run: 5, Failures: 3, Errors: 0, Skipped: 2, Time elapsed: 6.01 sec <<< FAILURE! - in TestSuite
setUp(main.CucumberRunner) Time elapsed: 5.702 sec <<< FAILURE!
org.openqa.selenium.WebDriverException: Connection refused
Build info: version: '3.5.2', revision: '10229a9', time: '2017-08-21T17:29:55.15Z'
System info: host: '<redacted>-0046.local', ip: 'fe80:0:0:0:1048:a7a5:ee69:6124%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.13.4', java.version: '1.8.0_77'
Driver info: driver.version: AppiumDriver
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:359)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
at org.openqa.selenium.remote.internal.ApacheHttpClient.fallBackExecute(ApacheHttpClient.java:139)
at org.openqa.selenium.remote.internal.ApacheHttpClient.execute(ApacheHttpClient.java:87)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:337)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:136)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142)
at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:89)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:641)
at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42)
at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:254)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:137)
at io.appium.java_client.DefaultGenericMobileDriver.<init>(DefaultGenericMobileDriver.java:38)
at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:83)
at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:93)
at main.CucumberRunner.setUp(CucumberRunner.java:231)
takeScreenshot(main.CucumberRunner) Time elapsed: 0.002 sec <<< FAILURE!
java.lang.NullPointerException: null
at main.CucumberRunner.takeScreenshot(CucumberRunner.java:300)
quit(main.CucumberRunner) Time elapsed: 0.021 sec <<< FAILURE!
java.lang.NullPointerException: null
at main.CucumberRunner.quit(CucumberRunner.java:336)
Results :
Failed tests:
CucumberRunner.quit:336 NullPointer
CucumberRunner.setUp:231 » WebDriver Connection refused
Build info: version: '...
CucumberRunner.takeScreenshot:300 NullPointer
Tests run: 5, Failures: 3, Errors: 0, Skipped: 2
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.736 s
[INFO] Finished at: 2018-07-13T13:00:57-04:00
[INFO] Final Memory: 29M/1206M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test (default-test) on project TestngCucumberBoilerPlate: There are test failures.
[ERROR]
[ERROR] Please refer to /Users/<redacted>/Documents/BlueprintTestngCucumber/target/surefire-reports for the individual test results.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
這是我的Appium服務器類代碼。 每當我啟動服務器,然后嘗試連接到服務器時,都會收到錯誤消息。
公共類AppiumServer {
public void startServer() {
System.out.println("entered start server");
CommandLine command = new CommandLine(
"/Applications/Appium.app/Contents/Resources/node/bin/node");
command.addArgument(
"/Applications/Appium.app/Contents/Resources/node_modules/appium/bin/appium.js",
false);
command.addArgument("--address", false);
//command.addArgument("http://localhost:");
command.addArgument("127.0.0.1");
command.addArgument("--port", false);
command.addArgument("4723");
command.addArgument("--full-reset", false);
System.out.println("commands given");
DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();
DefaultExecutor executor = new DefaultExecutor();
executor.setExitValue(1);
System.out.println("Attempting to start server");
try {
executor.execute(command, resultHandler);
Thread.sleep(5000);
System.out.println("Appium server started.");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void stopServer() {
String[] command = { "/usr/bin/killall", "-KILL", "node" };
try {
Runtime.getRuntime().exec(command);
System.out.println("Appium server stopped.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
這是調用類,直到失敗為止。 如果我通過打開Appium手動啟動服務器,則該類成功連接。 我很確定當我嘗試通過Eclipse啟動服務器時服務器沒有啟動。
public static AppiumServer server = new AppiumServer();
@BeforeSuite
public void setUp() throws MalformedURLException {
System.out.println("Before suite started.");
server.startServer();
DesiredCapabilities capabilities = new DesiredCapabilities();
// Set ios deviceName desired capability. Set your device name.
capabilities.setCapability("deviceName", "My iPhone");
// Set BROWSER_NAME desired capability. It’s iOSin our case here.
capabilities.setCapability(CapabilityType.BROWSER_NAME, "iOS");
// Set iOS VERSION desired capability. Set your mobile device’s OS version.
capabilities.setCapability(CapabilityType.VERSION, "11.2.6");
// Set iOS platformName desired capability. It’s Android in our case here.
capabilities.setCapability("noReset", false);
capabilities.setCapability("platformName", "iOS");
//capabilities.setCapability("platformVersion", "7.1.1");
// Set your application’s appPackage if you are using any other app.
capabilities.setCapability("xcodeSigningId", "iPhone Developer");
capabilities.setCapability("appActivity", "com.<redacted>.<redacted>.<redacted>");
// It will launch app in iOS device.
capabilities.setCapability("udid", "<redacted>");
capabilities.setCapability("xcodeOrgId", "<redacted>");
capabilities.setCapability("automationName", "XCUITest");
capabilities.setCapability("bundleId", "com.<redacted>.<redacted>");
System.out.println("capabilities Set.");
driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
System.out.println("connection suceeded");
有幾種可能的解決方案:
Connection refused
意味着由於某些原因,Appium服務器無法處理傳入的請求。
1.檢查可能的本地問題
檢查是否尚未啟動相同的進程或具有相同端口的進程。
2.認為是基於服務器的
或只是每次嘗試都不運行Appium時嘗試進行測試,打開服務器並將其保留為服務器應有的性能,始終運行並在需要時處理請求。 在開始時,我還嘗試通過編程方式運行服務器來嘗試此方法,但實際上沒有必要,它速度較慢,需要維護,並且必須始終啟動。 我的觀點是這很耗時,並且沒有必要。 從命令行/控制台啟動它,有多種方法可以執行它,例如node.js,shell腳本,Appium服務器IDE。
這是最簡單的命令(來自mac) appium --address 127.0.0.1 --port 4723
3.通過AppiumDriverLocalService
可能的解決方案
AndroidDriver<MobileElement> driver=null;
AppiumDriverLocalService service=null;
service = AppiumDriverLocalService.buildDefaultService();
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("platormName", "Android");
capabilities.setCapability("deviceName", "yourAppUdid");
capabilities.setCapability("appPackage","YourAppPackage");
capabilities.setCapability("appActivity","yourAppActivity");
(or IOS)
DesiredCapabilities capabilities = new DesiredCapabilities();
// Set ios deviceName desired capability. Set your device name.
capabilities.setCapability("deviceName", "My iPhone");
// Set BROWSER_NAME desired capability. It’s iOSin our case here.
capabilities.setCapability(CapabilityType.BROWSER_NAME, "iOS");
// Set iOS VERSION desired capability. Set your mobile device’s OS version.
capabilities.setCapability(CapabilityType.VERSION, "11.2.6");
// Set iOS platformName desired capability. It’s Android in our case here.
capabilities.setCapability("noReset", false);
capabilities.setCapability("platformName", "iOS");
//capabilities.setCapability("platformVersion", "7.1.1");
// Set your application’s appPackage if you are using any other app.
capabilities.setCapability("xcodeSigningId", "iPhone Developer");
capabilities.setCapability("appActivity", "com.<redacted>.<redacted>.<redacted>");
// It will launch app in iOS device.
capabilities.setCapability("udid", "<redacted>");
capabilities.setCapability("xcodeOrgId", "<redacted>");
capabilities.setCapability("automationName", "XCUITest");
capabilities.setCapability("bundleId", "com.<redacted>.<redacted>");
System.out.println("capabilities Set.");
service.start();
driver = new AndroidDriver<MobileElement>(service, capabilities);
注意:如果您使用的Appium版本是1.5.3或更高版本,則必須在環境變量中設置APPIUM_BINARY_PATH。
例如APPIUM_BINARY_PATH = ... \\ node_modules \\ appium \\ build \\ lib \\ main.js
希望這可以幫助,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.