簡體   English   中英

在Mac上,Appium服務器將無法通過Java從Eclipse啟動

[英]Appium server will not start from Eclipse through Java on a Mac

當我嘗試使用Java從e​​clipse啟動我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM