iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
Modern Web

自動化 End-End 測試 Nightwatch.js系列 第 14

自動化 End-End 測試 Nightwatch.js 之踩雷筆記:Page Objects

  • 分享至 

  • xImage
  •  

關於 Nightwatch.js 的 Page Objects 其實 google 就可以找到很多教學,包含之前的鐵人賽就有了

不過既然叫踩雷筆記,重點還是在我遇到的一些小問題。

介紹 Page Object

Page Objects 其實是可以利用 js 先針對某一個頁面裡面的物件先設定好它的 selector,並且加上一些 function,如此就可以在不同的測試檔案中,共同呼叫這個 Page object,以降低程式碼的重複使用率。

nightwatchConfig

設定 page object 要放的位置

const nightwatchConfig = {
    page_objects_path: './page',
}

Page object 實例

var commands = {
  search: function({text}) {
      this.click('input')
          .setValue(input, text)
          .click('button')
  }
}

Page object 裡的 command 是可以使用 nightwatch 的 api,也可以使用客製化的 command

module.exports = {
  url: `https://ithelp.ithome.com.tw/`,
  commands: [commands],
  elements: {
    postBtn: {
      selector: 'button[data-target="#ir-select-series__common"]',
    },
  }
}

定義想要的 url, elements 就可以在 test file 中使用:

const dashboard = browser.page.dashboard();
dashboard.click('@postBtn')

另外也可以用客製化 command

const dashboard = browser.page.dashboard();
dashboard.clickDiv('@postBtn')

也可以串接:

const dashboard = browser.page.dashboard();
dashboard
    .clickDiv('@postBtn')
    .search({text: 'Hi'})

雷點

Page object 是不能用 url/refresh/windowHandles 的XD

因此像這樣都是不行的喔~

const dashboard = browser.page.dashboard();
dashboard.url('www.google.com')
dashboard.refresh()
dashboard.windowHandles(function(result) {
      // Do something
    })

上一篇
自動化 End-End 測試 Nightwatch.js 之踩雷筆記:上傳檔案II
下一篇
自動化 End-End 測試 Nightwatch.js 之踩雷筆記:getCssProperty()
系列文
自動化 End-End 測試 Nightwatch.js30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言