这是一个简单的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("Some@example.com");
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();
} }
}

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

  1. 一个简单的shell脚本

    一个简单的shell脚本 一个简单的shell脚本 编写 假设我想知道目前系统上有多少人登录,使用who命令可以告诉你现在系统有谁登录: 1.[KANO@kelvin ~]$ who2.KANO tt ...

  2. 手动编写一个简单的loadrunner脚本

    loadrunner除了自动录制脚本外,还可以手动编写脚本,通过右键+inset step添加步骤,还可以手动添加事务,集合点等 下面是一个简单的Action脚本,服务是运行在本机的flask服务: ...

  3. 一个简单的ETL脚本的内容

    一个简单的ETL脚本应该包含如下内容 1.注释 2.设置字符集 3.基础路径参数 脚本路径 票据路径 日志路径 当前SHELL的脚本别名:declare SHELL_NAME=“${basename ...

  4. [opentwebst]一个简单的登陆脚本

    这个是个简单的vbs脚本,使用opentwebst进行录制 'Use the command line below to launch the script (or just double click ...

  5. 如何在linux下编写一个简单的Shell脚本程序

    在了解了linux终端和其搭配的基本Shell(默认为bash)的基础下,我们就可以在终端中用vi/vim编辑器编写一个shell的脚本程序了 Shell既为一种命令解释解释工具,又是一种脚本编程语言 ...

  6. 一个简单的Shell脚本(解决windows上文本在macos上乱码问题)

    之所以有这一篇文章,是因为之前我写过的一篇文章:“解决Mac上打开txt文件乱码问题”:传送门: https://www.cnblogs.com/chester-cs/p/11784079.html ...

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

    windows系统的电脑, 首先右击桌面,选择新建-文本文档,在桌面上新建一个文本文档:     随后打开计算机或者是我的电脑,点击其中的组织(xp系统多为工具),选择下面的文件夹和搜索选项     ...

  8. 用shell写一个简单DHCP配置脚本

    轩轩写的这个小脚本,主要是可以进行对dhcp服务的安装.简单配置.开启.关闭/查看状态等情况 使用呢非常简单,按照步骤进行准确的设置就可以啦 #!/bin/bashyum -y install dhc ...

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

    一.需求 1.test.sh 脚本执行时候需要添加参数才能执行 参数和功能详情如下: 参数 执行效果 start 启动中... stop 关闭中... restart 重启中... * 脚本帮助信息. ...

随机推荐

  1. Java注解处理器(转)

    Java中的注解(Annotation)是一个很神奇的东西,特别现在有很多Android库都是使用注解的方式来实现的.一直想详细了解一下其中的原理.很有幸阅读到一篇详细解释编写注解处理器的文章.本文的 ...

  2. 回顾Ado.Net

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Da ...

  3. c/c++强制类型转换

    转自c/c++强制类型转换 Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通过改变 ...

  4. 阿里云PHP Redis代码示例

    测试代码示例 <?php /* 这里替换为连接的实例host和port */ $host = "localhost"; $port = 6379; /* 这里替换为实例id和 ...

  5. hdu 4577 X-Boxes 大数

    java水过…… 代码如下: import java.math.*; import java.util.*; public class Main { public static void main(S ...

  6. cocos2d-x 多分辨率适配详解(转载),以前北京团队设计的游戏,也是用这套方案

    http://blog.csdn.net/kyo7552/article/details/17163487 多种分辨率的适配一直都是一个蛋疼的问题,各家公司可能都有自己的一套方案.今天我为大家介绍的是 ...

  7. cocos2d-x 锚点,位置==》动手实验记录 多动手... :)

    总结: 1:cocos2d-x的位置由锚点和Position位置 共同决定的.2: cocos2d-x,当位置不设置或者为零的时候, 子节点的锚点位置永远位于父节点的左小角的地方3:我们的自己的游戏编 ...

  8. ecos内核概览--bakayi译

    http://blog.csdn.net/wangzaiwei2006/article/details/6453423

  9. ios 应用剖析

    在创建HelloWorld的过程中,生成了很多文件(展开Xcode左边的项目导航视图可以看到,如图2-8所示),它们各自的作用是什么?彼此间又是怎样的一种关系呢? 图2-8 项目导航视图 如图2-8所 ...

  10. 【HDOJ】4426 Palindromic Substring

    综合性很强的一道题目,结合manacher,后缀数组,哈希,RMQ,二分可解.基本思路是通过manacher可以找到所有可能的回文串,哈希去重,后缀数组二分找数目.最后暴力求解.需要注意kth需要为_ ...