Appium 运行 Appium 第一个 case 就出错了,看不出错误,google 了也没结果,特来求救

硫酸铜 · 2017年06月06日 · 最后由 securitytest 回复于 2017年09月26日 · 1833 次阅读

代码很简单,如下
AndroidDriver androidDriver = null;
DesiredCapabilities cap=new DesiredCapabilities();
//cap.setCapability("noReset", true);
cap.setCapability("deviceName", "Android Emulator");//设备名称
cap.setCapability(CapabilityType.BROWSER_NAME, "");
cap.setCapability("platformName", "Android");
//cap.setCapability("platformName", "Android"); //安卓自动化还是 iOS 自动化
cap.setCapability("platformVersion", "7.1.1"); //安卓操作系统版本
//cap.setCapability("sessionOverride", true);//重新启动的话会重置 session

cap.setCapability("appPackage","com.xunmeng.pinduoduo");//被测 app 的包名
cap.setCapability("appActivity",".ui.activity.MainFrameActivity");//被测 app 的入口 Activity 名称

//cap.setCapability("unicodeKeyboard", true); //支持中文输入
//cap.setCapability("resetKeyboard", true); //支持中文输入,必须两条都配置

try {
androidDriver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub,cap);//把以上配置传到 appium 服务端并连接手机")
} catch (MalformedURLException e) {
e.printStackTrace();
}
androidDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//隐式等待

//找到横滑栏,挨个点击 icon
List eList = androidDriver.findElements(By.id("image"));
for(WebElement element:eList){
element.click();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
androidDriver.pressKeyCode(AndroidKeyCode.BACK);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
这行报错:androidDriver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub,cap"));
异常如下:
Connected to the target VM, address: '127.0.0.1:62301', transport: 'socket'
Exception in thread "main" java.lang.IllegalAccessError: tried to access method org.openqa.selenium.Platform.extractFromSysProperty(Ljava/lang/String;) Lorg/openqa/selenium/Platform; from class org.openqa.selenium.remote.RemoteWebDriver
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:271)
at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:131)
at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:144)
at io.appium.java_client.DefaultGenericMobileDriver.(DefaultGenericMobileDriver.java:36)
at io.appium.java_client.AppiumDriver.(AppiumDriver.java:114)
at io.appium.java_client.AppiumDriver.(AppiumDriver.java:132)
at io.appium.java_client.android.AndroidDriver.(AndroidDriver.java:92)
at com.pdd.test.MainDemo.main(MainDemo.java:39)
实在没看懂什么意思,google 了也没找到相关资料,请大家赐教

共收到 16 条回复 时间 点赞

new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub,cap"));

确定 url 没写错?一般是 (new URL("location string"), capabilityInstance) 的

2楼 已删除
cukes 回复

嗯,没写错,cap 在 new URL 的参数外面的,要不然编译都错误了啊

4楼 已删除
硫酸铜 回复

看看 ADB 能连上机器不?先排除真机网络连通性,以及开发者调试模式看看呢。
实在不行可以用幂等的模拟器,先排除你测试脚手架的问题(特殊 BUG 版本撞大运的概率也有的)

cukes 回复

粘贴到网页上代码格式有点乱了

cukes 回复

模拟器和真机都试过了,都有这个问题。
事实上,到这行代码的时候,应用都已经启动起来了,但还是报了这个异常,之后的操作就进行不下去了

cukes 回复

adb 是可以连接的,没有问题

硫酸铜 回复

使用 markdown 的代码块排版,代码显示就好多了。

PS:建议把整个完整的文件,包括 import 的部分也一起粘贴上来吧。我猜 import 那部分有问题。

找到横滑栏,挨个点击 icon,应该是这样写的吧

List < WebElement >  eList  =  androidDriver.findElements(By.id("image"));
androidDriver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub,cap"));

仔细检查下代码,明显的错误,引号位置

从 log 日志对应不到相应代码行, 请贴出完整代码。

12 楼正解

xuxu 回复

粘贴到网页上不知道为啥,格式有点问题,其实 cap 是在 new URL 参数之外的,这里是没问题的。。

李瑞煜 回复

log 对应的那一行就是

at com.pdd.test.MainDemo.main(MainDemo.java:39)
这行出错了,然后看错误提示第一行提示 java.lang.IllegalAccessError,显示非法连接错误,可能你的参数有问题
我是这么理解的

硫酸铜 关闭了讨论 03月29日 22:12
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册