使用python + selenium 心得

最近寫了一個幫助自己解決一個煩人雜事的小程式gist連結

這支程式主要工作如下:
登入公司的jira, 從手上的issue中找出指定符合父issue ID的所有issue, 統一填上註解並轉給指定的人。
寫的比較匆忙沒有加太多的例外判定, 目標是快速解決手邊的雜事。

之所以選擇selenium主要還是看上他可以省去很多功, 以前寫的爬蟲主要還是使用mechanize + BeautifulSoup, 但是遇到js就會很麻煩, 後來使用selenium不只js部分的問題沒有了, 連BeautifulSoup都不需要了, 他的find方法已經足夠我使用。

事前selenium module的安裝就不提, 要注意的是webdriver供許多瀏覽器版本可以用, 我用的是chrome, 必須要事前下載 chromedriver 使用, 並在使用時設置路徑, 如webdriver.Chrome(executable_path=r'.\\chromedriver.exe')

這支程式主要使用selenium幾個功能:

find

api
selenium 提供了一系列的方法讓你去找到目標元件, 基本上都如同api所列的一樣, 你可以依照條件使用特定id或者class來查找, 唯獨比較特別的是如果id或class中間有空格的最好還是使用 find_element_by_xpath ,之前沒有看過XPath所以花了一點時間才清楚使用方法。

基本上消耗最多時間還是在翻網頁原始碼找特定元素的id或class, 找到後基本上都不會有太大的問題,

action

找到元素後可以做一些行為, 這裡比較常用的有

  • click: 模擬點擊行為, 主要用在abutton
  • send_keys: 輸入的行為, 主要用在input
  • submit: form的提交行為

wait

有時候在進行一些動作後, 需要等待特定元件出現才可以進行下一個動作, 此時就需要用wait功能, 這裡有一篇文章提到使用方法, 寫的很詳細。

轉換NGUI atlas到UGUI的spritesheet

最近嘗試將一些效能消耗較大的NGUI UI轉換成UGUI測試, 不過目前暫時是自行測試, 所以在圖集部分暫時沿用以前的NGUI atlas來使用, 只是UGUI是不吃NGUI的atlas只吃sprite, 所以寫了一個工具來將NGUI的atlas資料寫到Texture的設定當中。

連結在此

最主要是要把讀取到SpriteData的y軸做額外的反轉處理.

LeanTouch 方便的手勢控制plugin

Asset Store Link

一開始專案在處理手勢的部份大多是自行處理, 以Unity的狀況來說如果是單指點擊來說寫起來沒有什麼大問題, 但後來專案中有需要處理Pinch與Twist兩種手勢, 一旦進入需要兩隻手指以上的手勢就開始麻煩了, 主要還是因為PC開發環境在多指的行為上需要自行模擬, 以及可能需要用執行環境來判斷來做不同的處理.

#if UNITY_EDITOR
    if (Input.GetAxis("Mouse ScrollWheel") != 0)
    {
        ...
    }
#elif UNITY_ANDROID || UNITY_IOS
    if (Input.touchCount == 2)
    {
        ...
    }
#endif

一開始的作法是用替代的方式來取代, 比方說PC端用滑鼠滾輪來取代Twist, 但是用久了感覺不是很直覺, 而且維護起來確實比較麻煩, 要抓真實的感覺需要編譯apk至手機上測試, 於是之後就改用這個套件。

這個套件對我的好處主要在於可以省略多平台的一些實作細節, 而且在PC端就可以模擬Pinch與Twist手勢(可選擇組合鍵), 測試起來比較方便。

事件提供了以下幾種

LeanTouch.OnFingerDown  
LeanTouch.OnFingerSet   
LeanTouch.OnFingerUp    
LeanTouch.OnFingerTap   
LeanTouch.OnFingerSwipe 
LeanTouch.OnGesture     

除了前幾個基本的事件以外, 也可以用LeanTouch.OnGesture來處理複雜的手勢,另外也提供了相關的取值方法:

LeanGesture.GetTwistDegrees
LeanGesture.GetPinchScale
LeanGesture.GetScreenDelta

不用再去計算一些細節比方說pinch兩指間移動的量之類的。

看一些文章有提到該套件有一些組件可以提供一些預設行為可供套用, 雖然沒有用到但感覺也是挺方便的。

UnityEngineAnalyzer測試記錄

今年不同場合的Unity研討會好像都有提到Unity腳本靜態分析的分享,所以心血來潮測試一下Unity Engine Analyzer。

  1. 官方說安裝可以透過NnGet Package Manager搜索來找到,但是就我的狀況直接找是找不到的。
    因為我的vs2015內建的是https://www.nuget.org/api/v2/curated-feeds/microsoftdotnet/ 這個source
    需要的話連到NuGet首頁可以看到下面有寫新的URL https://api.nuget.org/v3/index.json
    改用這個就可以找的到了。

  2. unity專案裡面一般會有三個: 一般, Editor, plugins,然而測試的時候安裝好像不會全部都幫你加上analyzer, 只會在其中的一個加上(我找不到他的邏輯)。
    要在其他專案中加入的話, 只需要自行增加analyzer, 選擇ProjectPath\packages\UnityEngineAnalyzer.1.0.0.0\analyzers\dotnet\cs\UnityEngineAnalyzer.dll 就會加入了。

  3. 目前提供9種檢查, 主要是不要使用一些耗效能的方法, 刪除空的方法, 避免使用coroutines這類的檢查, 有需要可以自己擴充。