Можете ли вы определить каталог 'page_objects_path', который будет читать из всех подпапок, не указывая их явно? - PullRequest
0 голосов
/ 14 апреля 2020

В проекте, над которым я сейчас работаю, используются Selenium WebDriver Nightwatch и Cucumber.

Проблема в том, что структура папок проекта изменилась и теперь 'page_objects_path' в ' Файл nightwatch.conf. js ' выглядит примерно так:

'page_objects_path':
    [
        "./componentTests/page-objects",
        "./componentTests/page-objects/xxxxxx",
        "./componentTests/page-objects/xxxxx xxxx",
        "./endToEndTests/page-objects",
        "./endToEndTests/page-objects/xxxx",
        "./endToEndTests/page-objects/xxxxxxx",
        "./endToEndTests/page-objects/xxxx xxxxx",
        "./endToEndTests/page-objects/xxxxxx"
        "./endToEndTests/page-objects/xxxxxxxxxx"
    ],

Есть ли способ, при котором Nightwatch может читать все подпапки из каталога / page-objects /, без явного указания в массиве как отдельные пути?

1 Ответ

0 голосов
/ 14 апреля 2020

Я считаю, что

'page_objects_path':
    [
        "./componentTests/page-objects",
        "./endToEndTests/page-objects",
    ],

должно быть достаточно. Класс page должен иметь подклассы, вызываемые подпапками вашей структуры. Например, метод getTheCoolElement() из "./endToEndTests/page-objects/mainPage/SubPage.js" должен называться следующим образом: browser.page.mainPage.SubPage().getTheCoolElement()

См. Рабочий пример в проекте owncloud Phoenix, который имеет иерархию объектов страницы: https://github.com/owncloud/phoenix/tree/master/tests/acceptance/pageObjects

в качестве альтернативы вы можете просто создать этот массив программно, используя JS. например,

const fs = require('fs')
// const path = require('path')

const getAllFolders = function (dirPath, arrayOfFiles) {
  const files = fs.readdirSync(dirPath)

  arrayOfFiles = arrayOfFiles || []

  files.forEach(function (file) {
    if (fs.statSync(dirPath + '/' + file).isDirectory()) {
      arrayOfFiles = getAllFolders(dirPath + '/' + file, arrayOfFiles)
      arrayOfFiles.push(path.join(dirPath, '/', file))
    }
  })

  return arrayOfFiles
}

let allPageObjectPath = getAllFolders(
  path.join(__dirname, '/componentTests/page-objects')
)
allPageObjectPath = allPageObjectPath.concat(
  getAllFolders(path.join(__dirname, '/endToEndTests/page-objects'))
)

module.exports = {
  page_objects_path: allPageObjectPath,
....
}
...