使用appium工具对漫画发表评论
文章目录
- 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工具对漫画发表评论相关推荐
- WordPress 网站设置发表评论,取消电子邮件,只需输入评论者名称的方法
WordPress 网站设置发表评论,取消电子邮件,只需输入评论者名称的方法.默认WordPress 发表评论只能同时设置"必须填入姓名和电子邮件地址",如果认为输入电子邮件会影响 ...
- Django博客系统(发表评论)
1. 发表评论接口设计 1.请求方式 选项 方案 请求方法 POST 请求地址 /detail/ 2.请求参数:表单 参数名 类型 是否必传 说明 user_id string 是 发表评论的用户id ...
- 通过JS控制各种元素的点击事件的【时间间隔】,特别适合【发表评论】功能...
1.使用情景模拟:下单(防止用户无脑狂点).支付(防止用户无脑点击支付).发表评论(防止用户无脑点击),当然如果你用了一个提示框进行屏蔽,下面代码可以无视了,右上角谢谢. 2.默写情景比如:比如发表评 ...
- Sprint Three 回顾与总结发表评论团队贡献分
● 一.回顾与总结 (1)回顾 燃尽图: Sprint计划-流程图: milestones完成情况如下: (2)总结 从sprint one到three,我们团队配合十分默契,互相帮助,虽然遇到了不少 ...
- python docker自动化_「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17)...
原创文章,欢迎转载.转载请注明:转载自 IT人故事会,谢谢! 原文链接地址: 「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17) Appium是一个开 ...
- 爬虫模拟登录和发表评论
import requests headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537. ...
- 如何在Dockerfile中发表评论?
本文翻译自:How do I make a comment in a Dockerfile? I am writing a Dockerfile. 我正在写一个Dockerfile. Is there ...
- 【Javascript】进阶之实现评论分页与发表评论功能
描述:实现评论分页与发表评论 1.评论分页,通过上一页.下一页和输入页数跳转 2.发表评论是需要先判断是否登录,登录后显示个人中心和退出,再发表评论,如果选择匿名评论,则显示匿名 代码实现 HTML ...
- 社区-发表评论和回复评论
var type = 0; //默认是发表评论 // 点击评论$(document).on("click", ".content_title", functio ...
最新文章
- 优秀开发者必备技能包:Python调试器
- 您对TOP Server的德语、中文和日语语言支持了解吗?(二)
- HDOJ 2041 超级楼梯
- 52个实用的数据可视化工具!
- java扑克发牌程序_Java多线程实现扑克牌发牌程序实例
- 复习--SQL Server (一) -系统数据库
- dax 筛选 包含某个字_DAX分享9:DAX中用变量来计算动态filter context中数值
- c++ 求2-100内的素数问题
- 【原理篇】推荐系统之矩阵分解模型
- python程序设计小程序_请问有会用Python编程语言编几个小程序的吗?谢谢题目如下。...
- Navicat premium注册机打不开的解决办法
- 教你联想一体机win7系统安装教程
- Setup.txt如何修改? Setup.txt的详细介绍
- 微型计算机原理与应用第三版王克义编著
- 华硕主板刷机后不能进入Windows的解决办法
- [HCIP] 04 - 路由控制之策略路由
- PR标题动画模板 创意动态多行标题注释字幕条pr模板
- 【杂说】东南大学建校117周年,校庆快乐
- oracle数据库some,【案例】Oracle报错Some indexes or index [sub]partitions of table VAS.TAB_PUB_CALLLOG...
- 整车行业MES系统概念导入