【问题标题】:Error in executing Java program appium and other exceptions执行Java程序appium出错等异常
【发布时间】:2019-09-03 18:43:19
【问题描述】:

我正在尝试执行以下代码

public static void main(String[] args) throws MalformedURLException {

AndroidDriver<AndroidElement>  driver=Capabilities();
        
      //xPath id className, androidUIautomator  //tagname[@attribute='value']

//Registration of the device
//driver.findElementByXPath("//android.widget.EditText[@resource-id='iMSSO_Alert1_Continue_button']").click();

//driver.findElementByXPath("//android.widget.EditText[@resource-id='btnAgree']").click();


driver.findElementByXPath("//android.widget.EditText[@resource-id='USER']").sendKeys("aris");
driver.findElementByXPath("//android.widget.EditText[@resource-id='PASSWORD']").sendKeys("kKL2WBU7ggCeMh4izUY4Kg==");
driver.findElementByXPath("//android.widget.EditText[@resource-id='btnLogin']").click(); 

}}




package appiumsample1;

import java.net.MalformedURLException;
import java.net.URL;

import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
 
public class base1 {

public static AndroidDriver<AndroidElement> Capabilities() throws MalformedURLException {


DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("deviceName", "My tab");
caps.setCapability("udid", "ce12182cabcaaa27017e"); //Give Device ID of your mobile phone/name of the device
caps.setCapability("platformName", "Android");
caps.setCapability("platformVersion", "8.1.0");
caps.setCapability("appPackage", "com.verizon.launcher.sdnasit");
caps.setCapability("appActivity", "com.verizon.launcher.webview.WebActivity");
caps.setCapability("noReset", "true");


AndroidDriver<AndroidElement> driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), caps);
return driver;



/*public static void main(String[] args) {

//Set the Desired Capabilities
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("deviceName", "My Phone");
caps.setCapability("udid", "ce12182cabcaaa27017e"); //Give Device ID of your mobile phone/name of the device
caps.setCapability("platformName", "Android");
caps.setCapability("platformVersion", "8.1.0");
caps.setCapability("appPackage", "com.verizon.launcher.sdnasit");
caps.setCapability("appActivity", "com.verizon.launcher.webview.WebActivity");
caps.setCapability("noReset", "true");





//Instantiate Appium Driver
try {
AppiumDriver<MobileElement> driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), caps);

} catch (MalformedURLException e) {
System.out.println(e.getMessage());
} */


// UI Automator tool 

}

异常

远程会话。请检查服务器日志以获取更多详细信息。原来的 错误:处理时发生未知的服务器端错误 命令。原始错误:无法启动 'com.verizon.launcher.sdnasit' 应用程序。访问 https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/activity-startup.md 用于故障排除。原始错误:执行 adbExec 时出错。原来的 错误:'命令 'C:\Users\SINGTO2\AppData\Local\android\sdk\platform-tools\adb.exe -P 5037 -s ce12182cabcaaa27017e shell am start -W -n com.verizon.launcher.sdnasit/com.verizon.launcher.webview.WebActivity -S'在 20000 毫秒后超时'。尝试增加 'adbExecTimeout' 能力所代表的 20000ms adb 执行超时 构建信息:版本:'3.141.59',修订:'e82be7d358',时间:'2018-11-14T08:25:48' 系统信息:主机:'TFL0074ALKVTMLM',ip:'10.69.131.113',os.name:'Windows 10',os.arch:'amd64',os.version:'10.0', java.version: '1.8.0_181' 驱动信息:driver.version:AndroidDriver 远程堆栈跟踪:UnknownError:处理命令时发生未知的服务器端错误。原始错误:无法启动 'com.verizon.launcher.sdnasit' 应用程序。访问 https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/activity-startup.md 用于故障排除。原始错误:执行 adbExec 时出错。原来的 错误:'命令 'C:\Users\SINGTO2\AppData\Local\android\sdk\platform-tools\adb.exe -P 5037 -s ce12182cabcaaa27017e shell am start -W -n com.verizon.launcher.sdnasit/com.verizon.launcher.webview.WebActivity -S'在 20000 毫秒后超时'。尝试增加 'adbExecTimeout' 能力所代表的 20000ms adb 执行超时 在 getResponseForW3CError (C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\protocol\errors.js:826:9) 在 asyncHandler (C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\protocol\protocol.js:447:37) 在 process._tickCallback (internal/process/next_tick.js:68:7) 构建信息:版本:'3.141.59',修订:'e82be7d358',时间:'2018-11-14T08:25:48' 系统信息:主机:'TFL0074ALKVTMLM',ip:'10.69.131.113',os.name:'Windows 10',os.arch:'amd64',os.version:'10.0', java.version: '1.8.0_181' 驱动信息:driver.version:AndroidDriver 在 io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:208) 在 io.appium.java_client.remote.AppiumCommandExecutor.createSession(AppiumCommandExecutor.java:217) 在 io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:239) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552) 在 io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:41) 在 io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1) 在 io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1) 在 org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213) 在 io.appium.java_client.AppiumDriver.startSession(AppiumDriver.java:323) 在 org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:131) 在 io.appium.java_client.DefaultGenericMobileDriver.(DefaultGenericMobileDriver.java:37) 在 io.appium.java_client.AppiumDriver.(AppiumDriver.java:86) 在 io.appium.java_client.AppiumDriver.(AppiumDriver.java:96) 在 io.appium.java_client.android.AndroidDriver.(AndroidDriver.java:94) 在 appiumsample1.base1.Capabilities(base1.java:25) 在 appiumsample1.base2.main(base2.java:13) 引起:java.lang.reflect.InvocationTargetException 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:186) ... 15 更多 原因:org.openqa.selenium.WebDriverException:处理命令时发生未知的服务器端错误。原来的 错误:无法启动“com.verizon.launcher.sdnasit”应用程序。 访问 https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/activity-startup.md 用于故障排除。原始错误:执行 adbExec 时出错。原来的 错误:'命令 'C:\Users\SINGTO2\AppData\Local\android\sdk\platform-tools\adb.exe -P 5037 -s ce12182cabcaaa27017e shell am start -W -n com.verizon.launcher.sdnasit/com.verizon.launcher.webview.WebActivity -S'在 20000 毫秒后超时'。尝试增加 'adbExecTimeout' 能力所代表的 20000ms adb 执行超时 构建信息:版本:'3.141.59',修订:'e82be7d358',时间:'2018-11-14T08:25:48' 系统信息:主机:'TFL0074ALKVTMLM',ip:'10.69.131.113',os.name:'Windows 10',os.arch:'amd64',os.version:'10.0', java.version: '1.8.0_181' 驱动信息:driver.version:AndroidDriver 远程堆栈跟踪:UnknownError:处理命令时发生未知的服务器端错误。原始错误:无法启动 'com.verizon.launcher.sdnasit' 应用程序。访问 https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/activity-startup.md 用于故障排除。原始错误:执行 adbExec 时出错。原来的 错误:'命令 'C:\Users\SINGTO2\AppData\Local\android\sdk\platform-tools\adb.exe -P 5037 -s ce12182cabcaaa27017e shell am start -W -n com.verizon.launcher.sdnasit/com.verizon.launcher.webview.WebActivity -S'在 20000 毫秒后超时'。尝试增加 'adbExecTimeout' 能力所代表的 20000ms adb 执行超时 在 getResponseForW3CError (C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\protocol\errors.js:826:9) 在 asyncHandler (C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\protocol\protocol.js:447:37) 在 process._tickCallback (internal/process/next_tick.js:68:7) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler$0(W3CHandshakeResponse.java:62) 在 org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30) 在 org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126) 在 java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) 在 java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958) 在 java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126) 在 java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498) 在 java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485) 在 java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) 在 java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152) 在 java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 在 java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464) 在 org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)

根据答案添加代码

public class base1 {

public AndroidDriver<MobileElement> driver;
        public WebDriverWait wait;
        public Dimension size;
        public String destDir;
public DateFormat dateFormat;

public (swipe) {
};


public (takeScreenShot) {
};

@BeforeMethod

public void setup () throws MalformedURLException {

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("deviceName", "My tab");
caps.setCapability("udid", "ce12182cabcaaa27017e"); //Give Device ID of your mobile phone/name of the device
caps.setCapability("platformName", "Android");
caps.setCapability("platformVersion", "8.1.0");
caps.setCapability("skipUnlock","true");
caps.setCapability("appPackage", "com.verizon.launcher.sdnasit");
caps.setCapability("appActivity", "com.verizon.launcher.webview.WebActivity");
caps.setCapability("noReset", "true");
driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"),caps);
wait = new WebDriverWait(driver, 10);

}

@Test
     public void test () throws Exception {

    //Test commands
    }

@AfterMethod

    public void teardown(){
        driver.quit();
    }

/*public AndroidDriver<AndroidElement> Capabilities() throws MalformedURLException {


DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("deviceName", "My tab");
caps.setCapability("udid", "ce12182cabcaaa27017e"); //Give Device ID of your mobile phone/name of the device
caps.setCapability("platformName", "Android");
caps.setCapability("platformVersion", "8.1.0");
caps.setCapability("skipUnlock","true");
caps.setCapability("appPackage", "com.verizon.launcher.sdnasit");
caps.setCapability("appActivity", "com.verizon.launcher.webview.WebActivity");
caps.setCapability("noReset", "true");


AndroidDriver<AndroidElement> driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), caps);
return driver;

wait = new WebDriverWait(driver, 10);*/




}

【问题讨论】:

  • 你在哪里指定目标网址?
  • @dha 编辑代码

标签: java eclipse selenium appium


【解决方案1】:

1-首先检查appium是否正在运行。

2- 如果是,您应该知道有时 Node.js 无法与 127.0.0.1:4723 对话,因此请改用 0.0.0.0:4723。请记住在代码 (DesiredCapabilities) 和 appium 设置中更改此设置。

3- 你应该保持如下代码结构。还需要使用这 3 个符号: (@BeforeMethod , @Test, @AfterMethod)

类似这样的:

 import <...>
    .
    .

    public class sample {  //this is the main class. You shouldn't define it as static or void so you must not have main methode
    //define variables you will be use during the test        
public AndroidDriver<MobileElement> driver;
        public WebDriverWait wait;
        public Dimension size;
        public String destDir;
        public DateFormat dateFormat;
        .
        .
        .
    //define the methodes you will be use during the test 
    public (swipe) {
    ... };
    public (takeScreenShot) {
    ...};

@BeforeMethod

    public void setup () throws MalformedURLException {
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability("deviceName", "Galaxy S7 API 26");
        caps.setCapability("udid", "ce0217124184c72505"); //DeviceId from "adb devices" command
        caps.setCapability("platformName", "Android");
        caps.setCapability("platformVersion", "8.0");
        caps.setCapability("skipUnlock","true");
        caps.setCapability("appPackage", "app_packageName"); // Your app packageName
        caps.setCapability("appActivity","app_first_activity"); // The first activity of app. You can use "Apk Info2" application to find this
        caps.setCapability("noReset","false");
        driver = new AndroidDriver<MobileElement>(new URL("http://0.0.0.0:4723/wd/hub"),caps);
        wait = new WebDriverWait(driver, 10);
}

@Test
     public void test () throws Exception {

    //Test commands
    }

@AfterMethod

    public void teardown(){
        driver.quit();
    }

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    引用日志错误说:Original error: Cannot start the 'com.verizon.launcher.sdnasit' application.。我认为这是因为apps 功能具有误导性。

    caps.setCapability("appPackage", "com.verizon.launcher.sdnasit");
    caps.setCapability("appActivity", "com.verizon.launcher.webview.WebActivity");
    

    也许这才是真正的能力:

    caps.setCapability("appPackage", "com.verizon.launcher.sdnasit");
    caps.setCapability("appActivity", ".webview.WebActivity");
    

    为了确定,here 如何知道appPackageappActivity

    【讨论】:

      猜你喜欢
      • 2012-05-21
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多