文章目录

  • Appium介绍
  • 思路
  • 使用adb install命令安装app客户端软件
  • 通过appium-Desktop查取页面元素的id
  • 设计代码
  • 调试日志
  • 参考资料

Appium介绍

Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持IOS、Android及FirefoxOS平台。Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。Appium对IOS系统的支持得益于Dan Cuellar’s对于IOS自动化的研究。Appium也集成了Selendroid,来支持老android版本。
Appium支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架。如果只使用Apple的UIAutomation,我们只能用javascript来编写测试用例,而且只能用Instruction来运行测试用例。同样,如果只使用Google的UIAutomation,我们就只能用java来编写测试用例。Appium实现了真正的跨平台自动化测试。
appium选择了client-server的设计模式。只要client能够发送http请求给server,那么的话client用什么语言来实现都是可以的,这就是appium及webdriver如何做到支持多语言的。

思路

1、使用adb connect命令将安卓模拟器与测试主机(电脑)连接起来(连接安卓测试机的话,使用数据线即可)

adb connect 127.0.0.1:5555

2、使用adb devices命令查看连接进来的手机设备列表
3、通过appium-Desktop启动测试主机(电脑)的Appium Server
4、设置noReset等于true(这样的话,app被打开就不会出现启动画面,并且是登录状态)

capabilities.setCapability("noReset", true);

5、屏蔽小键盘

capabilities.setCapability("unicodeKeyboard", true);
capabilities.setCapability("resetKeyboard", true);

6、通过appium-Desktop查取页面元素的id, xpath
7、定位动态提示框(Toast),获取里面的内容

WebDriverWait wait = new WebDriverWait(driver, 8);
WebElement target = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[contains(@text, '"+expected+"')]")));
System.out.println(target.getText());

8、appium脚本将操作app的指令发给Appium Server
10、Appium Server根据操作指令对安卓测试机上的app客户端进行操纵


使用adb install命令安装app客户端软件

通过appium-Desktop查取页面元素的id

设计代码

完整代码如下:

package examples;import java.net.URL;
import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;public class AppTest {private AppiumDriver<MobileElement> driver;private DesiredCapabilities capabilities;@DataProviderpublic Object[][] data(){Object[][] arr = {{"输入的内容正确且包含换行符","嗯,不错。\n到此一游。。\n"+System.currentTimeMillis(),"发表评论成功!",true},{"输入5个字的情况","hello","发表评论成功!",true},{"输入的内容包含特殊字符","!@#$%^&*()_+-=?,.;\n':\"/\\{}[]~`<>|","发表评论成功!",true},    {"输入4个字的情况","test","至少要5个字",false},//{"输入的内容过长",System.currentTimeMillis()+sb.toString(),"内容过长",false},        {"输入5个空格的情况","     ","至少要5个字",false},{"输入内容包括3个字和2个换行符","1\n2\n3","至少要5个字",false},{"输入5个换行符的情况","\n\n\n\n\n","至少要5个字",false}};return arr;}@BeforeTest(enabled=true)public void begin() throws Exception{capabilities = new DesiredCapabilities();capabilities.setCapability("platformName", "Android");//指定测试平台capabilities.setCapability("deviceName", "127.0.0.1:5555");capabilities.setCapability("platformVersion", "5.1.1");capabilities.setCapability("appPackage", "cn.ibuka.manga.ui");capabilities.setCapability("appActivity", "cn.ibuka.manga.md.activity.ActivityMain");capabilities.setCapability("noReset", true);capabilities.setCapability("unicodeKeyboard", true);capabilities.setCapability("resetKeyboard", true);capabilities.setCapability("automationName", "UiAutomator2");  driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);}/*** * @param desc 表示用例描述* @param input 表示输入* @param expected 表示期望结果* @param inputIsCorrect 表示输入是否正确* @throws Exception*/@Test(dataProvider="data")public void f(String desc,String input,String expected,boolean inputIsCorrect) throws Exception{driver.launchApp();//点击图片driver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.support.v4.widget.DrawerLayout/android.widget.RelativeLayout/android.support.v4.view.ViewPager/android.widget.FrameLayout/android.support.v4.view.ViewPager/android.widget.FrameLayout/android.view.View/android.support.v7.widget.RecyclerView/android.widget.LinearLayout[5]/android.widget.ImageView").click(); //点击图片driver.findElementById("cn.ibuka.manga.ui:id/cover").click();//点击吐槽driver.findElementById("cn.ibuka.manga.ui:id/act_comment_layout").click();//点击编辑driver.findElementById("cn.ibuka.manga.ui:id/iv_act").click();Thread.sleep(2000);//driver.findElementById("cn.ibuka.manga.ui:id/editText").click();//输入内容driver.findElementById("cn.ibuka.manga.ui:id/editText").sendKeys(input);Thread.sleep(2000);  //提交评论driver.findElementById("cn.ibuka.manga.ui:id/iv_act").click();if(inputIsCorrect) {WebDriverWait wait = new WebDriverWait(driver, 8);WebElement target = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[contains(@text, '"+expected+"')]")));System.out.println(target.getText());}else {Assert.assertTrue(driver.findElementById("android:id/message").getText().contains(expected),desc);}driver.closeApp();}@AfterTestpublic void end(){driver.quit();}
}

调试日志

输入内容包括3个字和2个换行符的case测试没有通过!

[RemoteTestNG] detected TestNG version 6.14.3
五月 22, 2019 7:53:38 上午 io.appium.java_client.remote.AppiumCommandExecutor$1 lambda$0
信息: Detected dialect: W3C
发表评论成功!
发表评论成功!
发表评论成功!
PASSED: f("输入的内容正确且包含换行符", "嗯,不错。
到此一游。。
1558539748981", "发表评论成功!", true)
PASSED: f("输入5个字的情况", "hello", "发表评论成功!", true)
PASSED: f("输入的内容包含特殊字符", "!@#$%^&*()_+-=?,.;
':"/\{}[]~`<>|", "发表评论成功!", true)
PASSED: f("输入4个字的情况", "test", "至少要5个字", false)
PASSED: f("输入5个空格的情况", "     ", "至少要5个字", false)
PASSED: f("输入5个换行符的情况", "", "至少要5个字", false)
FAILED: f("输入内容包括3个字和2个换行符", "1
2
3", "至少要5个字", false)
org.openqa.selenium.NoSuchElementException: An element could not be located on the page using the given search parameters.
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html===============================================Default testTests run: 7, Failures: 1, Skips: 0
==============================================================================================
Default suite
Total tests run: 7, Failures: 1, Skips: 0
===============================================

参考资料

[01] appium API文档
http://appium.github.io/java-client
[02] appium 官方教程
http://appium.io/docs/en/about-appium/api
[03] appium入门教程
https://testerhome.com/topics/1045
[04] appium中文教程
https://www.cnblogs.com/fnng/p/4540731.html
[05] iOS自动化测试
https://testerhome.com/topics/6962
[06] appium总结
https://www.cnblogs.com/lgh344902118/p/6438210.html
[07] 等待activity出现(android特有的wait_activity)
https://www.cnblogs.com/yoyoketang/p/7794493.html
[08] appium自动化输入中文
http://www.cnblogs.com/yoyoketang/p/6128820.html
[09] Appium使用教程_Android篇
https://blog.csdn.net/keeng2008/article/details/51426179
[10] Appium简介及工作原理
https://www.cnblogs.com/feifei-cyj/p/7905798.html
[11] 通过adb查看当前显示的activity
http://www.cnblogs.com/hzhtracy/p/5742965.html
[12] appium获取toast内容
https://blog.csdn.net/youxitou/article/details/79348901
[13] Appium自动化之获取APP Toast(消息提示框)的信息
https://www.jianshu.com/p/211a8f6ff064
[14] UiAutomator Appium 可以捕获 toast 消息了,但是无法输入密码
https://testerhome.com/topics/10838
[15] 运行adb 命令提示more than one device/emulator
https://blog.csdn.net/lqxandroid2012/article/details/52918938

微信扫一扫关注公众号

点击链接加入群聊

https://jq.qq.com/?_wv=1027&k=5eVEhfN
软件测试学习交流QQ群号:511619105

使用appium工具对漫画发表评论相关推荐

  1. WordPress 网站设置发表评论,取消电子邮件,只需输入评论者名称的方法

    WordPress 网站设置发表评论,取消电子邮件,只需输入评论者名称的方法.默认WordPress 发表评论只能同时设置"必须填入姓名和电子邮件地址",如果认为输入电子邮件会影响 ...

  2. Django博客系统(发表评论)

    1. 发表评论接口设计 1.请求方式 选项 方案 请求方法 POST 请求地址 /detail/ 2.请求参数:表单 参数名 类型 是否必传 说明 user_id string 是 发表评论的用户id ...

  3. 通过JS控制各种元素的点击事件的【时间间隔】,特别适合【发表评论】功能...

    1.使用情景模拟:下单(防止用户无脑狂点).支付(防止用户无脑点击支付).发表评论(防止用户无脑点击),当然如果你用了一个提示框进行屏蔽,下面代码可以无视了,右上角谢谢. 2.默写情景比如:比如发表评 ...

  4. Sprint Three 回顾与总结发表评论团队贡献分

    ● 一.回顾与总结 (1)回顾 燃尽图: Sprint计划-流程图: milestones完成情况如下: (2)总结 从sprint one到three,我们团队配合十分默契,互相帮助,虽然遇到了不少 ...

  5. python docker自动化_「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17)...

    原创文章,欢迎转载.转载请注明:转载自 IT人故事会,谢谢! 原文链接地址: 「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17) Appium是一个开 ...

  6. 爬虫模拟登录和发表评论

    import requests headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537. ...

  7. 如何在Dockerfile中发表评论?

    本文翻译自:How do I make a comment in a Dockerfile? I am writing a Dockerfile. 我正在写一个Dockerfile. Is there ...

  8. 【Javascript】进阶之实现评论分页与发表评论功能

    描述:实现评论分页与发表评论 1.评论分页,通过上一页.下一页和输入页数跳转 2.发表评论是需要先判断是否登录,登录后显示个人中心和退出,再发表评论,如果选择匿名评论,则显示匿名 代码实现 HTML ...

  9. 社区-发表评论和回复评论

    var type = 0; //默认是发表评论 // 点击评论$(document).on("click", ".content_title", functio ...

最新文章

  1. 优秀开发者必备技能包:Python调试器
  2. 您对TOP Server的德语、中文和日语语言支持了解吗?(二)
  3. HDOJ 2041 超级楼梯
  4. 52个实用的数据可视化工具!
  5. java扑克发牌程序_Java多线程实现扑克牌发牌程序实例
  6. 复习--SQL Server (一) -系统数据库
  7. dax 筛选 包含某个字_DAX分享9:DAX中用变量来计算动态filter context中数值
  8. c++ 求2-100内的素数问题
  9. 【原理篇】推荐系统之矩阵分解模型
  10. python程序设计小程序_请问有会用Python编程语言编几个小程序的吗?谢谢题目如下。...
  11. Navicat premium注册机打不开的解决办法
  12. 教你联想一体机win7系统安装教程
  13. Setup.txt如何修改? Setup.txt的详细介绍
  14. 微型计算机原理与应用第三版王克义编著
  15. 华硕主板刷机后不能进入Windows的解决办法
  16. [HCIP] 04 - 路由控制之策略路由
  17. PR标题动画模板 创意动态多行标题注释字幕条pr模板
  18. 【杂说】东南大学建校117周年,校庆快乐
  19. oracle数据库some,【案例】Oracle报错Some indexes or index [sub]partitions of table VAS.TAB_PUB_CALLLOG...
  20. 整车行业MES系统概念导入

热门文章

  1. Flutter SDK 下载
  2. Vue安装和环境配置
  3. 快速排序为什么那么快-很好的文章
  4. 利用Python自动化操作鼠标键盘刷金币,工作室都靠这种脚本搬砖!
  5. (Java实现) 洛谷 P1071 潜伏者
  6. Java 搭建 Selenium 环境
  7. 【IoT】创业:如何找到可以主导的创业市场?
  8. ITIL Overview
  9. 输入一个华氏温度输出摄氏温度
  10. 2018,相信「看见」的力量