Как выполнять команды selenium-webdriver / protractor в интерактивном режиме в командной строке chrome devtools? - PullRequest
0 голосов
/ 27 декабря 2018

Как:

  • написать незаконченный тест

  • установить точку останова в конце незавершенного теста

  • введите repl / командную строку / chrome devtools

  • выполнить команды селена в repl / командной строке / chrome devtools

1 Ответ

0 голосов
/ 27 декабря 2018

Был в состоянии настроить среду разработки, в которой я могу выполнять действия Selen в Chrome Devtools (в интерактивном режиме)

1. напишите пример теста с точкой останова отладчика в середине

const faker = require('faker')

describe('login', function() {
  this.timeout(30 * 1000)

  describe("when user doesn't exist", () => {
    it.only('should not login', async () => {
      await browser.get(`/login`)

      // debugger breakpoints

      // I'm using `await $('div').getText();` command to force selenium evaluate promise.

      // More about how promises are evaluated in chrome devtools here
      // /12387597/kak-zapustit-asinhronnyi-kod-v-chrome-devtools-kogda-vypolnenie-skripta-priostanovleno

      // use F8 in chrome devtools to execute `await $('div').getText();` and stop on next `debugger` breakpoint
      // use ctrl-[ and ctrl-] to switch between panels in chrome devtools

      debugger; await $('div').getText();debugger; await $('div').getText();debugger; await $('div').getText();debugger; await $('div').getText();debugger; await $('div').getText();debugger; await $('div').getText();debugger; await $('div').getText();debugger; await $('div').getText();debugger; await $('div').getText();debugger; await $('div').getText();debugger; await $('div').getText();debugger; await $('div').getText();debugger; await $('div').getText();

      await $('#gb-email').sendKeys('foo@mail.com')
    })
  })
})
Запустить транспортир в режиме проверки

"test:debug": "node --inspect-brk=0.0.0.0:9229 ./node_modules/.bin/protractor ./config.js",

Перейдите в chrome: // inspect / # devices и нажмите на ссылку inspect для запуска chrome devtools

2018-12-27-20 30 29-screenshot

нажмите f8, чтобы продолжить тестирование и остановиться на первой точке останова

2018-12-27-20 31 37-screenshot

теперь вы можете интерактивно выполнять команды селена в консоли

2018-12-27-20 31 52-screenshot 2018-12-27-20 31 54-screenshot

нажмите f8, чтобы продолжить выполнение ( обещания не могут быть оценены, когда поток приостановлен ), await $('div').getText(); заставит селен выполнять оператор (например, обещания селены - странный тип обещаний)даже await(new Promise((resolve) => { setTimeout(() => { resolve('dummy'); }, 0); })) не заставляет селен выполнять оператор`)

ПРИБЫЛЬ

2018-12-27-20 32 11-screenshot


БОНУС

config.js

exports.config = {
  framework: "mocha",
  baseUrl: process.env.APP_URL,
  seleniumAddress: process.env.HUB_URL,
  specs: ["src/specs/**/*.js"],
  capabilities: {
    browserName: "chrome",

    // https://stackoverflow.com/questions/32740900/webdriverio-selenium-pass-command-line-arguments-into-chrome-from-config-js-file
    chromeOptions: {
      args: [
        // disable chrome's wakiness
        'disable-infobars',
        'disable-extensions',

        // allow http
        'disable-web-security',

        // other
        'lang=en',
        'no-default-browser-check',
        'no-sandbox',

        // not working
        // 'start-maximized',
      ],
      prefs: {
        // disable chrome's annoying password manager
        'profile.password_manager_enabled': false,
        'credentials_enable_service': false,
        'password_manager_enabled': false,

        download: {
          default_directory:   process.env.REMOTE_DOWNLOAD_DIR,
          prompt_for_download: false,
          directory_upgrade:   true,
          extensions_to_open:  '',
        },
        plugins: {
          plugins_disabled: ['Chrome PDF Viewer'], // disable viewing pdf files after download
        },
      },
    },
  },
  onPrepare: function () {
    browser.ignoreSynchronization = true

    // because --start-maximized arg is not working
    browser.driver.manage().window().maximize()

    // patch require function to run babel before loading files
    require("@babel/register")

    // fix regeneratorRuntime is not defined
    // require("@babel/polyfill")
  },
  mochaOpts: {
    enableTimeouts: false,
    file: ['./src/hooks/index.js'],
  },
  allScriptsTimout: 15000,
}

Примечание здесь продублировано https://github.com/angular/protractor/issues/5099#issuecomment-450209485

...