一个简单的appium脚本

这是一个简单的appium脚本,测试amazon购物过程的,过程包括搜索商品,然后从结果列表中选取中意的商品,然后加入购物车,等等。

它是一个最原始的脚本,对测试元素、数据、报告等未作任何的封装,后面计划把它合并到现有的webdriver的web测试框架里去。

运行中终于到的问题:

1、genymotion模拟器上执行有点延迟,脚本命令发出后大概3秒模拟器上才有反应;

2、在输入搜索条件后,执行回车命令,执行的效果是退格键(backspace),百撕不得骑姐啊;

3、再就是非原生对象的识别了,比如webview的对象,用sdk的uiautomationviewer有时就获取不到关键属性,这时可以到pc端尝试去识别,另外如果一个app是手机端特有的(不支持pc端),它的识别请参考另一篇文章

http://www.cnblogs.com/jingwei/p/4739618.html

如果用webdriver做过web的测试,看这个脚本应该很简单,基本和测试web类似,最大的区别就是,手机端的测试,需要指定desire capacity的一些属性,比如设备名字,测试平台,测试平台版本,被测app的包。

public class ContactTest {

     private WebDriver driver;
     //private AndroidDriver driver;
     //private AppiumDriver driver;
     @Before
     public void setUp() throws Exception {
         // set up appium

         File classpathRoot = new File(System.getProperty("user.dir"));
         System.out.println(System.getProperty("user.dir"));

         File appDir = new File(classpathRoot, "app");
         File app = new File(appDir, "com.amazon.mShop.android093010.apk");
         DesiredCapabilities capabilities = new DesiredCapabilities();
                 //对测试设备和app的预定义
         capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
         //capabilities.setCapability("deviceName","Android Emulator");
         capabilities.setCapability("deviceName","Android Emulator");
         capabilities.setCapability("platformVersion", "4.4.4");
         capabilities.setCapability("platformName", "Android");
         capabilities.setCapability("app", app.getAbsolutePath());
         capabilities.setCapability("app-package", "com.amazon.mShop.android");
         capabilities.setCapability("app-activity", "com.amazon.mShop.splashscreen.StartupActivity");

         //driver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);
         System.out.println("ok??");
         //driver = new AndroidDriver(new URL("http:/127.0.0.1:4723/wd/hub"), capabilities);
         driver = new SwipeableWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

     }

     @After
     public void tearDown() throws Exception {

         driver.quit();

     }

     @Test
     public void addContact(){
         System.out.println("start test");
         wait(10);
         if(this.elementExist(driver, By.id("com.amazon.mShop.android:id/skip_sign_in_button")));{
            wait(2);
            driver.findElement(By.id("com.amazon.mShop.android:id/skip_sign_in_button")).click();
         }

         wait(5);
         WebElement search = driver.findElement(By.id("com.amazon.mShop.android:id/search_edit_text"));
         search.click();
         wait(2);
         WebElement search2 = driver.findElement(By.id("com.amazon.mShop.android:id/rs_search_src_text"));
         search2.sendKeys("huawei");
         search2.sendKeys(Keys.ENTER);
         wait(2);
         List<WebElement> searchlist = driver.findElements(By.id("com.amazon.mShop.android:id/rs_search_dropdown_item_text"));

         for(WebElement l:searchlist){
             System.out.println(l.getText());
         }

         System.out.println(searchlist.size());
        if(searchlist.size()>0)
            searchlist.get(0).click();

        wait(5);
         WebElement honor3c = driver.findElement(By.name("Huawei Honor 3C Android 4.2 Quad Core 1.3GHz 3G" +
                 " Dual Sim 5.0 Inch HD Touch Screen 2GB RAM Unlocked 3G Smartphone Black"));
         honor3c.click();

         //这里可以继续加入购物的其他操作

         /*
         List<WebElement> textFieldsList = driver.findElements(By.tagName("textfield"));
         textFieldsList.get(0).sendKeys("Some Name");
         textFieldsList.get(2).sendKeys("[email protected]");
         driver.findElement(By.name("Save")).click();
         */
         System.out.println("test end");
     }

     public class SwipeableWebDriver extends RemoteWebDriver implements HasTouchScreen {
         private RemoteTouchScreen touch;

         public SwipeableWebDriver(URL remoteAddress, DesiredCapabilities capabilities) {
             super(remoteAddress, capabilities);
             touch = new RemoteTouchScreen(getExecuteMethod());
         }

         public TouchScreen getTouch() {
             return (TouchScreen) touch;
         }
     }

     public boolean elementExist(WebDriver driver, By pro){
         try{
             driver.findElement(pro);
             return true;
         }catch(NoSuchElementException e){
             return false;
         }
     }

     public void wait(int i){
         try {
            Thread.sleep(i*1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

     }
 }
时间: 2024-08-02 23:21:53

一个简单的appium脚本的相关文章

一个简单的shell脚本

一个简单的shell脚本 编写 假设我想知道目前系统上有多少人登录,使用who命令可以告诉你现在系统有谁登录: 1.[[email protected] ~]$ who2.KANO tty1 2016-02-15 01:47 (:0)3.KANO pts/0 2016-02-15 01:48 (kelvin) 当然在个人电脑上,所列出来的列表可能只有上面这么短.但是在一些大型.多用户的系统上,所列出的列表就可能很长.这个时候我们可以使用自动计算用户总数.wc是一个字数计算程序,它可以计算出行数(

python 一个简单防攻击脚本

学习python中,写了一个简单预防攻击脚本,感觉不好,mark下待留以后改进. #!/bin/env python #-*- coding:utf-8 -*- import sqlite3 import commands import time import logging log_file='/var/log/ddoskill.log' logging.basicConfig(level=logging.INFO,format='%(asctime)s %(filename)s[line:%

一个简单的dos脚本, svn 获取代码 - Tomcat 备份 - Maven 编译 - 停止/启动Tomcat - Tomcat站点 发布

获取最新代码 svn update --username %SVN_USER% --password %SVN_PASSWORD% >> "../%LOG_FILE%" 备份Tomcat 站点 md "%APP_ROOT%\backup\%MVN_PROFILE%-%CUR_DATE%-%myran%" >> "%LOG_FILE%" xcopy "%APP_ROOT%\%MVN_PROFILE%" &

python构建一个简单的备份脚本

编写思路: 1.建立一个空的列表,把需要备份的数据写入到列表,方便后面调用. 2.建立备份存放的目录. 3.调用os模块从列表里面读取数据,然后调用tar 命令进行备份. #!/usr/bin/python#luohuiimport timeimport sysimport ossource =[]backup_dir='/backup'import ossource =[]backup_dir='/backup'today = backup_dir + os.sep + time.strfti

写一个简单的python脚本来返回ip地址的掩码,子网个数等

如果我们想快速得到一个IP地址段有多少个ip,快速得到IP地址段的子网掩码,或者快速得到一个IP地址的二进制,那么可以来学习一下.本文利用python的一个IP分析模块IPy实现,首先安装IPy模块 wget https://pypi.python.org/packages/88/28/79162bfc351a3f1ab44d663ab3f03fb495806fdb592170990a1568ffbf63/IPy-0.83.tar.gz tar -xf IPy-0.83.tar.gz cd IP

一个简单的shell脚本-----实现虚拟机实验环境的简单配置

亲自写过shell脚本后才发现,这玩意真是太方便了,当你想把一些琐碎的.细节性的小指令一次性来完成时,脚本无疑是最好的选择,方便.快捷,关键是真是懒人必备啊. 由于安装的centos6.5是最小化安装,且是实验环境,即安装在vmware workstations上面,在首次安装完成后,配置完IP地址的相关信息后,就做了一个初始的快照,以便下次实验完后,可以通过快照快速还原系统. 但是由于实验环境的要求,例如防火墙.SELinux.光盘挂载.yum源配置等,都是最常需要修改的选项,并且由于最小化安

如何用VBS编写一个简单的恶搞脚本

windows系统的电脑, 首先右击桌面,选择新建-文本文档,在桌面上新建一个文本文档: 随后打开计算机或者是我的电脑,点击其中的组织(xp系统多为工具),选择下面的文件夹和搜索选项 在弹出的窗口中点击查看,向下滚到,找到隐藏已知文件类型的扩展名,点掉勾号,然后确定: 此时发现新建的文本文档出现后缀名为.txt 打开文本文档后,输入: msgbox"傻X",后保存. 修改文本文档的后缀,将.txt改为.vbs,后确定,双击打开.窗口弹出如图所示窗口,点确定或关闭后消失. 如果想添加一个

自动化运维:(3)写一个简单的Shell脚本(案例)

一.需求 1.test.sh 脚本执行时候需要添加参数才能执行 参数和功能详情如下: 参数 执行效果 start 启动中... stop 关闭中... restart 重启中... * 脚本帮助信息... 2.参数的数量有限制,只能是1个,多余一个会提示脚本的帮助信息 3.帮助信息使用函数来实现 信息内容:脚本 test.sh 使用方式: test.sh [ start|stop|restart ] 二.知识点分析 1.zonghe.sh 脚本执行时候需要添加参数才能执行 脚本传参.case语句

一个简单的爬虫脚本--宅男福利

闲来无事,扒一扒那些美女们的照片 import urllib.request url = "http://img1.mm131.com/pic/2537/" for i in range(1,50,1):     page_url = url + str(i) + '.jpg'     response = urllib.request.urlopen(page_url)     cat_img = response.read()     filename = page_url.spl