var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-333696-1']); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();
  • 2011年09月26日

    Android 中Selenium访问网页原理

    分类:

    Android Selenium访问网页的核心是通过JavaScript同网页交互(见源码android文件夹):webview.loadUrl("javascript:" + javascriptstring);为了让java能同javascript交互,在webview端用addJavascriptInterface(new JavascriptInterface(javascriptExecutor), "webdriver");进行绑定,java中用windows.webdriver. resultMethodjavascriptstring)获取前端执行的返回值,以上javascriptstring匿名函数编写。其它详见AndroidDriver

     

    下面给出访问链接的示例:

    1. 蹦出警告框: webview.loadUrl("javascript:alert('hello world');");

    2. 点击链接(可以在Chrome浏览器中用开发人员工具在console中进行调试)

    首先前端代码应该改为: <LI><A id="websiteLink" href="http://news.sina.com.cn/" onclick="location.href='http://news.sina.com.cn/'">Welcome to web site</A></LI>

    然后在java文件中执行:webview.loadUrl("javascript:document.getElementById('websiteLink').onclick();");

  • 2011年09月21日

    Android 自动化手机测试环境预设

    分类:

    手机测试环境预设

    1. 手机必须有SD卡,因为测试中间结果保存在SD卡上还有海豚浏览器HD的也在SD卡上保存配置等记录。
    2. 启用手机USB 调试(USB Debugging)
      • 在手机上,“设置”(Settings)->“应用程序”(Applications )->“开发”(Development)然后勾选“USB调试”(USB debugging)。
    3. 设置手机USB 充电时屏幕不休眠
      • 在手机上,“设置”(Settings)->“应用程序”(Applications )->“开发”(Development)然后勾选“保持唤醒状态”(Stay awake)。
    4. 设置手机屏幕待机
      • 在手机上,“设置”(Settings)->“显示”(Display )->“屏幕待机”(Screen timeout)然后勾选该机型的最长时间,如10分钟、30分钟和从不(Never turn off)。
    5. PC端运行自动化测试程序前手机未锁屏、屏幕方向为竖屏并且当前屏幕为Home界面,运行过程中不要触摸手机屏幕不要更改手机屏幕方向。

    说明:

    1. 如果有一个手机服务能够保证手机屏幕不锁屏或者自动化程序设置在运行中不让手机屏幕锁屏可以更加保证运行的稳定性。
    2. 有若干手机在用usb连接PC时不会充电,因此在运行过程中可能因缺电黑屏。
  • 2011年09月17日

    Ubuntu 下设置adb环境变量

    分类:

    同Windows一样,Ubuntu Linux系统包含两类环境变量:系统环境变量和用户环境变量。系统环境变量对所有系统用户都有效,用户环境变量仅仅对当前的用户有效。

    Ubuntu Linux 环境变量

    用户环境变量通常被存储在下面的文件中:

    • ~/.profile
    • ~/.bash_profile 或者 ~./bash_login
    • ~/.bashrc

    上述文件在Ubuntu 10.0以前版本不推荐使用。

    系统环境变量一般保存在下面的文件中:

    • /etc/environment
    • /etc/profile
    • /etc/bash.bashrc

    /etc/profile和 /etc/bash.bashrc在Ubuntu 10.0版本中不推荐使用。

    Ubuntu Linux 环境变量的优先级

    1. /etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件自动被执行。
    2. /etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量。
    3. ~/.bash_profile:在登录时用到的第三个文件是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
    4. ~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
    5. /etc/bash.bashrc:当用户进入shell或桌面系统自动执行的脚本

    几个环境变量的优先级:1>2>3

    Ubuntu Linux中设置adb环境变量

    • 当前用户
    sudo vi .bashrc
    

    在这个文件中加入:

    export PATH=”$PATH:export PATH="$PATH:/home/[username]/android-sdk-linux_86/platform-tools/"
    

    重启或再次登陆后生效,如果想立即生效:则执行:

    sudo source .bashrc
    
    • 全局设置
    sudo vi /etc/profile
    

    在这个文件中加入:

    export PATH="$PATH:/home/[username]/android-sdk-linux_86/platform-tools/"
    

    重启或再次登陆后生效,如果想立即生效:则执行:

    sudo source /etc/profile
    
    • 系统设置
    sudo vi /etc/enviroment
    

    在这个文件中加入:

    export PATH="$PATH:/home/[username]/android-sdk-linux_86/platform-tools/"
    

    重启或再次登陆后生效,如果想立即生效:则执行:

    sudo source /etc/enviroment
  • 2011年09月16日

    Ubuntu 下adb识别Android设备

    分类:

    进入Ubuntu Linux,把设备连上电脑之后,首先确认设备连接上电脑,终端下执行lsusb查看下设备记录是否存在。然后下载Android SDK for Linux (i386),解压后,进入“tools”目录,设置android有可执行权限,在终端中运行android,"Android SDK and AVD Manager"窗口弹出,在“Available packages”中选择“Android SDK Platform-tools,revision 6”下载,下载完成之后,设置adb有可执行权限,在终端中cd到platform-tools目录,这时执行adb devices会看到“List of devices attached ???????????? no permissions”。

    参考Using Hardware Devices,运行adb之前需要用vi创建文件/etc/udev/rules.d/51-android.rules,如果是HTC的设备则在此文件中添加:

    SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"
    

    ,这里面idVendor的值根据不同USB供应商的设备而变化,USB供应商的ID见USB Vendor IDs,建议一次性写全所有的USB供应商。然后给文件51-android.rules赋权限:

    chmod a+r /etc/udev/rules.d/51-android.rules
    

    重新插拔一下设备,然后在终端中执行adb devices则会列出连接的所有设备。用魅族M9的请参考在Linux上使用adb访问魅族M9手机

  • 2011年09月16日

    Robotium 使用

    分类:

    Robotiumapi文档,它是一款黑盒测试Android应用程序的自动化测试框架。文Android自动化测试框架Robotium学习笔记实际来自Start using Robotium此外还有文Automated Testing of Applications on Android using ROBOTIUMPart 2Part 3Part 4Part 5

     

    导入Robotium的源码到Eclipse需要插件Maven Integration (m2e),在Eclipse菜单Help -> Install New Software…,在弹出的“Install”窗口中Add:m2e  - http://download.eclipse.org/technology/m2e/releases/,网络验证有效后,勾选“Maven Integration for Eclipse”,点击“Next >”直到选择“I accept the terms of the license agreement”之后点击“Finish”按钮,最后等待安装完成。M2e插件安装成功后,展开Eclipse菜单 File -> Import,在Import窗口选择Maven -> Existing MavenBrowserrobotium源码目录,最后点击按钮“Finish”就完成了robotium源码的导入。

     

    启动Hierarchy Viewer可以从android-sdk下的tools文件夹内的hierarchyviewer.bat,由于安全原因它只能连接上运行开发版Android系统的设备,显示不出它会提示Hierarchy Viewer Unable to debug device”。有人刷非官方的ROM并获得root权限就可以用Hierarchy Viewer了。延伸阅读SuperOneClick手工root你的手机/root的原理。目前已知HTC Dream(G1)HTC Tattoo(G4)、HTC Legend(G6)HTC Droid ErisHTC EVO 4GHTC Incredible(ADR 6300)都可以查看。

     

    ViewServer是一款能在你Android 应用程序中使用Hierarchy Viewer 检验工具的简单类,它需要Android SDK r12+。在你的应用程序中包含它之后,就能在任何设备上使用hierarchy viewer了。

     

    有人利用Hierarchy Viewer 做了实验性研究,见Android自动化测试初探(一): 捕获Activity上的Element(二): Hierarchyviewer 捕获Element的实现原理(三): 架构实现(四): 模拟键盘鼠标事件(Socket+Instrumentation实现)(五): 再述模拟键盘鼠标事件(adb shell 实现)

     

    使用Robotium先用Hierarchy Viewer找到你需要驱动的View索引(这样使用非常耗费时间,不适合赶进度的项目),如果你能引用源程序代码直接用findViewById就行了。Robotium所能使用的公开方法都来自于Solo.java以下是黑盒调用代码片段:

    final ArrayList allviews= solo.getCurrentViews();
    final ArrayList alltextviews= solo.getCurrentTextViews(null);
    for (View view : allviews)
    {
    if (view != null){
    Log.i("View",view.toString());
    }
    }
    solo.getCurrentActivity().runOnUiThread(new Runnable() {
    public void run() {
    // TODO Auto-generated method stub
    LinearLayout linearlayout = (LinearLayout)allviews.get(22);
    if (linearlayout != null) {
    linearlayout.performClick();
    }
    }
    });
    getInstrumentation().runOnMainSync(new Runnable()
    {
    public void run()
    {
    TextView titleview = allviews.get(1);
    titleview.setInputType(InputType.TYPE_TEXT_VARIATION_URI);
    titleview.performClick();
    titleview.setText("aaaaa");
    }
    });