1. 程式人生 > >Ruby+appium實現截圖、滑屏、長按、日誌輸出到本地資料夾

Ruby+appium實現截圖、滑屏、長按、日誌輸出到本地資料夾

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} #{[email protected]
[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()

相關推薦

Ruby+appium實現日誌輸出本地文件

username 實例 方法 pytho 日誌 用戶名 read 清除 文件夾 require ‘rubygems‘ require ‘appium_lib‘require ‘date‘require ‘logger‘require ‘pathname‘require ‘t

Ruby+appium實現日誌輸出本地資料

require 'rubygems' require 'appium_lib' require 'date' require 'logger' require 'pathname' require 'thread' require"fileutils" capa

Android Multimedia實戰(四)MediaProjection實現,與MediaMuxer實現為MP4,Gif格式

MediaProjection可以用來捕捉螢幕,具體來說可以擷取當前螢幕和錄製螢幕視訊 (5.0以上) 先總結下系統是如何實現組合鍵截圖的: 都應該知道Android原始碼中對按鍵的捕獲位於檔案PhoneWindowManager.java中 當滿足按鍵

C++實現螢幕(全

最近維護的專案,在某些情況下,光有日誌還不行,於是添加了截圖功能,特定情況下,會自動截圖,輔助分析,從而改程序序。以下是截圖實現程式碼。 void CDemoDlg::ScreenShot(void) { CWnd *pDesktop = GetDesktopWi

android視訊&手機錄實現

問題 在android中有時候我們需要對螢幕進行截圖操作,單一的截圖操作好解決可以通過activity的頂層view DecorView獲取一個bitmap,得到就是當前activity上面的全部檢視。 View view = activity.getWindow().getDecorView();

基於Appium+java進行Android自動化測試:列表定位用例失敗滑動依賴切換~

一、appium中對元素的定位方法的使用 場景:元素的定位,常利用resource-id、index、name(text)等屬性進行定位。如下圖所示,列表專案的index、resource-id、class、package等屬性均相同,無法利用常用屬性進行區分。直接根據r

Appium+JAVA實現功能

接觸Appium時間不長,以下是截圖方法程式碼,做個筆記備忘。 //截圖 public void test(WebDriver driver){ File screen = ((RemoteWebDriver) driver).

Android實現全域性以及錄

廢話不多說 直接上程式碼(使用kotlin編寫大致與java差不多) 程式碼註釋也挺詳細的 利用mediaProjection 實現截圖與錄屏 mediaProjection 是android 5.

利用Selenium+PhantomJS 實現

rgs 重載 public 服務器 console read using default tom using OpenQA.Selenium; using OpenQA.Selenium.PhantomJS; using System; using Syste

Java工具 捕獲

資源 urn stat oid reat gets phi super border 原文:http://www.open-open.com/code/view/1420037709781 import java.awt.BorderLayout; import ja

Appium自動化--

學習記錄public class Screenshot { public static void Screenshot(AndroidDriver driver,String ScreenName)throws IOException{ //設置時間格式 SimpleDate

Appium螢幕

螢幕截圖用到的方法: 方法1:save_screenshot() 該方法直接儲存當前螢幕截圖到當前指令碼所在的檔案位置 示例: 指令碼: #!_*_ coding:UTF-8 _*_from find_element.capability import driver dri

分享 不用API實現/擷取當前視窗內容( 抓

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Appium失敗及重試機制封裝(二)

analyze ret boolean 做了 ktr assert public false fail 一、失敗截圖封裝 1、主要封裝了失敗之後的文件名、重寫了失敗之後消息、失敗了以後做個截圖,最後置為失敗,並且存放到相對路徑下、截圖操作,未把失敗用例至為Fail,主要代

使用Chrome-headless模式下,不全的問題

在headless模式下,是沒有開啟瀏覽器視窗的,那麼driver.maximize_window(),找不到目標也打不開。 我們可以換一種方式,去在無頭模式下,指定瀏覽器的視窗大小執行即可。 __options = Options() __options.add_argum

JAVA實現小Demo

閒的沒事,寫個從書上看到的一個小例子,java獲取電腦螢幕內容,類似於qq截圖吧。直接上程式碼,都有註釋比較簡單。 public class ScreenPhoto { public static void main(String[] args) throws AWTException, IO

請教picturebox儲存到陣列並實現拖動組合的問題

VS2017從元資料無註釋!AutodeskRevit二次開發VS2017從元資料無註釋!AutodeskRevit二次開發 net4.5選單BUGwinform製作列印net4.5選單BUGwinform製作列印 父窗體BindingNavigator導航按鈕如何操作當前活

gnome中與錄操作

截圖與錄屏 你可以抓取當前螢幕圖片(截圖)或者錄製一個當前螢幕中操作的視訊(錄屏)。當你想要給某人演示怎樣在電腦上進行某些操作時,你可以通過截圖和錄屏來獲取圖片及視訊檔案,然後通過 email 向別人傳送這些檔案或將這些檔案共享到網路上。 截圖          

Appium 螢幕(交易寶)

截圖方法 方法1 save_screenshot() 該方法直接儲存當前螢幕截圖到當前指令碼所在檔案位置。 driver.save_screenshot('jiaoyibao_login.png') 方法2 get_screenshot_as_file(sel

selenium + python實現並且儲存圖片的方法

在自動化測試過程中,是有必要截圖的,特別是遇到錯誤的時候進行截圖,截圖可以幫助我們直觀的定位錯誤、記錄測試步驟。。截圖對於測試人員來說應該是較為重要的一個技能。 webdriver的截圖功能十分強悍,無論頁面多長,webdriver都能比較完美的截到完整的頁面。 Webd