这是一个简单的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. mysql 连接多行 合并多行

    group_concat() select group_concat(id) from xxxx -------------------------------------------- id1,id ...

  2. java第一课:环境、变量、数据类型

    一.java编程注意事项1.java区分大小写2.每条语句结尾有分号3.上下级代码注意缩进4.大括号要成对出现5.标点符号要用英文半角(半角全角区别)二.eclipse1.eclipse是自编译及时编 ...

  3. idea14使用maven创建web工程

    参考博客:http://geeksun.iteye.com/blog/2179658 http://www.bubuko.com/infodetail-387387.html ------------ ...

  4. 10个CSS简写/优化技巧

    CSS简写就是指将多行的CSS属性简写成一行,又称为CSS代码优化或CSS缩写.CSS 简写的最大好处就是能够显著减少CSS文件的大小,优化网站整体性能,更加容易阅 读. 下面介绍常见的CSS简写规则 ...

  5. Recommender Systems协同过滤

    第一部分是学习ID3时候积累的. 一.以前写的基础知识 1.信息:是用来消除不确定性的度量,信息量的大小,由所消除的不确定性的大小来计量(香农). 2.由于不确定性是由随机性引起的,所以用概率来描述和 ...

  6. css的优先级以及!important的使用

    CSS的优先级应该是作为CSS基本知识而广为知道的,所以CSS入门后,就一直把CSS的优先级记挂在心里(自觉告诉自己这地方很可能会摔跤).起初可能是因为自己的项目经验不够丰富,或者是自己所接触到的项目 ...

  7. Windows下的Memcache安装与测试教程

    Windows下的Memcache安装 1.下载memcache for windows. 下载地址:http://splinedancer.com/memcached-win32/,推荐下载bina ...

  8. 快速排序(quicksort)算法实现

    快速排序(quicksort)是分治法的典型例子,它的主要思想是将一个待排序的数组以数组的某一个元素X为轴,使这个轴的左侧元素都比X大,而右侧元素都比X小(从大到小排序).然后以这个X在变换后数组的位 ...

  9. Side by Side Assembly介绍--manifest文件的使用

    什么是Side-by-Side Assembly? Side-by-Side Assembly(建称SxS)是微软在Visual Studio 2005(Windows 2000?)中引入的技术,用来 ...

  10. Nginx开启Gzip压缩大幅提高页面加载速度(转)

    转自:http://www.cnblogs.com/mitang/p/4477220.html 刚刚给博客加了一个500px相册插件,lightbox引入了很多js文件和css文件,页面一下子看起来非 ...