这是一个简单的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. Truncating HTML attribute value in SharePoint DataFormWebPart

    <xsl:value-ofdisable-output-escaping="yes"select="@Body"/>

  2. 像Linq一样来使用Graphics

    Linq的链式编程用起来总是那样畅快淋漓,可惜在C#中并不是每时每刻都能有这么畅快的感觉,其中使用Graphics的时候就是,每次用Graphics绘制大量图形时尤其如此.GDI+的API功能很强大, ...

  3. 1041: [HAOI2008]圆上的整点 - BZOJ

    Description 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数.Input rOutput 整点个数Sample Input4Sample Output4HINT n ...

  4. hdu 1018

    数学题  用的这个方法比较烂 g++超时  c++ 406ms /******************************************************************* ...

  5. Mesh Baker的基本操作与功能演示

    原地址:http://www.narkii.com/club/thread-301789-1.html 如何降低游戏在系统中的消耗并带给用户最佳的体验是开发者一直追求的目标,在Unity里面对于模型与 ...

  6. python繁体中文到简体中文的转换

      处理中文字符串遇到了繁体和简体中文的转换,python版: 1.下载zh_wiki.py及langconv zh_wiki.py:https://github.com/skydark/nstool ...

  7. Android:再按一次退出程序

    感觉这种效果比较友好 //两秒内按返回键两次退出程序 private long exitTime = 0; @Override public boolean onKeyDown(int keyCode ...

  8. SGU128 Snake

    SGU128,题意是给定N个点,问说能不能形成一个闭环G,要求G经过每个点,且在每个点处都有90度的转角,且不能出现自交. 没想出来,通过这提供的思路,由于每个点处都需要90度的转弯,因此每个点处必然 ...

  9. CodeForces114E——Double Happiness(素数二次筛选)

    Double Happiness On the math lesson a teacher asked each pupil to come up with his own lucky numbers ...

  10. HASH暴力破解工具-Hashcat

    乌云网看到一篇文章讲述hashcat的使用简介(戳这里),对使用字典破解MD5内容 简单在kali上尝试了一下. (1)首先查看了下hashcat的帮助文档,简单截取了其中的部分常用说明. hashc ...