Ruby+appium实现截图、滑屏、长按、日志输出到本地文件夹

原创 2016年06月01日 11:12:49
require 'rubygems'
require 'appium_lib'
require 'date'
require 'logger'
require 'pathname'
require 'thread'
require"fileutils"
capabilities = {
    'appium-version'=> '1.4.13.1',
    'platformName'=> 'Android',
    'platformVersion'=> '4.4.2',
    'appActivity:'=>'com.worktile.ui.external.WelcomeActivity',
    'app'=>
        'D:\\WorkspacePython\\apk\\wt-android-3.12.3.apk',
    'deviceName'=>'VPhone'
}
server_url = "http://127.0.0.1:4723/wd/hub"
dr = Appium::Driver.new(caps: capabilities).start_driver
Appium.promote_appium_methods Object
#创建日志路径,打印日志
def loginfo(s = "#{$!.message} #{$@[0]} ")
    wait do
      url = file()
      #判断需写入的日志内容是否为空,如果为空则不需要写入
      return if not s
      #创建logger实例
      logger = Logger.new(url+(Time.now).strftime("%Y-%m-%d")+"_install_detail.log", 'daily') #daily/weekly/monthly.
      #赋予logger控制输出级别为DEBUG。DEBUG含义是:既可以在
      #控制台看到需写入的日志信息,又写入到了日志文件中
      logger.level = Logger::INFO
      logger.info(''){s}
      logger.close
    end
end
#清除文件内上一次创建的内容,该方法调用必须写在所有方法之前
def Logdelete()
  wait do
    url = file()
    io = File.open(url+(Time.now).strftime("%Y-%m-%d")+"_install_detail.log","w")
  end
end
#创建文件夹/result/image/
def url()
  begin
    wait do
      FileUtils.makedirs(Dir.pwd+"/result/image/")
    end
  rescue =>ex
    TakeTakesScreenshot()
    raise Exception,"创建文件夹异常!#{ex.message}"
  end
end
#获取当前路径
def file()
  begin
    wait do
      Dir.pwd
    end
  rescue =>ex
    TakeTakesScreenshot()
    raise Exception,"当前路径异常!#{ex.message}"
  end
end
#点击ID
def ClickByID(id)
  begin
    wait do
      find_element(:id,id).click
    end
  rescue =>ex
    TakeTakesScreenshot()
    raise Exception,"#{id}异常!#{ex.messge}"
  end
end
#截图
def TakeTakesScreenshot()
  begin
    url()
   wait do
     dr = screenshot(Dir.pwd+"/result/image/"+ Time.now.strftime("%Y%m%d %H%M%S")+'.jpg')
   end
  rescue =>ex
    TakeTakesScreenshot()
    raise Exception,"#{}异常!#{ex.message}"
  end
end
#通过用户名点击
def ClickByName(name)
  begin
    wait do
      find_element(:name,name).click
    end
  rescue =>ex
    TakeTakesScreenshot()
    raise Exception,"#{name}异常!#{ex.message}"
  end
end
#通过name输入name键入文字
def SendByName(name,content)
  begin
    wait do
      find_element(:name,name).send_keys content
    end
  end
rescue =>ex
  TakeTakesScreenshot()
  raise Exception,"#{name}异常!#{ex.message}"
end
#通过id输入id键入文字
def SendByID(id,content)
  begin
    wait do
      find_element(:id,id).send_keys content
    end
  end
rescue =>ex
  TakeTakesScreenshot()
  raise Exception,"#{id}异常!#{ex.message}"
end
#新版本更新窗口弹出,点击稍后更新按钮
def WaitForNew(content,name)
  begin
    # wait for alert to show
    wait do
      text content
      find(name).click
    end
  rescue =>ex
    TakeTakesScreenshot()
    raise Exception,"#{name}异常!#{ex.message}"
  end
end
def LongPressClick(name)
  begin
    wait do
      e = find_element(:name, name)
      Appium::TouchAction.new.long_press(element: e, x: 0.5, y: 0.5).release(element: e).perform
    end
  rescue =>ex
    raise Exception,"#{name}异常!#{ex.message}"
  end
end
#执行下滑动作
def SwipeDown(num)
  begin
    for i in 0..num
      wait do
        swipe :start_x => 0.5, :start_y => 0.25, :end_x => 0.5, :end_y => 0.75, :duration => 500
      end
    end
  end
rescue =>ex
  TakeTakesScreenshot()
  raise Exception,"#{num}异常!#{ex.message}"
end
#执行上滑动作
def SwipeUp(num)
  begin
    for i in 0..num
      wait do
        swipe :start_x => 0.5, :start_y => 0.75, :end_x => 0.5, :end_y => 0.25, :duration => 500
      end
    end
  end
rescue =>ex
  TakeTakesScreenshot()
  raise Exception,"#{num}异常!#{ex.message}"
end
#执行左滑动作
def SwipeLeft(num)
  begin
    for i in 1..num
      wait do
        swipe :start_x => 0.75, :start_y => 0.5, :end_x => 0.25, :end_y => 0.5, :duration => 500
      end
    end
  rescue =>ex
    TakeTakesScreenshot()
    raise Exception,"#{num}异常!#{ex.message}"
  end
end
#执行右滑动作
def SwipeRight(num)
  begin
    for i in 0..num
      wait do
        swipe :start_x => 0.25, :start_y => 0.5, :end_x => 0.75, :end_y => 0.5, :duration => 500
      end
    end
  end
rescue =>ex
  TakeTakesScreenshot()
  raise Exception,"#{num}异常!#{ex.message}"
end
#结束当前运行
def Quit()
  wait do
    driver_quit
  end
end
Logdelete()
ClickByID("btn_login")
loginfo("点击登录按钮成功")
SendByID("et_username","yk1234567")
loginfo("输入用户名成功")
SendByID("et_password","yk123456")
loginfo("输入密码成功")
ClickByID("btn_login")
loginfo("点击登录按钮成功")
WaitForNew('新版本更新','稍后更新')
loginfo("点击新版本更新按钮成功")
loginfo("点击稍后更新按钮成功")
SwipeLeft(1)
loginfo("滑屏两次成功")
LongPressClick('appium')
loginfo("长按成功")
TakeTakesScreenshot()
loginfo("截图成功")
Quit()

相关文章推荐

手把手教你appium_第一个示例日志解读

运行成功了appium第一个例子后,日志一阵猛吐,也不知道细节是啥情况。这下仔细看看。那堆adb命令,就自己百度吧。...

appium log详解

跑起了第一个实例,我们先来看一下appium的log,来帮助我们更好的理解它的运作过程,从启动app到它完全结束 图中(1)启动REST http服务器,默认监听本地4723...

Appium 服务命令行参数

Appium  可以直接通过命令行启动,同样支持命令行参数配置 参考: http://appium.io/slate/cn/master/ 服务器标志 所有的标志都是可选的,但是有一些标志需...

Appium中的logger

appium中的log输出量很大,我们分析问题的时候会依赖于这些log,但是你理解这些log输出一些标志么?你是否觉得它的输出晦涩难懂了?想不想改成自己的大名?那就看下面的文章吧。 log形式首先我们...

appium的log详细分析

下面介绍appium日志的大概分析 //启动appium服务成功 2017-03-24 11:22:49:218 - info: [Appium] Welcome to Appium v1.6.3 ...

常见的appium日志分析

运行成功了appium第一个例子后,日志一阵猛吐,也不知道细节是啥情况。这下仔细看看。那堆adb命令,就自己百度吧。01.  png:  650) this.width=650;" id="aimg_...

appium服务日志解析

> Launching Appium server with command: C:\Program Files (x86)\Appium\node.exe lib\server\main.js --...
  • wxpokay
  • wxpokay
  • 2016年03月06日 00:55
  • 1684

appium+python自动化实践之添加移动端logcat日志

使用appium框架执行Android自动化测试时,如果移动端程序发生了异常,期望有相应的log辅助分析,于是想到了需要测试过程需要打印logcat,实践了以下的方法: 方法1:执行自动化测试时,...

Appium上的截图保存

目的:Appium自动化测试截图 环境:Appium + Eclipse 代码: 1.编写截图+保存的方法:     public static void snapshot(TakesScreensh...
  • aduocd
  • aduocd
  • 2015年10月29日 16:06
  • 1326

android自动化测试中实现长按并拖动

android应用自动化过程中,会遇见需要长按并拖动的场景,例如类似UC浏览器中,长按某个导航中的图标,使其处于可移动状态,然后再将其移动到另一个地方,与其它导航图标换个位置,在robotium中有个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ruby+appium实现截图、滑屏、长按、日志输出到本地文件夹
举报原因:
原因补充:

(最多只允许输入30个字)