【转】Appium测试安卓Launcher以滑动窗体获得目标应用
原文地址:http://blog.csdn.net/zhubaitian/article/details/39755553
所谓Launcher,指的是安卓的桌面管理程序,所有的应用图标都放在launcher上面。其实这是一个很简单的例子,只是为了验证几点想法而已。
1.实验目的
做这个试验的目的有二
- 尝试下窗体滑动函数swipe的使用
- 好奇究竟能不能正常的对安卓的Launcher进行指定package和activity进行测试
2.实验背景
3. 试验步骤
3.1 获得launcher的package和activity两个capabilities
3.2 编码实现
- package majcit.com.AppiumDemo;
- import io.appium.java_client.android.AndroidDriver;
- import java.net.URL;
- import org.junit.Test;
- import org.junit.After;
- import org.junit.Before;
- import org.openqa.selenium.Dimension;
- import org.openqa.selenium.NoSuchElementException;
- import org.openqa.selenium.Point;
- import org.openqa.selenium.WebElement;
- import org.openqa.selenium.remote.DesiredCapabilities;
- import static org.hamcrest.Matchers.*;
- import static org.hamcrest.MatcherAssert.assertThat;
- /**
- * Unit test for simple App.
- */
- public class LauncherTest {
- /**
- * Create the test case
- *
- * @param testName name of the test case
- */
- private AndroidDriver driver;
- @Before
- public void setUp() throws Exception {
- // set up appium
- //File classpathRoot = new File(System.getProperty("user.dir"));
- //File appDir = new File(classpathRoot, "apps");
- //File app = new File(appDir, "NotePad.apk");
- DesiredCapabilities capabilities = new DesiredCapabilities();
- capabilities.setCapability("deviceName","Android");
- //capabilities.setCapability("platformVersion", "4.2");
- //capabilities.setCapability("platformName", "Android");
- //capabilities.setCapability("app", app.getAbsolutePath());
- capabilities.setCapability("appPackage", "com.miui.home");
- capabilities.setCapability("appActivity", "com.miui.home.launcher.Launcher");
- //capabilities.setCapability("appActivity", ".NotesList");
- //capabilities.setCapability("autoLaunch", "false");
- //capabilities.setCapability("noReset", true);
- driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
- }
- @After
- public void tearDown() throws Exception {
- driver.quit();
- }
- @Test
- public void launchNotePad() throws InterruptedException{
- WebElement el = null;
- WebElement screen = null;
- Point point = null;
- Dimension size = null;
- boolean found = false;
- int pageCount = 3; //Assume that there are totally 3 screens to be swiped.
- int xStart = -1;
- int yStart = -1;
- int xEnd = -1;
- int yEnd = -1;
- //Get the start and end coordinates for swipe
- Thread.sleep(3000);
- screen = driver.findElementById("com.miui.home:id/cell_layout");
- point = screen.getLocation();
- size = screen.getSize();
- xEnd = point.getX();
- yEnd = point.getY() + size.getHeight()/2;
- xStart = point.getX() + size.getWidth() - 5;
- yStart = yEnd;
- System.out.println("starX:" + xStart +"\nstartY:" + yStart + "\nendX:" + xEnd + "\nendY:" + yEnd);
- //本来想通过判断屏幕上的几个小圆点来判断究竟有多少个屏幕的,但发觉xPath根本不起效,父目录感觉根本起不了定位作用,只有最后的//android.widget.ImageView起效,所以一下找出75个元素。
- /*
- List<WebElement> pageImages = driver.findElementsByXPath("//android.view.View/android.widget.LinearLayout/android.widget.ImageView");
- assertThat(pageImages.size(),is(3));
- for (WebElement e: pageImages) {
- e.click();
- }
- */
- //Swipe all screens till get the expected control
- int currentPage = 0;
- while (found == false && currentPage < pageCount) {
- found = true;
- currentPage += 1;
- try {
- el = driver.findElementByName("Notes");
- }catch (NoSuchElementException e) {
- found = false;
- System.out.println(e);
- }
- if (found == true)
- break;
- driver.swipe(xStart, yStart, xEnd, yEnd, 100);
- Thread.sleep(1000);
- }
- assertThat(found,is(true));
- assertThat(el,notNullValue());
- el.click();
- }
- }
步骤说明大概如下:
- 准备好必须的capabilities传送给appium服务器端,注意指定app,因为我们不需要重新安装Launcher
- 找到代表整个屏幕的控件,然后通过获取它的location和size属性来计算出滑动开始和结束的坐标。注意开始的坐标如果是屏幕的边界,需要调整下像素(例子中是减去5个像素)以防出错。
- 通过滑动遍历每个页面直到找到目标控件为止。
【转】Appium测试安卓Launcher以滑动窗体获得目标应用的更多相关文章
- Appium測试安卓Launcher以滑动窗口获得目标应用
所谓Launcher,指的是安卓的桌面管理程序,全部的应用图标都放在launcher上面.事实上这是一个非常easy的样例,仅仅是为了验证几点想法而已. 1.实验目的 做这个试验的目的有二 尝试下窗口 ...
- Appium测试安卓apk遇到的问题及解决方法
1.Showing error - “Returned value cannot be converted to WebElement: {ELEMENT=1} 解决方法:https://sqa.s ...
- 使用appium框架测试安卓app时,获取toast弹框文字时,前一步千万不要加time.sleep等等待时间。
使用appium框架测试安卓app时,如果需要获取toast弹框的文案内容,那么再点击弹框按钮之前,一定记得千万不要加time.sleep()等待时间,否则有延迟,一直获取不到: 获取弹框的代码: m ...
- 一文带你趟过mac搭建appium测试环境的遇到的坑
做UI自动化,最难的一步就是在环境搭建上,怎么去搭建一个UI自动化测试的环境,会难住很多人,在Mac上搭建appium如何搭建呢,本文带着大家去领略如何在mac上搭建appium测试环境.下面就是详细 ...
- Qt使用QGraphicsView实现滑动窗体效果
QGraphicsView用来显示一个滚动视图区的QGraphicsScene内容.QGraphicsScene提供了QGraphicsItem的容器功能.通常与QGraphicsView一起使用来描 ...
- 【亲测】Appium测试Android混合应用时,第二次切换到WebView失败
要解决的问题:Appium测试Android混合应用时,第二次切换到WebView时失败 原因分析:在用Appium测试Android混合应用时,当程序第一次切换到WebView时,可以正常进行自动化 ...
- leetcode ---双指针+滑动窗体
一:Minimum Size Subarray Sum(最小长度子数组的和O(N)) 题目: Given an array of n positive integers and a positive ...
- Appium使用Python运行appium测试的实例
Appium使用Python运行appium测试的实例 一. Appium之介绍 https://testerhome.com/topics/8038 详情参考--https://testerhom ...
- 滑动窗体的最大值(STL的应用+剑指offer)
滑动窗体的最大值 參与人数:767时间限制:1秒空间限制:32768K 通过比例:21.61% 最佳记录:0 ms|8552K(来自 ) 题目描写叙述 给定一个数组和滑动窗体的大小.找出全部滑动窗体里 ...
随机推荐
- Windows10微软在线账户与本地账户的切换方法
Win10里面存在着两个账户,除了本地账户外,还有着一个微软在线账户,这个账户可以同步设置.日历等数据.不过对于大部分用户来说,本地账户已经足够我们使用了,那么这两个账户之间该如何切换呢? Win10 ...
- 几款开源ESB总线的比较(转)
现有的开源ESB总线中,自从2003年第一个开源总线Mule出现后,现在已经是百花争鸣的景象了.现在我就对现有的各种开源ESB总线依据性能.可扩展性.资料文档完整程度以及整合难易程度等方面展开. CX ...
- 上Mysql com.mysql.jdbc.StatementImpl$CancelTask内存泄漏问题和解决方法
近来在负责公司短信网关的维护及建设,随着公司业务发展对短信依赖越来越严重了,短信每天发送量也比曾经每天40多w发送量暴增到每天达到200w发送量.由于是採用Java做发送底层,压力递增情况下不可避免的 ...
- HDU 4778 内存搜索&如压力
鉴于G宝石,B包.和S.S当代表凑齐每种颜色的宝石S我们可以成为哲学家的石头 每个软件包包含N宝石.分别c1,c2....... 然后他们轮流拿包.每个包可以得到一次.宝石出包放在地上. 假设你可以成 ...
- HDU 4359 Easy Tree DP? 带权二叉树的构造方法 dp
题意: 给定n deep 1.构造一个n个节点的带权树,且最大深度为deep,每一个节点最多仅仅能有2个儿子 2.每一个节点的值为2^0, 2^1 ··· 2^(n-1) 随意两个节点值不能同样 3 ...
- tomcatport占用,如何识别和kill
开始-执行-cmd,进netstat -ano你可以看到整个port入住. 增加要想知道谁占用了我们的port8080,输入下面命令 C:\Documents and Settings\Adminis ...
- winform正在使用dsoframer迅速"Unable to display the inactive document.Click here to reacitive the document."
于winform正在使用dsoframer 1.3加载word档,但在axFramerControl1.Open("NPOI.docx");于axFramerControl1控制显 ...
- c语言实现hashtable,相似C++的map和iOS的NSDictionary
跟线性数组和链表不同.HashTable是高速查找的数据结构.本文中的HashTable使用链表处理数组. 该HashTable能够指定table的长度.提供了遍历的方法. 包含table的长度的选择 ...
- 播放视频的框架Vitamio的使用问题
曾经用过这个牛逼的框架,后来又任意搞了下.发现播放不了视频了.搞了老半天才搞好,今天又随便整了下,发现又不行了.我勒个插! 如今最终又搞出来了,发现我总是把步骤搞错或少写了些东西 总的步骤: 一:导入 ...
- codeforces 260 div2 A,B,C
A:水的问题.排序结构.看看是否相同两个数组序列. B:他们写出来1,2,3,4,的n钍对5余.你会发现和5环节. 假设%4 = 0,输出4,否则输出0. 写一个大数取余就过了. B. Fedya a ...