Android,使用Appium,进行自动化测试

⚠️本文描述的是关于Appium,在Mac上面的使用方式。

注意,如果app里面有WebView,那么无法通过这个appium,
定点测试Webview 加载的某一个element;这个问题,已经搞2天了,
但是并没有解决,如果大家有解决方案的话,
恳请赐教!

贴上学习链接:

//appium使用引导
http://www.automationtestinghub.com/appium-tutorial/
//UiScrollable的api
https://developer.android.com/reference/android/support/test/uiautomator/UiScrollable


先讲其他的也许会很难懂,先给大家最终结果:

手机放在桌子上面,没人碰它,注意是没人碰它!,突然之间,微信打开了,在朋友列表,找到你的女朋友,然后给她发了一条消息,“我门分手吧!”。

Amazing ? ,这就是自动化!

手机上安装的任何一个app,都能实现这种类型的操作。
比如,打开精冬,收藏铁三角SPORT7TW.
再比如,打开大众点评,给某一个商家,写1星差评;

回到主题,我们要做的,其实是自动话测试,并不是给女朋友发消息。下面分析一下,发消息这个过程是怎么实现的。

这段是重点,用Appium进行测试的过程:
     用B语言(比如java、js等等)写一个脚本B1,B1的具体内容:
“启动微信,进入通信录,找到女朋友,发消息”,
再通过工具A 执行脚本B1。
然后,你的女朋友,就会收到分手消息,是不是intereting?
上面的过程如何实现?
第1步, 配置环境
第2步, 写脚本
第3步, 准备好手机,并运行脚本

第1步,如果你是新手,那么流血是必然的,你会觉得世界非常的不友好
第2步,自动化测试的主体,所有的功能测试都是通过脚本实现的,虽然你没有点手机给女朋友发消息,但是你的脚本实现了这个发消息的功能逻辑
第3步,最简单,也许就是一个回车,也许就是点击一个运行button,在Android Studio 上面就是快捷键Command +R。

如何写脚本?
产品需求:“启动微信,进入通信录,找到女朋友,发消息”
转换为代码逻辑:“找到微信Apk的包名、微信lauchActivity的simpleName,启动微信;找到按钮‘通信录’的id,click这个id;
滑动通信录列表,找到女朋友的id或者name,点击女朋友;
启动软件盘,输入内容,点击发送”,这就是上面的B1脚本。

上面已经分析了 有3步,作为一个老手,第一步其实也非常简单,我们今天不讲第一步的内容,如果大家有需要,可以上BD或者GG搜索下,如何配置Appium。
下面进入两个主体,其一是脚本语言,
其二是server工具。
第一,脚本语言
实现B1脚本,可以用java,javascript,python,objectC任意一种。
本文主要描述java 脚本语言
首先, 我们看一个比较熟悉的代码模型:在webview里面插入js代码:

/**
 * 其中jsToast是 .js文件里面的function,
 * 作用是弹出alert(Test)
*/
mWebView.loadUrl("javascript:jsToast(\"Test\")");

脚本里面的语法就跟 "javascript:jsToast("Test")",非常相似:

下面是示例,滑动RecyclerView,到item中的text为“曹操的故事”

MobileElement ele1 =
driver.findElement(MobileBy.AndroidUIAutomator(
"new UiScrollable("new UiSelector().resourceId(\"cn.t:id/mRecyclerView_id\"))
.getChildByText("new UiSelector().className(\"android.widget.TextView\"),\"曹操的故事\")"));

driver:非常重要的class,几乎所有功能都需要用到它
ele1: MobileElement手机元素,在android里面我门叫它View,
            比如TextView,ImageView,类似html里面的元素,
cn.t: app包名
mRecyclerView_id: RecyclerView的id:
曹操的故事: 目标TextView的Text
UiScrollable:类似RecyclerView
UiSelector:类似View

我们把上面的例子拆解一下,理解起来要容易一些,分为2步

1,初始化RecyclerView
 RecyclerView:mRecyclerView ="new UiScrollable(new UiSelector().resourceId(\"cn.t:id/mRecyclerView_id\"))";
2,滑动到"曹操的故事"
mRecyclerView.getChildByText(new UiSelector().className(\"android.widget.TextView\"),\"曹操的故事\")

所有的命令都是通过字符串的方式进行,上面2步合成一个字符串str

MobileElement ele1 =driver.findElement(MobileBy.AndroidUIAutomator(str);

我们就拿到了view= ele1,并且滑动到这个位置

另外,在RecyclerView里面滑动到某一个位置还有其他方式,比如.scrollIntoView(new UiSelector().text("曹操的故事"),文章顶部有个关于UiScrollable的链接,里面有具体的api

第二,Server工具
很简单,安装Appium.dmg,就行了,并做下面的配置
Server Address:0.0.0.0
Server Port : 4723
Allow Session Override :☑️

关于Appium的测试过程就讲完了,一句话:写好脚本,启动Appium.dmg,
运行脚本。
下面贴一份完整的调试代码,功能是:清除缓存


package cn.t;

import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.net.URL;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileBy;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;


public class Sample {
    static AppiumDriver<MobileElement> mDriver = null;

    public static void main(String[] args) {
//      String udid="ce19171899941ca80c7e";
        String udid = "192.168.1.105:5555";
        String dName = "Samsung Android Note10";
        mDriver = initDriver(udid, dName);
        byCache(mDriver);
    }

    public static AppiumDriver<MobileElement> initDriver(String udid, String dName) {
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability("deviceName", dName);
        caps.setCapability("platformName", "Android");
        caps.setCapability("platformVersion", "8.0.0");
        caps.setCapability("udid", udid);
        caps.setCapability("appPackage", "cn.t");
        caps.setCapability("appActivity", "cn.t.activity.AeActivity");
        caps.setCapability("noReset", "true");
        AppiumDriver<MobileElement> driver = null;
        try {
            driver = new AndroidDriver<MobileElement>(new URL("http://0.0.0.0:4723/wd/hub"), caps);
        } catch (Exception e) {
        }
        return driver;
    }


    public static AppiumDriver<MobileElement> byCache(AppiumDriver<MobileElement> driver) {
        try {

            //点击进入设置页面
            Thread.sleep(2000);
            driver.findElement(By.id("tvSetting")).click();

            //点击清空按钮
            Thread.sleep(2000);
            MobileElement eleClear = driver.findElement(By.id("tvSubmit"));

            eleClear.click();

            //终止Appium  service
            Thread.sleep(2000);
            driver.quit();

        } catch (Exception e) {

        }
        return driver;
    }

}

。。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容