2016-11-04

[Selenium] How to solve org.openqa.selenium.remote.ProtocolHandshake createSession problem

    近期用 Selenium 在沒有更新任何源碼的情況,再次執行後遇到以下錯誤:


Starting ChromeDriver 2.23.409699 (49b0fa931cda1caad0ae15b7d1b68004acd05129) on port 21975
Only local connections are allowed.
十一月 04, 2016 1:55:08 下午 org.openqa.selenium.remote.ProtocolHandshake createSession
資訊: Attempting bi-dialect session, assuming Postel's Law holds true on the remote end
十一月 04, 2016 1:55:10 下午 org.openqa.selenium.remote.ProtocolHandshake createSession
資訊: Detected dialect: OSS
Exception in thread "main" org.openqa.selenium.NoSuchSessionException: no such session
  (Driver info: chromedriver=2.23.409699 (49b0fa931cda1caad0ae15b7d1b68004acd05129),platform=Windows NT 6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 4 milliseconds
Build info: version: '3.0.0-beta4', revision: '3169782', time: '2016-09-29 10:30:04 -0700'


    解法是要將 ChromeDriver 2.23 更新到 2.25 即可,不過這點還滿弔詭的,因為我個人並沒有更動到任何既有源碼或更新 Selenium 套件,代表 ChromeDriver 本身一定有做一些檢查,這點有空再來研究。

[額外資訊]

2016-11-03

Ubuntu安裝Java JDK 7或JDK 8

介紹於 Ubuntu 14.04 / 16.04 上安裝 Java JDK 7 / 8 的方法。

[說明]
當網路環境處於離線,或不一定直接能存取到internet仰賴proxy時,使用ppa的安裝基本會失效,乾脆到官網上下載 jdk 檔案然後直接進行設定反而是最快的做法。

[步驟]
  1. 請至官網下載JDK,我們這裡用 jdk1.8.0_111 這個版本作為示範,請自行替換版號。
  2. 建立 Ubuntu 的 jvm 目錄,指令:
    • #sudo mkdir /usr/lib/jvm
  3. 將下載的 jdk 檔案解壓縮到 jvm 目錄,指令:
    • #sudo tar -zxvf jdk-8u111-linux-x64.tar.gz -C /usr/lib/jvm
  4. 再來要將 java 預設路徑告知系統,請:
    • #sudo vim ~/.bashrc
    • 添加以下內容
    •        
      export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_111
      export JRE_HOME=${JAVA_HOME}/jre
      export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
      export PATH=${JAVA_HOME}/bin:$PATH
      
      
    • 使環境變數生效
    • #source ~/.bashrc
  5. 然後執行以下步驟,讓 Ubuntu 認得這個版本的 JDK
    • #sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_111/bin/java 300
    • #sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_111/bin/javac 300  

2016-11-02

[Ubuntu] 設定ssh可遠端用密碼登入

    某些版本的Ubuntu預設沒有開啟ssh遠端用帳密登入的權限,所以當你使用Puttie等連線軟體的時候會遇到登入錯誤,解法如下:

  1. 直接到Server上登入Ubuntu Console
  2. #sudo vim /etc/ssh/sshd_config
  3. 將 PasswordAuthentication 變數由 no 改為 yes
  4. 重啟ssh service,指令:/etc/init.d/ssh restart
  5. 即可由遠端透過ssh登入
  6. #sudo -s
  7. #passwd

2016-10-29

[自動化網頁測試] 於Ubuntu使用Selenium整合Headless Firefox

這裡介紹Geb(瀏覽器自動化browser automation)的解決方案Selenium + Headless Firefox。

[環境與工具]

  • Ubuntu Server 14.04 LTS
  • JDK 1.8.0_91(注意!! jdk 1.7 Selenium 會有問題)
  • Ubuntu沒有GUI,需要使用xvfb(x window virtual framebuffer)作為headless browsergraphic render
  • Web Driver
    • firefox webdrivergeckodriver-v0.10.0
    • google chrome webdriverchromedriver_win32 / linux64
    • 請自行下載並注意執行環境平台
[xvfb & firefox]
  • 安裝指令
    • #sudo apt-get install firefox xvfb
  • 安裝過程如果缺少字型
    • #sudo apt-get update
    • #sudo apt-get install -y xorg xvfb dbus-x11 xfonts-100dpi xfonts-75dpi xfonts-cyrillic
  • 啟動xvfbgraphic render,頻道0~99任選,1280x960x16為模擬視窗大小,目前使用此值運作正常
    • #Xvfb :99 -ac -screen 0 1280x960x16
  • 擷取xvfb畫面

2016-09-14

在Macbook Pro使用Bootcamp安裝Windows10

基於與在下公司方便共事 + 個人是Apple Macbook系列的硬體控(沒有任何品牌的laptop質感比得上),所以必須委屈讓個人的MBP安裝Windows 10。

[注意事項]

  • 新版的安裝方式跟Windows 7不同,不過變得更方便了!!


[硬體]

  • Apple Macbook Pro 2015
  • Bootcamp
  • 安裝Windows 10
[安裝步驟]
  1. 先登入Mac OS,啟動應用程式工具的Bootcamp
  2. 準備Windows 10.iso,並存檔於Mac OS
  3. 啟動Bootcamp,輸入iso的檔案路徑,連上網路,Bootcamp會自動幫你下載需要的硬體驅動程式;再來就是選定你要給定Mac OS跟Windows的磁碟空間大小,最後點選下一步便會開始安裝作業。
  4. Windows 10安裝步驟,略。
  5. 順利安裝Windows 10後,最重要的是安裝驅動程式,這個比較不好找,要點選[開始] -> [檔案總管] -> [電腦],這時候C槽圖示下面你會看到還有個iso掛在那邊,不要懷疑,你需要的驅動程式就在裡面,不用再自己去抓啦(想抓也抓不到...我花時間找很久)。點進去資料夾,裡面應該有[Driver],點選Setup即可!!

2016-09-10

使用Visual Studio 2015製作Cordova的Android APK(可上架至Google Play)


前些日子的文章提到,Microsoft Visual Studio 2015 針對 Mobile APP 開發相當友善,近日用其 Cordova 套件來開發,推薦大家使用;今天跟大家介紹如何使用Visual Studio 2015製作Android APP的android-release.apk,以便發佈到Google Play。

[製作keystore]

  • Cordova建置Android APP分為兩個階段,分別為Debug、Release,上架至Google Play上的APP需要開發者的金鑰簽署,以下是簽署指令
  • 使用jdk的keytool製作金鑰,一般而言放置路徑會在C:\Program Files\Java\jre1.8.0_91\bin
  •        
    #keytool -genkey -alias your-key-name.keystore -keyalg RSA -validity 20000 -keystore you-key-name.keystore
    
    

[設定keystore資訊於Cordova專案]
  • 有兩個檔案需要設定,其一是[專案] -> [res] -> [native] -> [android] -> ant.properties,請自行填入方才製作的keystore資訊

  • 其二為[專案] -> [www] -> build.json,編輯後會像是

2016-09-08

北京坑錢事件簿

背包旅行多次的經驗
讓我深刻體會到,剛到某個國家前幾天一定都會被坑到錢
在大陸當然也不例外

事件一:
出機場因為行李繁多,計程車一台不願意載我們兩人
所以我和同事就包了台廂型車前往住宿飯店
要價650RMB,還沒得殺價
到了飯店,得知其他同事跳錶的計程車資才110RMB...XD

事件二:
在飯店附近的小店購買手機易付卡
店家開價65,我們就說早上來個同事才買55,
店家立刻說他記錯了...改算我們55
事後我們問了房仲,他們買只要50~

事件三之一:
我在小區附近的美廉美超市買了P牌吹風機,178RMB,
隔天在鬧區的大賣場看到特價99RMB....(吐血)

事件三之二:
同事U在美廉美超市也想買吹風機,標價約95,
然後他在閒聊中隨口說了:"喔,好貴喔"
服務員馬上說:"我們現在有做特價,只要75"
得知:在賣場也可以殺價~

事件四:
同事C在超市買了盒保鮮膜包起來的四根香蕉,7.5RMB
回家後發現壓在底下的兩根是爛掉的...

2016-08-11

使用Docker建置Spring Boot微服務


脅持著微服務架構盛行,Spring Boot 似乎也開展起不小的火紅之路,再搭配 Docker LXC容器技術,應該算是個很厲害的組合。

[環境]
  • Ubuntu 16.04 LTS 64 bits
  • Docker version 1.10.3
  • Java 8
  • Gradle 2.10
[建置步驟]
  • 請自行安裝Ubuntu 16.04,過程略。
  • 由於Ubuntu 16.04預設只有apt,習慣用apt-get的人可以自行安裝apt-get
    • #sudo apt install apt-get
    • #sudo apt-get update
    • 安裝Gradle
      • #sudo apt-get install gradle
    • 安裝Docker
      • #sudo apt install docker.io
      • 安裝Git,並抓取放在Github上做好的gradle專案,看起來目錄如下圖
        • #sudo apt-get install git
        • #sudo git clone https://github.com/spring-guides/gs-spring-boot-docker.git
        • 為了避免我現在測試的 src 版本會跟撰寫這篇網誌有差異,我自己 fork 了一份在自己的 github 上:https://github.com/A-Ho/gs-spring-boot-docker

        • 由於下載的範例檔src/main/java/hello/Application.java

        2016-07-28

        [troubleshooting][visual studio][cordova] 解決Ripple模擬器排版異常問題

        Microsoft Visual Studio 2015 針對 Mobile APP 開發相當友善,近日用其 cordova 套件,覺得滿推薦各位使用。

        Ripple emulator 是個啟動速度非常快的網頁版 APP 模擬工具,除了手機才提供的功能(相機、GPS、訊息推播...etc)等硬體功能外,視覺表現幾乎可圈可點。

        但如果你遇到 Ripple 排版亂掉,看起來就像是開了網頁但沒有了 css 排版(很抱歉來不及截圖,不小心問題就被解掉了),有個很簡單的重新 reset 方式:

        點選 [工具(T)] -> [選項] -> [Apache Cordova工具] -> [Cordova工具] -> [清除 Cordova 快取],即可解決。


        2016-07-22

        [troubleshooting][rabbitmq] Error: unable to connect to node rabbit@controller01: nodedown

        當對 RabbitMQ 執行 rabbitmqctrl 指令時,如果發生 Error: unable to connect to node rabbit@controller01: nodedown,如下圖


        不要懷疑,非常有可能就是你的 /etc/hosts IP填錯,以上述例子會查 hostname 為 controller01 的IP去送 cmd,所以 IP 千萬不要填錯了~





        2016-04-20

        安裝與備份Gitlab教學

        GitHub幾乎是所有(除了China)資訊工程師置放源碼的首選,但缺點是免費使用你必須開源自己的專案,否則必須額外付費,這時候你可以考慮安裝Gitlab作為repository。

        [作業環境]
        • Ubuntu 12.04 LTS
        • Gitlab version:gitlab-ce_7.10.4
        [網路環境]
        • 請注意自己的網路有通,不然記得設定proxy
        • export http_proxy=http://${ip}:${port}
        • export https_proxy=http://${ip}:${port}
        [安裝步驟]
        • sudo apt-get install curl openssh-server ca-certificates postfix
        • curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
        • sudo apt-get install gitlab-ce=7.10.4~omnibus-1
        • sudo gitlab-ctl reconfigure
        [Gitlab網頁設定]
        • 把自己的IP替換這兩個檔案
          • sudo vim /etc/gitlab/gitlab.rb
          • sudo vim /var/opt/gitlab/nginx/conf/gitlab-http.conf
        • 重啟Gitlab
          • sudo gitlab-ctl reconfigure
          • sudo gitlab-ctl restart
        [備份]

        2016-04-11

        [OpenStack] 如何擴充DevStack的Swift空間

        DevStack是一套一鍵式安裝部署OpenStack的利器,但DevStack的運作核心僅是提供Developer一個簡單上手參與開發的工具,並不是拿來做上線系統正式環境,所以有些參數需要自己微調。

        舉例來說,預設DevStack的Glance、Cinder都會用到Swift的空間作為儲存,而該Swift則是掛在xfs格式的filesystem下,預設只有2GB,調整的方法如下:


        • swift掛載的loop device滿載,可以下指令 df -hT 查使用量。

        • ~/tempest_run/workspace/devstack/local.conf 加入參數  SWIFT_LOOPBACK_DISK_SIZE=4G ,容量可自訂,接著把整個 devstack uninstallreboot VMinstall,就可以看到 swift.img 被加大。

        2016-03-24

        [BJ] 長城八達嶺攻略

        相信我,征服長城真的是件很容易的事情

        北京食衣住行,各項消費水平都跟台灣差不多,
        除了行,真的是優惠人民也優惠到了外國人

        地鐵站5號線到積水潭站下車,出口B左轉走約一公里,
        一路上都有指引,"前往八達嶺,在箭樓左側搭919路車"
        用公交卡一段路是4.8元,單純打票要價12元...
        不塞車的話大約五十分鐘就能到達八達嶺

        車掌小姐一路上會嚇唬你說什麼不搭划車(來回票60元)
        來回路程要六七個小時,搭了只要三四個
        千萬別聽他的,隨便走其實不到兩個小時就可以走完
        跟門票50元(學生票才20元)比起來
        根本沒必要花這個冤枉錢
        也不用花時間排隊上划車

        逛了許多景點,長城是我見過最多外國人的地方
        大概就跟我去埃及的金字塔跟人面獅身的感覺是一樣的

        P.S.
        1.919回程最末班時間是下午四點左右,請注意時間
        2.爬長城最好穿摩擦力夠的運動鞋去,因為其中有好幾段路是
        只有斜坡沒有階梯的
        3.食物的話當地路邊攤不是很貴,餓的話可以稍微果腹

        2016-03-18

        整合Redmine跟Gerrit

        Redmind是一套用Ruby-on-Rail開發的開源專案管理軟體,知名度頗高;Gerrit則是Google工程師開發一套建構於版本控制系統之上的Code Review的系統,他的hooks功能在前篇提到一 些,這裡要介紹怎麼把Redmind開出來的issue自動被Gerrit在patchset更新的時候一併更新。

        [環境]

        • OS:Ubuntu 14.04 LTS
        • Redmine version: 2.3.2.stable
        • Gerrit version: 2.11
        • Script language: Python 2.7
        [安裝設定]

        Step 1. 開通Redmind的REST功能,管理權限Admin登入,進行網站設定 -> 認證 -> 啟用REST,打勾然後儲存。




        Step 2. 取得各自帳號的REST API key,點選右上角我的帳戶,下方API金鑰點選後會彈出key,有了他可以透過REST API對Redmine程式化操作。

        2016-03-11

        如何設定Gerrit的Hook機制

        Gerrit是一套Google工程師撰寫的開源code review系統,底下可以銜接多種類的版本控制工具,最近因為Android Studio的開發導入Gerrit作為code review的系統開始竄紅;以下介紹Gerrit如何設定其Hook機制。

        [安裝環境]
        • 作業系統:Ubuntu 14.04 
        • Gerrit版本:2.11
        • 版本控制:Git

        [設定步驟]
        Step 1. 請正確安裝Gerrit系統(略)

        Step 2. 修改gerrit的設定檔,把hook的設定補進去,目錄在${your gerrit home}/etc/gerrit.config;請根據自己的需求設定gerrit支援的hook階段
        
        [hooks]
            path = /etc/gerrit/hooks
            patchsetCreatedHook = patchset-created
            # ...you can add more hooks
        

        Step 3. 將script設定為可執行
        
        sudo chmod +x /etc/gerrit/hooks/patchset-created
        

        Step 4. 重啟Gerrit
        
        sudo /etc/init.d/gerrit restart
        

        Step 5. patchset-created是你要執行hook的script,可以換成任何您熟悉的script語言,置放在/etc/gerrit/hooks目錄底下,注意檔名要正確才能對應;先用bash來測試是否正常執行。
        
        #!/bin/sh
        echo 'hook setting test.' > hook-gen.txt;
        
        注意:hook-gen.txt會產生到你git到的repo的project目錄,原則上應該是/etc/gerrit/git/${project}。

        Step 5. 從本地端執行git commit push,將code送到Gerrit,然後當patchset被產生的時候就會執行patchset-created這支script。