运行Appium碰到的坑们
2016-06-27 19:40
218 查看
运行Appium的时候,碰到的那些坑
1. java命令会出现error:could not open ...jvm.cfg
出现这种情况大多是因为电脑上之前安装过JDK,卸载重装之后,运行java命令会出现error:could not open ...jvm.cfg的错误。
打开系统环境变量,查看PATH,会看到诸如此类的配置信息:
%SystemRoot%\system32;%SystemRoot%;......%JAVA_HOME%\lib;%JAVA_HOME%\bin
原因:在运行java时,默认会按照PATH中设置的路径去寻找java.exe文件,按上述PATH信息首先会去找%SystemRoot%\system32目录下的文件,而该目录下的java.exe对应的jdk安装目录已被卸载,自然会出现文件打不开的提示。
看到这儿或许你明白了,简单的解决方法有二:
1、直接删除system32目录(或windows目录,视PATH中的路径设置而定)下的java.exe(其实看下文件日期就会发现,该文件与当前安装的JAVA bin目录下的文件日期不一样);
2、直接将%JAVA_HOME%\bin;放在PATH路径的最前面(知道为什么了吧);
2. 错误信息: UiAutomator quit before it successfully launched
网上很多信息,但是最终自己的解决方法竟然是重启手机。
3. 初始化AppiumDriver的时候,使用java-client 2.0之前的版本。2.0之后的版本有初始化问题,没有找到合适的解决办法。
4. 获取app的启动activity
1) 把当前路径指向sdk的build-tools目录,并把apk文件放进去:执行以下命令: .\aapt dump badging xxx.apk命令获取包内信息。注意,启动类名称一个字母都不能错
注意launchable-activity属性
2)没有apk,应用已经安装到手机或虚拟机中。可以使用logcat命令
.清除logcat内容,使用命令adb logcat -c
.启动logcat,使用命令adb logcat ActivityManager:I *:s
5. 获取元素属性 (monitor.bat 或uiautomatorviewer.bat)
打开monitor之后,就能通过点选找出页面元素的属性了。
6. 启动测试时,遇到permission to start activity denied,一般是启动首页的activity设置有误。
Android的实例
package com.glen.demo;
import io.appium.java_client.AppiumDriver;
//import io.appium.java_client.android.AndroidDriver;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.io.File;
import java.net.URL;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class ContactsTest {
private AppiumDriver driver;
@Before
public void setUp() throws Exception {
//apk放置的位置
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "apps");
File app = new File(appDir, "app_F_1.3.0.apk");
//初始化
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
capabilities.setCapability("platformName", "Android"); //平台名称
//capabilities.setCapability("deviceName", "emulator-5554");
capabilities.setCapability("deviceName", "HTC D820mu"); //手机的名字
capabilities.setCapability("platformVersion", "4.4"); //Android 版本
capabilities.setCapability("app", app.getAbsolutePath()); //设置app路径
capabilities.setCapability("appPackage", "com.kuaichengwuliu"); //app的包名
capabilities.setCapability("appActivity", ".activities.XJWelcomePage");//app的启动页面,一般是AndroidManifest.xml里面的第一个activity
//实例化
driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
if(driver.isAppInstalled(null))
driver.removeApp(null);
else
driver.installApp(app.getAbsolutePath());
driver.launchApp();
}
@Test
public void addContact(){
// To Do List
}
@After
public void tearDown() throws Exception {
driver.quit();
}
}
1. java命令会出现error:could not open ...jvm.cfg
出现这种情况大多是因为电脑上之前安装过JDK,卸载重装之后,运行java命令会出现error:could not open ...jvm.cfg的错误。
打开系统环境变量,查看PATH,会看到诸如此类的配置信息:
%SystemRoot%\system32;%SystemRoot%;......%JAVA_HOME%\lib;%JAVA_HOME%\bin
原因:在运行java时,默认会按照PATH中设置的路径去寻找java.exe文件,按上述PATH信息首先会去找%SystemRoot%\system32目录下的文件,而该目录下的java.exe对应的jdk安装目录已被卸载,自然会出现文件打不开的提示。
看到这儿或许你明白了,简单的解决方法有二:
1、直接删除system32目录(或windows目录,视PATH中的路径设置而定)下的java.exe(其实看下文件日期就会发现,该文件与当前安装的JAVA bin目录下的文件日期不一样);
2、直接将%JAVA_HOME%\bin;放在PATH路径的最前面(知道为什么了吧);
2. 错误信息: UiAutomator quit before it successfully launched
网上很多信息,但是最终自己的解决方法竟然是重启手机。
3. 初始化AppiumDriver的时候,使用java-client 2.0之前的版本。2.0之后的版本有初始化问题,没有找到合适的解决办法。
4. 获取app的启动activity
1) 把当前路径指向sdk的build-tools目录,并把apk文件放进去:执行以下命令: .\aapt dump badging xxx.apk命令获取包内信息。注意,启动类名称一个字母都不能错
注意launchable-activity属性
2)没有apk,应用已经安装到手机或虚拟机中。可以使用logcat命令
.清除logcat内容,使用命令adb logcat -c
.启动logcat,使用命令adb logcat ActivityManager:I *:s
5. 获取元素属性 (monitor.bat 或uiautomatorviewer.bat)
打开monitor之后,就能通过点选找出页面元素的属性了。
6. 启动测试时,遇到permission to start activity denied,一般是启动首页的activity设置有误。
Android的实例
package com.glen.demo;
import io.appium.java_client.AppiumDriver;
//import io.appium.java_client.android.AndroidDriver;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.io.File;
import java.net.URL;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class ContactsTest {
private AppiumDriver driver;
@Before
public void setUp() throws Exception {
//apk放置的位置
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "apps");
File app = new File(appDir, "app_F_1.3.0.apk");
//初始化
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
capabilities.setCapability("platformName", "Android"); //平台名称
//capabilities.setCapability("deviceName", "emulator-5554");
capabilities.setCapability("deviceName", "HTC D820mu"); //手机的名字
capabilities.setCapability("platformVersion", "4.4"); //Android 版本
capabilities.setCapability("app", app.getAbsolutePath()); //设置app路径
capabilities.setCapability("appPackage", "com.kuaichengwuliu"); //app的包名
capabilities.setCapability("appActivity", ".activities.XJWelcomePage");//app的启动页面,一般是AndroidManifest.xml里面的第一个activity
//实例化
driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
if(driver.isAppInstalled(null))
driver.removeApp(null);
else
driver.installApp(app.getAbsolutePath());
driver.launchApp();
}
@Test
public void addContact(){
// To Do List
}
@After
public void tearDown() throws Exception {
driver.quit();
}
}
相关文章推荐
- 四.文件系统
- 关于 android 中 postDelayed方法的讲解
- 三.容器
- ios多线程 -- GCD 常见用法
- android左右晃动动画(红包左右晃动)
- 二 .图形API
- 一.内存管理情况
- java中Array/List/Map/Object与Json互相转换详解
- Android中listView的下拉加载功能实现
- Android仿微信二维码,源码要复制到项目里,不能导进去,会报错。
- android布局太深导致的 java.lang.StackOverflowError
- Android vector 标签 pathData 详解
- Unity的HTC VIVE SDK研究(手柄按键功能的研究,比较详细)
- android面向接口编程(抽象工厂模式,扩展性超强,Demo优化)
- unity Ios 在ios8.3及以上的版本上 材质变黑
- ios多线程 -- GCD介绍
- Android悬浮窗及其拖动事件
- android material design之简单控件(八)
- iOS每日一记之———————————————Xcode常见的错误 总结
- Android开发之高亮引导