学习 appium 也有一段时间了,基本的操作也基本都能搞好,但是 混合页面H5 我没能搞定 先不管了,先把自己遇到的东西记录下来。
1.首先是环境问题 那先看看 安装好后的appium,在命令行输入appium-doctor 都有些什么
ANDROID_HOME 是需要配置的android环境 sdk,相关请自行百度 教程很多 主要2步:1.下载sdk 2.配置环境变量。
测试 在命令行输入:adb,会出现很多信息说明成功
---------------这个愉快的分隔符-----------
JAVA_HOME 那这个是需要配置的java环境,也是两步:1.下载sdk 2.配置环境变量。
测试 在命令行输入:javac,会出现很多信息说明成功
-------------------------
下面的3个 都是 sdk中的运行文件 adb.exe\android.bat\emulator.exe,因为这几个 appium要用所以需要放到系统环境path中,上面2个如果能配好这个也就轻轻松了
2.相关的环境配置好,然后就是需要 下载 appium并且安装了,不具体说了有两种方式,网上相关教程也行多请百度(其实挺讨厌百度的,现在基本都是bing要不就是翻墙)
其实环境和安装appium,都说不是难,最让人头疼的就是 第一次成功运行第一个小demo
这里先不说代码,先看看项目结构。
src 下是就是我们写脚本的地方
下面的3个都是 需要的jar包支持,
第一个appium 是很多的jra(等下具体说),
第二个三个是运行java程序必须的,我之所以加了1.7和1.8两个是因为 运行appium 时提示缺少1.8的jre,但是1.7的又不能去掉。所以我就照着做了,没特别的意思
最后一个apps 是待测的app
主要需要说的就是appium 这个jar包里有些什么到底怎么配,配怎样的额版本才能正常使用
简直了,是不是很多,而且里面还有selenium 相关的jar包。比担心我 来说
http://www.cnblogs.com/puresoul/p/4696825.html
额,篇文章不错的大家可以看看
可能由于这片文章太久,appium做了改动,所以 我当初按照他的类路去添加并没有成功
下载地址是一样的,我经过了好久的摆弄,然后找到很合适的一个版本配合
selenium-server-standalone-2.48.2.jar(这个用最新的应该就可以)
selenium-2.48.2(lib整个文件夹+selenium-java-2.48.2.jar+selenium-java-2.48.2-srcs.jar)
java-client-4.1.2.jar
上面就是appium jar包内的全部东西
我用的是java,大家可以下载相应的
appium jar包下载:https://search.maven.org/#search%7Cga%7C1%7Cg%3Aio.appium%20a%3Ajava-client
selenium jar包下载:http://docs.seleniumhq.org/download/(这个,需要翻墙)
到这里就可以试着写自己的第一个代码了,还是参照上面说的那片文章http://www.cnblogs.com/puresoul/p/4696825.html,
也有相应的例子可以下载
3.我遇到的错误信息
-----------------------------------------------------------------
org.openqa.selenium.SessionNotCreatedException: A new session could not be created. (Original error: Bad app: D:\eclpse_workspase\appiumTest\apps\xxx.apk. App paths need to be absolute, or relative to the appium server install dir, or a URL to compressed file, or a special app name. cause: Error: Error locating the app: ENOENT, stat 'D:\eclpse_workspase\appiumTest\apps\xxx.apk') (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 166 milliseconds
Build info: version: '2.48.2', revision: '41bccdd', time: '2015-10-09 19:59:12'
System info: host: 'SKY-20170223KZD', ip: '192.168.1.108', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_131'
仔细查路径
-------------------------------------------------------------------
org.openqa.selenium.SessionNotCreatedException: A new session could not be created. (Original error: Command failed: C:\Windows\system32\cmd.exe /s /c "D:\adt_sdk_eclpse\android-sdk-windows\platform-tools\adb.exe -s adb server version (31) doesn't match this client (39); killing...
wait-for-device"
error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 (10048)
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
could not read ok from ADB Server
* could not start server *
) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 20.76 seconds
Build info: version: '2.48.2', revision: '41bccdd', time: '2015-10-09 19:59:12'
System info: host: 'SKY-20170223KZD', ip: '192.168.1.108', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_131'
查找端口是否被占用
------------------------------------------------------------------
org.openqa.selenium.SessionNotCreatedException: appium could not start a new session.
检查 app的名称和路径
4.appium 相关设置
1.是被测app的路径
2.是被测app的 包名
3.是被测app的启动主activity名,这两个 可以问开发 或者(以下5个截图,a-e)
a.下载apktool,百度去下
b.进入到apktool,然后 找到appt.exe,并且把 被测app复制进来。此刻注意当前的位置复制下来 下一步用
c.进入命令框,进入到 刚刚复制的那个路径下,然后 输入:aapt dump badging *.apk(这个为app的名字),点击回车
d.可以看到这个就是包名
e.在很长的下拉后,这个就是启动主activity名
ok,接着说app 里面的4和5
4.勾选
No Reset 后,每次由appium启动app,就不会每次都重新安装了
或者代码中 // 不要每次运行都安装app
capabilities.setCapability("noReset", true);
capabilities.setCapability("fullReset", false);
5.这里 只需要改动 PlatormVersion(被测app 安装的手机android版本或模拟器的andorid版本)
5.最后就是代码问题了
如果能运行起来前面那篇文章的demo,下面就不陌生了
@Before
public void Sliding() throws Exception {
// 设置apk路径 Property性质、财产
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "apps");
File app = new File(appDir, "HJQ_7_v1.2.2__360.apk");--------app名称一定不要弄错
// 设置自动化测试参数 Capability能力
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
capabilities.setCapability("platformName", "Android"); // platform 平台
capabilities.setCapability("deviceName", "Android Emulator");
// 设置android系统版本
capabilities.setCapability("platformVersion", "4.4"); ----------之前说的那个手机或模拟器的版本号
// 设置apk路径
// capabilities.setCapability("app", app.getAbsolutePath());---------只用上面那种方式就可以,这个我也不怎么懂
// support(支持) Chinese
capabilities.setCapability("unicodeKeyboard", "True");
capabilities.setCapability("resetKeyboard", "True");
// no need sign(是否重签名)
capabilities.setCapability("noSign", "False");
// 不要每次运行都安装app
capabilities.setCapability("noReset", true);
capabilities.setCapability("fullReset", false);
// 设置app的主机包和主类包
capabilities.setCapability("appPackage", "com.xxx.q");
capabilities.setCapability("appActivity",
"com.huxxxxxxx.Activity");
// 初始化
driverSliding = new AndroidDriver<AndroidElement>(new URL(
"http://127.0.0.1:4723/wd/hub"), capabilities);
}
其实最主要的就是定位问题了
通过 name,classname,id,xpath等等,网上很多教程也很详细,这个需要多练习,给被测的app找到合适的定位方式(我多用xpath)
网上也有大神做了,一个uiautomatorviewer.bat 不需要自己定位 很方便,可以百度下载试试看,但是不建议新人使用。
最后 就是好好学习java,做好封装什么的 便于复用
加油!
嘻嘻嘻,最后呢 又是 碎碎念
树顶站着一只猫,格子花纹的猫。它像是在看着什么,又像是只忘着远方。
树脚下蹲着一只二哈,蠢的不行,哈哈着舌头望着这只猫。
猫知道这只狗,整日淌着口水,明明蠢的不行还表情嚣张色迷迷的张望。
猫,之前也只是一只蠢猫。喜欢玩线团,踩书纸,追蝴蝶和摔跟头。
直到它见到一只站在树顶的猪。
猪,之前更是一头蠢猪。它没想过竟然真的能沿着彩虹走到这树顶。
树每天疯涨,没想过那一天真的能触到彩虹,但是上面却走来一头猪。
看吧 看吧,又是这样,石头在二哈的爪子下叽叽的叫。
老夫当年怎么就孕育出这样一颗树
不如吸取日月精华也化个那石猴,踏南天碎林霄,打他个十万天兵养上一山猴子猴孙。
不比这一天到晚 一动不能动 看那唠甚子的紫霞来的快活自在。
又闭上眼,等着猫下树,傍晚来。