51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2343|回复: 5
打印 上一主题 下一主题

[Appium] 关于 Appium 的一点分享

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2017-6-9 14:19:15 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
Appium 日常干货分享


最新的 io.appium java -client 升级到5.0 了 ,有些 方法没来得及更新。
Capabilities 配置(Android):
  1. public void StartUp() throws InterruptedException,  IOException {
  2.         DesiredCapabilities capabilities = new DesiredCapabilities();
  3.         capabilities.setCapability("device","Android");
  4.         capabilities.setCapability("deviceName", "192.168.57.101:5555");
  5.         capabilities.setCapability("udid", "192.168.57.101:5555");
  6.         capabilities.setCapability("platformVersion", "6.0");
  7.         capabilities.setCapability("appPackage", "com.sds.android.ttpod");
  8.         capabilities.setCapability("appActivity", "com.ali.music.entertainment.splash.SplashActivity");
  9.         //capabilities.setCapability(MobileCapabilityType.APP, "链接地址");//引用apk下载地址
  10.         capabilities.setCapability("unicodeKeyboard", "True");
  11.         capabilities.setCapability("resetKeyboard", "True");
  12.         capabilities.setCapability("autoAcceptAlerts", true);// 自动接受提示信息
  13.         driver = new AndroidDriver<>(new URL("http://"+ip+":"+port+"/wd/hub"), capabilities);
  14.         driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);

  15.     }
复制代码
Capabilities 配置(IOS):
  1. public void SetIosDriverSession(Capabilities cap) throws MalformedURLException, InterruptedException {
  2.     DesiredCapabilities capabilities = new DesiredCapabilities();
  3.     capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
  4.     capabilities.setCapability("platformName", "iOS");
  5.     capabilities.setCapability("newCommandTimeout", "30000");  
  6.     capabilities.setCapability("deviceName", cap.getDriverkey());   
  7.     capabilities.setCapability("platformVersion", cap.getDriverVersion());
  8.     capabilities.setCapability("app", "/Users/liyu/Documents/TTEntertainment-iOS.app");
  9.     capabilities.setCapability("autoAcceptAlerts", "True");
  10.     capabilities.setCapability("unicodeKeyboard", "True");  
  11.     capabilities.setCapability("resetKeyboard", "True");
  12.     try {

  13.             driver= new IOSDriver(new URL("http://"+cap.getIp()+":"+cap.getProt()+"/wd/hub"), capabilities);
  14.             driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  15.     } catch (MalformedURLException e) {
  16.         e.printStackTrace();
  17.     }
  18.             driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);  
  19.     Thread.sleep(10000);
  20. }
复制代码
UiSelector text
  1. driver.findElementByAndroidUIAutomator("new UiSelector().text(\"Custom View"\")").click();
复制代码
UiSelector textContains 全局文本匹配
  1. driver.findElementByAndroidUIAutomator("new UiSelector().textContains(\"发现\")").click();
复制代码
UiSelector textMatches
  1. driver.findElementByAndroidUIAutomator("new UiSelector().textMatches(\"^Custom.*\")").click();
复制代码
UiSelector textStartsWith
  1. driver.findElementByAndroidUIAutomator("new UiSelector().textStartsWith(\"Custom\")").click();
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

6#
发表于 2017-6-9 15:42:40 | 只看该作者
小皮球的故事 发表于 2017-6-9 15:13
命令安装和 客户端是一个性质的。
用到java的主要原因是appium 内部通讯是主要底层交互是 Android 的 Ui ...

谢谢,如果命令行安装好后,有没有直接的后面的操作方法,比如我需要验证一个基本用例查看效果,看了蛮多帖子,还没有发现更好的或者可以理解的,不知道你这边是否有好的推荐?
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2017-6-9 15:13:20 | 只看该作者
测试就是来开荒 发表于 2017-6-9 15:07
请问Appium,mac环境下命令行安装后,是否还需要安装桌面版?另外始终不解,命令行安装appium为什么需要jav ...

命令安装和 客户端是一个性质的。
用到java的主要原因是appium 内部通讯是主要底层交互是 Android 的 UiAutomator
可以先去了解一下大概的原理
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2017-6-9 15:07:44 | 只看该作者
请问Appium,mac环境下命令行安装后,是否还需要安装桌面版?另外始终不解,命令行安装appium为什么需要java,(我的理解:单纯安装apium后,然后使用ruby、python脚本语言去编写测试用例,所以现在有些傻傻分不清,这个环境在mac端到底怎么配置了),目前已经安装好appiu,执行appiu-doctor 没有报错
回复 支持 反对

使用道具 举报

  • TA的每日心情

    2024-7-8 09:00
  • 签到天数: 943 天

    连续签到: 1 天

    [LV.10]测试总司令

    3#
    发表于 2017-6-9 14:45:10 | 只看该作者
    欢迎多多分享
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2#
     楼主| 发表于 2017-6-9 14:34:12 | 只看该作者
    检查网络
    /***
    * 检查网络
    * @return 是否正常
    */
    public static boolean checkNet(){
    String text=driver.getNetworkConnection().toString();
    if(text.contains("Data: true"))
    return true;
    else
    return false;
    }
    desc的view
    /***
    * 根据UIautomator底层方法得到对应desc的view
    * @param desc名
    * @return View
    */
    public static WebElement getViewbyUidesc(String name){
    return driver.findElementByAndroidUIAutomator("new UiSelector().descriptionContains(\""+name+"\")");
    }
    得到对应text的view
    /***
    * 根据UIautomator底层方法得到对应text的view
    * @param text名
    * @return View
    */
    public static WebElement getViewbyUitext(String name){
    return driver.findElementByAndroidUIAutomator("new UiSelector().textContains(\""+name+"\")");
    }
    超时时间:
    driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
    打印整个页面PageSource:
    System.out.print(driver.getPageSource());
    获取当前时间并截图,命名:
    public static String getScreen(){
    String fileRoute="路径";
    SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmm");
    String picname=fileRoute+df.format(new Date()).toString()+".png";
    File screen = driver.getScreenshotAs(OutputType.FILE);
    System.out.println(picname);
    File screenFile = new File(picname);
    try {
    FileUtils.copyFile(screen, screenFile); 
    String time=df.format(new Date()).toString();
    System.out.println("当前时间"+time);
    return time;
    } catch (IOException e) {
    e.printStackTrace();
    }
    return null;
    }

    APP内上滑:
    driver.swipe(250, 300, 250, 1400, 0);
    APP内上滑:
    driver.swipe(250,1400, 250,300 , 0);
    WebView navigate 操作
    //driver.navigate().forward(); // 前进
    //driver.navigate().back(); // 后退
    driver.navigate().refresh(); // 刷新``
    切换WEBVIEW
    /***
    * 切换WEB页面查找元素
    */
    public static void switchtoWeb(){
    try {
    Set<String> contextNames = driver.getContextHandles();
    for (String contextName : contextNames) {
    // 用于返回被测app是NATIVE_APP还是WEBVIEW,如果两者都有就是混合型App
    if(contextName.contains("WEBVIEW")||contextName.contains("webview")){
    driver.context(contextName);
    System.out.println("跳转到web页 开始操作web页面"); 
    }
    }
    }catch (Exception e) {
    e.printStackTrace();
    }
    }
    滑动相关
    /***
    * 上滑1/4屏幕
    */
    public static void slideUP(){
    int x=driver.manage().window().getSize().width;
    int y=driver.manage().window().getSize().height;
    driver.swipe(x/2, y/3*2, x/2, y/3*1, 0);
    }
    /***
    * 下滑1/4屏幕
    */
    public static void slideDown(){
    int x=driver.manage().window().getSize().width;
    int y=driver.manage().window().getSize().height;
    driver.swipe(x/2, y/3*1, x/2, y/3*2, 0);
    }
    /***
    * 左滑1/2屏幕
    */
    public static void slideLeft(){
    int x=driver.manage().window().getSize().width;
    int y=driver.manage().window().getSize().height;
    driver.swipe(x/4*3, y/2, x/4*1, y/2, 0);
    }
    /***
    * 右滑1/2屏幕
    */
    public static void slideRight(){
    int x=driver.manage().window().getSize().width;
    int y=driver.manage().window().getSize().height;
    driver.swipe(x/4*1, y/2, x/4*3, y/2, 0);
    }
    /***
    * 特殊上滑
    * @param 传入从左到右宽度的百分比(1-99之间)
    */
    public static void slideUP(int i){
    Assert.assertFalse("上滑宽度传入错误", i<=0||i>=100);
    int x=driver.manage().window().getSize().width;
    int y=driver.manage().window().getSize().height;
    driver.swipe(x/10*i, y/3*2, x/10*i, y/3*1, 0);
    }
    /***
    * 特殊下滑
    * @param 传入从左到右宽度的百分比(1-99之间)
    */
    public static void slideDown(int i){
    Assert.assertFalse("下滑宽度传入错误", i<=0||i>=100);
    int x=driver.manage().window().getSize().width;
    int y=driver.manage().window().getSize().height;
    driver.swipe(x/10*i, y/3*1, x/10*i, y/3*2, 0);
    }
    /***
    * 特殊左滑
    * @param 传入从上到下宽度的百分比(1-99之间)
    */
    public static void slideLeft(int i){
    Assert.assertFalse("左滑宽度传入错误", i<=0||i>=100);
    int x=driver.manage().window().getSize().width;
    int y=driver.manage().window().getSize().height;
    driver.swipe(x/4*3, y/10*i, x/4*2, y/10*i, 0);
    }
    /***
    * 特殊右滑
    * @param 传入从上到下宽度的百分比(1-99之间)
    */
    public static void slideRight(int i){
    Assert.assertFalse("左滑宽度传入错误", i<=0||i>=100);
    int x=driver.manage().window().getSize().width;
    int y=driver.manage().window().getSize().height;
    driver.swipe(x/4*2, y/10*i, x/4*3, y/10*i, 0);
    }
    content-desc定位
    /***
    * 根据content-desc查找元素
    * @param view的类型
    * @param content-desc 的内容
    * @return
    */
    public static WebElement getViewbyXathwithcontentdesc(String view,String name){
    return driver.findElementByXPath("//"+view+"[contains(@content-desc,'"+name+"')]");
    }
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-11 06:01 , Processed in 0.071460 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表