+ 首页>>技能>>内容

技能Appium 新手常见问题500+次围观

Appium 新手常见问题
看见TesterHome中好多Appium的新手问题,在这里简单作一些归类和总结,包括一些务实的技巧和方法,希望对新人有帮助,上手Appium开始写代码的时候个人建议好好学习下Selenium,熟练使用Selenium的API对你玩转Appium有相当大(质的飞跃)的帮助!
本文由我最先发表在TesterHome社区,在DiggerPlus进行一次同步,如果也想参与到这个贡献中来,可以在这里直接留言反馈或者到TesterHome原帖中进行交流。

本帖可以持续补充和持续更新,旨在帮助新人扫除在折腾Appium的时候出现的各种常见入门问题。

友情提醒:

上手写脚本时,GitHub上Appium源码里面的SampleCode中都是一些非常不错的入门例子。

玩转Appium可能需要了解的知识:

1.Python/Java等语言基础(很重要,这是必备的)

2.安卓/IOS应用的相关基础知识(包括Activity等的基本概念)
———– Activity的问题TesterHome里问的人有很多,见下文。

3.一些SDK包中常用的调试命令和技巧 (最起码能简单搭建起模拟器什么的,调试真机的时候,别忘了打开USB调试模式。) ……

Appium新手常见问题

1.启动脚本的时候,提示apk包Could not make a String,这是在释放stings.json的时候出现的错误,一般是由于APK包损坏导致的,确认一下你的APK包是否损坏,最实在的验证方法是直接将APK扔到手机里点一下,看看会不会提示解压APK包时发生错误。

2.Activity错误中两类比较常见:

一类是包名或者Activity参数直接没有写对,会提示:不存在Activity,建议在写脚本的时候在Activity中写上完整的名字,不要缩写,严谨一些不会错。完整包名类似com.xxx.xxx.Activity。

另外一类是没有写对启动Activity,虽然你写对了Activity,但是你写的不是启动Activity,会报一个”XXX Never XXX”的错误。

包名参数和Activity这两个参数可以在AndroidManifest.xml中清楚的看到

关于如何获取AndroidManifest.xml,可以参考一下apktool的用法,使用起来非常简单

http://code.google.com/p/android-apktool/

包名在这里看:
<manifest android:versionCode=”12″ android:versionName=”2.6.0.0.0″ package=”com.xxx.xxx”
一般位于XML定义的下一行

启动Activity在这里看,带有LAUNCHER关键字







那么,本例中就是com.xxx.xxx.SplashActivity

3.关于如何定位元素的问题

如果作为Appium的玩家,你问出这样的问题,我认为你是Selenium的基础不牢靠。
id,classname,name,xpath,tagname……,其实很多元素定位的方法都跟DOM有关,如果对Web前端开发熟悉的童鞋上手这个不会有难度,当然了,对于APP来讲,你可以借助一些现成的工具进行嗅探

比如 uiautomatorviewer 不用单独下载,因为你在折腾Appium的时候你肯定会下载SDK,很幸运,这玩意就是在SDK中自带的,所以如果你已经设置了环境变量的话,直接敲命令就可以启动他了。

4.关于如何等待一个元素的出现而不用一些笨拙粗暴的time.sleep()方法

我相信这是一个非常大众化的需求,我们需要等待某一个元素的出现以此来让我们的脚本进入到下一个Step,这个等待方法最好能够设置超时时间,然后找到后迅速callback。我们也很幸运!如果你仔细看Selenium的API你会发现这么一个东西:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0

ff = webdriver.Firefox()
ff.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(ff, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement")))
finally:
ff.quit()

原来,我们的webdriver.support.ui中有一个强大的WebDriverWait可以帮助我们完成这个事情。
他提供了一个极其实用的until方法,until方法可以传入一个条件型的参数,这个条件型参数来自selenium.webdriver.support中的expected_conditions,里面定义了一些”call“可调用的类,比如我们这里常用的
presence_of_element_located,意思就是等待某一元素出现(被定位到)

更多关于API上的惊喜可以猛戳这里:http://selenium-python.readthedocs.org/index.html

5.关于Appium For Windows
不喜欢折腾的童鞋可以选择在Windows端快速入门Appium,Appium For Windows使用起来极其简单,下载完成后直接双击Appium.exe,然后点击LAUNCHER即可。

6.想到了再写吧……

可能对你有帮助的一些在线API手册

这里我更多的是提供了Python的例子,其他同理。
Selenium Python Bindings

Python相关的一些知识

Python API / Nose / Unittest 官方例子中所用到的东西,很多新人看不懂Setup和TearDown是有原因的,(>_<)

via TesterHome

+ 猜你喜欢...

===== 关于 DiggerPlus =====
DiggerPlus是国内新锐测试人垂直内容博客,专注于挖掘测试工具,普及测试技术,专注于测试人能力提升,博客上线后就受到广大测试人的热烈追捧;此外,DiggerPlus深度整合评测资源,揭秘科技数据和真相,让读者更懂科技,更好地把玩科技。 我们始终保持"独立,客观,严谨,优秀"的优良作风,努力为读者带来源源不断的优质内容。想访问更多酷毙的测试人网站?赶紧来DiggerPlus测试人网址导航看看吧!

===== DiggerPlus Team =====
DiggerPlus Team是DiggerPlus官方发起的团队,这是一群热爱科技,热爱测试,喜欢深度挖掘的热血测试人,他们是评测师,测试专家。 我们欢迎优秀的测试人加入DiggerPlus Team。 加入DiggerPlus,可以成为我们的认证Dper,认证Dper拥有DiggerPlus独一无二的专栏并得到个人展示。

===== DiggerPlus 官方读者群 =====
DiggerPlus官方读者群(一)

+ 关于本文作者

Python/C/C++/Javascript程序员,持续学习者,目前专注于前端开发。

的专栏 | 专栏作者 | 访问小A的主页

+ 发表评论

开源中国精彩推送

基于开源中国OpenAPI开发
  • Copyright © 2014 DiggerPlus. 89 queries in 1.865 seconds.
    使用合作网站账号快速登录,更多精彩等着您: 开源中国