2016年8月4日 星期四

isPageObj is not a function


isPageObj is not a function 嘛...看到這種錯誤都有點頭痛,
因為isPageObj並不是知名library裡的function
單純只是公司其他同事寫的東西

發生原因是因為公司主站使用了公司自己寫的framwork,有其搭配的library
但目前其他站都不是使用這個framwork,兩者引用的外部library檔非常不同
今天我的任務是要用公司的framwork來開發其他站,
而當我正在視探性的把主站使用的library用到其他站後出現了這個問題

在google "is not a function"一番後常見的有jquery conflict會有類似的問題,或像是哪個library順序錯誤之類的
隱約記得出現is not a function雖然紅線或是重點會放在isPageObj這個字詞上
但印象中會出問題的是他前面一個東西

以這次例子是_.isPageObj,直覺應該是那個_出問題
於是就先設中斷點在isPageObj所在的function裡,然後就看_跟live的code有沒有不一樣
果然就看到在dev裡的_是underscore的東西,而live裡的_是我們公司自己framework的東西
所以最後去看header,主站的確沒有再使用underscore等其他library了,而我眼殘沒看到,所以移掉後就成功了了




==============
昨天突然遇到一個以前遇過的問題,但自認為是很白癡的議題所以一直沒筆記下來,
但再次遇到時還是不禁需要一點時間再回想...早知道就寫下來了
或是像之前每天與selenium為伍,但開發完後過一陣子再回來摸時,竟然非常陌生,當初還覺得已經熟到不會忘了...

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%後拼拼湊湊之前的東西就可以完成
但還是會落東落西忘了哪個東西就一直報錯,
集中精神阿(打臉)~