升級RobotFramework從3.0到3.1.2

升級後的錯誤訊息會類似這樣:

Variable '${phymemory_tabletr_xpath_prefix}' is string, not list or dictionary, and thus accessing item '2' from it is not possible.
原本的語法如下:
${phymemory_tabletr_xpath_prefix} | Set Variable | //table[@class='deviceTable']/tbody/tr
${speed_or_size_locator} | Set Variable | ${phymemory_tabletr_xpath_prefix}[2]/th[8]
Robot的issue有人和我遇到一樣問題,作者提供在index之前加入反斜線的改法:
 ${phymemory_tabletr_xpath_prefix}[2]/th[8] 
改為
 ${phymemory_tabletr_xpath_prefix}\[2]/th[8]
應該是3.1版本的內容: link

目前作者認為'…'是奇怪的語法,打算在3.2中廢掉它,可以參考issue 3148;而我們最常會遇到的地方是在:For中較長的內容會透過反斜線加'…'去銜接。

另外在3.3要廢掉:FOR語法,改用FOR+END去替代它,可以參考[[https://github.com/robotframework/robotframework/issues/3078|issue 3078。

在FOR LOOP中,這個問題的解法就是使用FOR+END去取代原本的寫法;但不幸地,我目前用1.7.3的RIDE,會幫我把FOR變回:FOR。

因此我決定,等之後再來研究這個問題。

升級後,Log產生海量的Error且使用新版RIDE也會出現大量的類似錯誤,雖然並不會造成測試不會動,但非常礙眼。這個問題是由於新版的RF在你沒有明確指定測試檔案時,它會去掃工作目錄下所有的txt檔案。針對這個問題,我使用過兩個做法:

  1. 指定測試檔案: 我嘗試過使用simple pattern的方式,如[0-9][0-9]_*.txt;但產生報表時,Test Suite名稱會是由所有檔案名稱串起來的,根本難以閱讀。
  2. 把副檔名從txt改為robot: 這做法可以根治這問題,但比較麻煩。

我提供第二種做法細節給大家參考。之所以麻煩,是由於原本使用txt的方式,代表Resource參考方式也是;這意味著除了要修改檔案名稱外,還要修改測試內容。因此,可以參考以下步驟去解決這問題:

  1. 寫一隻程式,列出放測試案例目錄下所有的txt檔案路徑,並寫到檔案中。
  2. Review這隻檔案,排除不需要轉換的項目。
  3. 寫一隻程式,讀取各路徑的檔案內容;以行為處理單位,將Resource開頭的行中,.txt結尾字串取代為.robot。
  4. 寫一隻程式,將各路徑的檔案rename,將附檔名從.txt改為.robot。
  5. 最後就是在你的robot執行命令加上–extension robot,問題解決。