2015年6月30日 星期二

[Selenium][散知識][恍神] 奇妙的出錯,請看看測試資料有沒有小錯誤

昨測試時出現個奇妙的bug
我的所有測試資料都寫成陣列,而第一筆一直出錯,第二筆確沒事
當時本來猜測是因為特殊字元的關係嗎?還是我寫的test不夠正確?
就這樣反覆debug了約一個下午

今早一來公司再看了一下,原來是我的第一筆資料裡面藏了一個空格!!!!!!
畢竟我當初是複製貼上的方式,可能在copy整段文字時連同後方的空格也複製了
這真的有點難看到,其實原本從噴出來的錯誤應該也可以看得到
但實在太微小了,當初只有檢查到底整段字有哪裡跟實際的畫面有不一樣,卻沒注意到後方有一個小空格

因為第二個測試是要base在前一個畫面有成功轉換才會成功
但沒道理第二個成功了,第一個卻失敗,這表示頁面是有成功轉換的,但卻說找不到element
原本是朝向我是不是錯用了elementlocated,初期寫test也常常在這裡出錯

萬惡的空格阿~~~

2015年6月22日 星期一

[Selenium][散知識] 當error出現時screenshot

mocha有currentTest可以讓你知道現在test的一些資訊
所以可以在每一個test結束後,只要當下那個test的state == failed,就拍照

     test.afterEach(function(){        
        if (this.currentTest.state == 'failed') { 
          driver.takeScreenshot().then(function(data){
           var base64Data = data.replace(/^data:image\/png;base64,/,"")
           console.log(testtitle);
           fs.writeFile("out.png", base64Data, 'base64', function(err) {
                if(err) console.log(err);
           });
          });
        }
      })

[Selenium][散知識] 大推mochawesome reporter

https://github.com/adamgruber/mochawesome
如果也是使用webdriverJS,並且希望生成一個HTML的報表,大推mochawesome
尋尋覓覓了好一陣子的reporter,終於找到這個
run過一次後也覺得"相當相當"的符合我的想像

之前是用mocha-unfunk-reporter
他是會幫你生成有html架構的reporter沒錯
但我找不到怎麼insert stylesheet
總不能產生出來都要自己手動加

好在先前有些看過資料了
果不其然要change request
花了一天查資料~~嗯~~可以回頭重改資料了

不得不再提一下, mochawesome真的寫得太棒了,不禁很希望自己也能寫得出那樣的東西
遇到超好的套件心情真的很好。

另外附上一個在mochawesome之前看到的yadda-html-reporter
https://github.com/mamalisk/yadda-html-reporter
但最後沒成功,就留著記錄一下

2015年6月16日 星期二

[Selenium][散知識] 微妙的細微動作

webdriver的動作都非常快,通常一個動作做完就直下下一個
下面是原先以為沒問題的程序


test.it('//', function(done){

  //填完所有註冊所需要資料

  driver.findElement(webdriver.By.css('//button')).click();
  driver.wait(webdriver.until.titleIs('//title'),80000);  
  done();

  //點選butoon後等到完成註冊的頁面出現,確認title是否正確
});


test.it('//', function(done){

  //檢查連結是否帶有我所想要的字串
  done();
});

 

test.it('//', function(done){

  //關掉lightbox

  //確認信用卡form有沒有出
  done();
});


我自己的認知覺得我第一步都已經等到下一頁的title都出現成正確了,照理說下一頁的lightbox也都應該準備好了
照理說第三步應該可以直接去關掉lightobx
比較麻煩的是第三步的lightbox是可以滑動的三個div
如之前所說,只要invisible的元素都是無法操作的
不過這也還好,好在他們當前的div都有特別設一個div-visible的class
所以選定此class項下的關閉button,照理說應該就可以關閉了

事情不是愚人所想的那樣
他一直說"找不到element"

所以我在第三步再多加一個


test.it('//', function(done){

  //確認 div-visible已經被(located)放置了<-多加這個

  //關掉lightbox

  //確認信用卡form有沒有出
  done();
});


幸運通過

[Selenium][散知識] unrecognized chrome option: mobileEmulation

哎,我原本很有野心星期一要完成所有的測試
自認為現在遇到的問題都是類似的,但我忘了想到現在的狀況是
「小問題很多大同小異,但大問題一卡就會卡一整個上午」
而且一天至少會遇到2個大問題...
自以為寫了一個多月遇到大問題的機率變低了,但其實每天都還是會遇到阿
--------------------------
我要測手機版的網站,但自認為把所有的設定都設定完了,
我在家試mobileEmulation是好的,但公司是壞的
出現的是unrecognized chrome option: mobileEmulation
去翻 webdriverJS的文件,還真的剛好最近一次的change log是跟mobileEmulation有點關係
但今天一早確認過公司家裡的webdriver都是最新版了
所以最後賭是chrome driver本身
看了一下我下載的是2.9,但最新的已經是2.15(其實是2.16)
置換後.........

就好了!!!!!!!!!(撒花)

ps
一個很白癡的發現,我是從以下的網址下載chrome driver,算是官方放置各版本chrome driver的地方
http://chromedriver.storage.googleapis.com/index.html
自以為下載了最新版(直接看最後一個檔2.9)
結果剛才發現最新明明是2.16,因為檔案命名的關係,2.16變到中間阿!!!


2015年6月15日 星期一

[Selenium][散知識] 每一次開始新的session別忘了mocha的預設timeout

自以為現在要handle大部分的test case應該都不有太大的問題
DOM的操作,截取值...等,寫了50幾個test suite了,到後期遇到的問題都大同小異
上禮拜結束前發現有些test suite合在一起做比較好
所以我需要先結束前一個session再開一個新的session測另一項
寫完明明滿有把握沒什麼問題,結果到一個browser一開啟也沒進到網頁就說timeout了
想說這也太難debug了把,守在螢幕前一整個上午,因為只開browser就沒動作有點難了解是什麼事發生了
直到剛剛才想到mocha需要先預設timeout,設完就好了= =

該說已經習慣debug好幾個小時會得到一個可能之前就知道的原因...
小時候這樣就會氣得跳起來走來走去,
但也可能是我線快到了,沒時間讓我生氣了

-------------

現在大部分的測試就是寫個60-80%後拼拼湊湊之前的東西就可以完成
但還是會落東落西忘了哪個東西就一直報錯,
集中精神阿(打臉)~

2015年6月12日 星期五

[Selenium][散知識] xpath還是有盲點

發現其實xpath還是有一點限制
如果我們不知道某個element的名稱,單純想找頁面上有出現哪個字的話,
先前我們寫了

xpath('//*[contains(text(),"Specific Word")]')


但我發現那只限定於那個Specific Word是有真真實實真真確確的被包在一個tag裡
也就是說

< span>
Specific Word
< /span>

或是
Specific Word

都可以順利被找到
但如果是
Specific Word < br/> Hello World < br/>;

這樣就會找不到............

2015年6月11日 星期四

[Selenium][散知識] xpath大好

有時候我就是沒有要從特定的element中檢查字,
我只想在這個畫面上找到有符合某些條件的element出來
在沒有特定element的情況下,此時xpath就非常好用
(像是上幾篇說我試著要在email信上面放id,但每家service provider處理id的方式都不同,所以email要定位特定element有點不穩)

xpath('//*[contains(text(),"Specific Word")]') 

(ps, 只是在標題打個顏文字>///<就被視為html tag沒關好!?)

[Selenium][散知識] 如何存getText()

喔耶,由於getText()有promise的問題,取得的值無法直接使用
昨天查了沒什麼結果,今早就找到方法啦!!!

先var一個物件
然後getText後得到的值存到物件裡,然後就可以自由地使用了~就這麼easy~

var data = {};
driver.findElement(webdriver.By.css('#header')).getText().then(function(value){
  data.value = value;
});

reference: http://stackoverflow.com/questions/20213675/how-to-convert-a-promise-in-protractor-to-a-float

2015年6月10日 星期三

[散知識] :nth-child(n)的n與webdriver的小卡關

不自覺就把陣列中的第一是0的觀念帶進來
但:nth-child的第1就是1,不是0
再來就是他同層級的所有事物去選取,這今天才知道滿有趣的


p:nth-child(1)在下面的例子裡是不會選到任何東西的
他要同層級選擇第一個,而且要是p才會被選中,但例子中的第一個是span,所以就是沒選到東西。


hey

abc

abc

abc

abc

abc


-------------------
今天另外發生一個因為responsive而小卡關的有趣事蹟
選取器解決後,卻還是有一個測試一直報錯
斷言說實際值是空的,但不可能阿,同樣的東西其他都通過了,就唯獨他
後來才發現是因為responsive在小視窗下display:none了那個元素
webdriver目前開啟視窗時有預設只開某個大小(個人認為應該可以去調整default,還沒找到放哪)
webdriver又是很明確display:none的東西是抓不到的
所以有做responsive的站,有些元素可能就抓不到,愛滋意~~
此時先使用下列,最大化視窗

driver.manage().window().maximize();


reference:
http://stackoverflow.com/questions/23225604/how-do-i-resize-a-webdriverjs-browser-window
http://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_WebDriver_Window.html#setSize

[爆氣] 我不懂你google使用者阿

一直很想管理一下我某個google帳號內的bookmark
實在不知道怎麼看同步的bookmark在哪裡
"google bookmark"跟瀏覽器的bookmark不是同一個

後來看公司的chrome使用者一直出現驚嘆號(意指之前登入過,但現在是沒登入的狀態)
想說我不要刪除使用者,只是選擇"中斷同步",

結果browser又全部被reset!!!!!!!!!

馬的B咧,我的油猴子的腳本又要重裝了
我只是想單純中斷與帳號的同步,為何一直要強迫我全部重來啦

算了,冷靜,不如敢快先manage bookmark比較重要,花1小時了努力
我又登入我的google帳號救回之前有同步過的
中間有大約半年的bookmark就gone了

只覺得被google使用者陰這麼多次,今天又被雷,應該有五次以上了,心有不甘阿!!!

2015年6月3日 星期三

[outlook web app] 無言的超展開

  
    你好阿
  

用outlook web app開的話,會被拆成

  
    
      你好阿
    
  

所以我要的id就不見了
gmail也都不會出現id
結論:email上的id"有可能"會出現,但每一家供應商處理的方式不一定,所以要靠id定位email不可行

[討厭] 被google chrome 陰

我其實不喜歡一直被同步
新電腦我就想keep it simple
所以我一直不想讓我的chrome綁我的google帳號
在新電腦的chrome用了一段時間,就大概有幾個比較常用的站被記錄,到目前為止都還在我的理想中,
就是稍微記錄我的網站習慣,然後不要存太多bookemark什麼的

昨天想到有幾篇文很棒要存到pocket,下載了pocket的 chrome 套件
安裝完後想說要登入
結果不知為何就登入了chrome的使用者!!!!!!!
結果整個瀏覽器都載入了我使用者的設定,我並不想阿!!!!!!!!(載了一堆bookmark)
而且為何要騙我,我以為我是要登入pocket與google帳號的授權登入阿(我的pocket是綁我google帳號)
我整個超氣的,但我之前的經驗是如果刪掉使用者,就連我之前的東西都刪掉
雖然的確沒存什麼,但又要重來覺得非常討厭!!!!
已經這樣被陰了三四次,難到不能登出使用者回到之前的狀態嗎????