mac下使用java实现编写appium用例

    appium支持用户使用多种语言编写测试用例。由于本人对java比较熟悉,所以采用了java语言。

    appium提供各种语言的客户端类库,我们先到官网(appium.io)下载java 客户端类库。下载完毕后,还需要准备如下环境:Android 开发环境、jdk、Android sdk,请自行搭建,不再赘谈。

    打开Android studio,新增一个项目File--New--New Project,按提示一步步往下走,直到项目创建成功为止。

    接着导入appium java client类库包,我们可以通过在build.grable中直接添加依赖,然后重新构建项目,也可以通过File--Project Structure进入到项目配置页面,在Dependencies页签下导入本地类包。由于appium会引用到selenium的API,所以需要把selenium的jar包通过上述方式引入项目。到这里,是不是所有的jar包都导入完毕了呢。很遗憾并没有,后续还需要导入其他jar包,而且jar包之间还有严格的版本配套规则。一旦版本不一致,用例就无法运行成功。下面是我导入的所有jar包,由于版本不一致,可能导入的jar包也不一样,仅作参考:


    当然,我们也可以采用另外一种方式检查是否遗漏jar包未导入,就是直接编写appium自动化代码,然后运行,根据报错信息,去加入需要的jar包,我当时就是通过这种方式把第一个demo跑起来的。以Android项目为例,代码如下:

public void addition_isCorrect()throws Exception {

        AndroidDriver driver;

        DesiredCapabilities cap=new DesiredCapabilities();

        cap.setCapability("automationName", "Appium");//appium做自动化

        cap.setCapability("deviceName", "HUAWEI P10");//设备名称

        cap.setCapability("platformName", "Android"); //安卓自动化还是IOS自动化

        cap.setCapability("platformVersion", "8.0"); //安卓操作系统版本

        cap.setCapability("udid", "SJE0217B30001350"); //设备的udid (adb devices 查看到的)

        cap.setCapability("appPackage","com.med.doc");//被测app的包名

        cap.setCapability("appActivity",".activity.splash.StartActivity");//被测app的入口Activity名称

        cap.setCapability("unicodeKeyboard", "True"); //支持中文输入

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

        cap.setCapability("newCommandTimeout", "30"); //没有新命令,appium30秒退出

        cap.setCapability("autoAcceptAlerts","true");

        driver =new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),cap);//把以上配置传到appium服务端并连接手机

        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//隐式等待

//通过resource name定位元素

        WebElement phone = driver.findElement(By.id("com.medtrust.doctor:id/login_pwd_edtTxt_phone"));//捕获帐号输入框

        phone.sendKeys("1111111");//输入账号

        WebElement pwd = driver.findElement(By.id("com.medtrust.doctor:id/login_pwd_edtTxt_pwd"));//捕获密码框

        pwd.sendKeys("1");

        TouchAction action =new TouchAction(driver);

        action.tap(885, 286).perform();//点击登录按钮

    }

    运行上述代码时,请选择Android Junit方式运行,可以通过Run--Edit Configurations为本方法 新增一个Android Junit运行方式。然后启动appium服务端,并连接真机(由于有公司的测试机,所以没试过模拟器运行的场景,模拟器场景不知道能否成功运行,建议连接真机)运行上述代码。这个过程中,我遇到过下面两种错误:

1.Exception in thread main java.lang.NoClassDefFoundError:xxx/xxx/xxx

显而易见,运行的时候找不到某个类导致报错,应该是某个jar包未导入导致的,解决方法:在百度上搜索缺少的类名所属的jar包,然后下载并导入到项目中即可。

2.java.lang.NoSuchMethodError:xxx.xxx.xxx.xxx

上述表示程序找得到需要的类,但是这个类没有提供供程序调用的方法,应该是jar包的版本不一致。到网上下载其他版本的jar包,检查jar包中对应类下有无此方法。若无则继续下载其他版本验证,若有则导入该jar包即可解决问题。要是导入后,仍无法解决问题,还有一种可能:该项目存在两个不同版本但API相同的jar包。这种情况有个特点,就是有时能运行成功,有时会报上述错误(因为运行时会出现概率性调用到正确版本的jar包),解决方法就是删掉其中一个版本jar包。

    不断重复运行上述代码,直到编译通过并能执行代码,则表示jar包已导入完整。当然,接下来执行代码时,你可能会遇到下面几个问题:

1.被测APP有些输入框的输入法无法弹出。

解决方案:由于执行代码时,appium会自动在手机上安装一个appium输入法,所以会导致原先的输入法无法弹出。我们可以在手机设置里面把appium输入法取消,这样原先的输入法又可以正常弹出使用了。

    2.运行时,发现每次都会自动安装appium setting 和unlock两个APP,且启动被测APP时,经常会弹出权限请求的窗口,甚至导致用例执行失败。

    解决方案:修改appium代码,禁止appium安装appium setting 和unlock,修改后,自动化用例就能正常执行了。

    修改appium代码操作如下(直接在网上复制下来的):

    这里以mac版本的appium为例子:(appium 根路径有可能不一样,请按照自身实际情况修改)

1、文件: /usr/local/lib/node_modules/appium/node_modules/appium-android-driver/lib/driver.js,注释以下几句代码

await this.adb.uninstallApk(this.opts.appPackage);

await helpers.installApkRemotely(this.adb, this.opts);

await helpers.resetApp(this.adb, this.opts.app, this.opts.appPackage, this.opts.fastReset);

await this.checkPackagePresent();

2、文件:/usr/local/lib/node_modules/appium/node_modules/appium-android-driver/build/lib/driver.js 注释以下几句代码

return_regeneratorRuntime.awrap(_androidHelpers2['default'].resetApp(this.adb, this.opts.app, this.opts.appPackage, this.opts.fastReset));

return_regeneratorRuntime.awrap(this.adb.uninstallApk(this.opts.appPackage));

return_regeneratorRuntime.awrap(_androidHelpers2['default'].installApkRemotely(this.adb, this.opts));

return_regeneratorRuntime.awrap(this.checkPackagePresent());

3、文件:/usr/local/lib/node_modules/appium/node_modules/appium-android-driver/lib/android-helpers.js 注释以下几句代码

await adb.install(unicodeIMEPath, false);

await helpers.pushSettingsApp(adb);

await helpers.pushUnlock(adb);

4、文件 /usr/local/lib/node_modules/appium/node_modules/appium-android-driver/build/lib/android-helpers.js 替换以下几句代码

return_regeneratorRuntime.awrap(helpers.initUnicodeKeyboard(adb)) 替换为returncontext$1$0.abrupt('return', defaultIME);

return_regeneratorRuntime.awrap(helpers.pushSettingsApp(adb)); 替换为returncontext$1$0.abrupt('return', defaultIME);

return_regeneratorRuntime.awrap(helpers.pushUnlock(adb)); 替换为returncontext$1$0.abrupt('return', defaultIME);

    修改后,重新启动appium服务器,再次连接真机,执行上述脚本,此时脚本就能正常执行了。

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

推荐阅读更多精彩内容