Protractor: Penjelajah elemen tidak berfungsi di Node 8

Dibuat pada 1 Jun 2017  ·  65Komentar  ·  Sumber: angular/protractor

Laporan bug

  • Versi Simpul: 8.0.0
  • Versi Busur Derajat: 5.1.2
  • Versi Sudut: n/a
  • Peramban: Chrome / chromedriver 2.29.0
  • Sistem Operasi dan Versi Mac Sierra 10.12.5
  • File konfigurasi busur derajat Anda n/a

Setelah menginstal node v8.0.0 dan npm v5.0.0, menginstal ulang busur derajat secara global dan menjalankan webdriver-manager update , saya tidak dapat menjalankan protractor --elementExplorer karena saya menerima kesalahan berikut:

protractor --elementExplorer
(node:76684) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
[11:04:10] I/hosted - Using the selenium server at http://localhost:4444/wd/hub
[11:04:11] I/protractor -
[11:04:11] I/protractor - ------- Element Explorer -------
[11:04:11] I/protractor - Starting WebDriver debugger in a child process. Element Explorer is still beta, please report issues at github.com/angular/protractor
[11:04:11] I/protractor -
[11:04:11] I/protractor - Type <tab> to see a list of locator strategies.
[11:04:11] I/protractor - Use the `list` helper function to find elements by strategy:
[11:04:11] I/protractor -   e.g., list(by.binding('')) gets all bindings.
[11:04:11] I/protractor -
module.js:487
    throw err;
    ^

Error: Cannot find module '_debugger'
    at Function.Module._resolveFilename (module.js:485:15)
    at Function.Module._load (module.js:437:25)
    at Module.require (module.js:513:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/usr/local/lib/node_modules/protractor/built/debugger/debuggerCommons.js:1:82)
    at Module._compile (module.js:569:30)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:503:32)
    at tryModuleLoad (module.js:466:12)
    at Function.Module._load (module.js:458:3)

Jika saya kembali ke node 7.10.0 saya tidak mendapatkan kesalahan ini.

PRs plz! needs investigation

Komentar yang paling membantu

Apakah ada rencana dari tim untuk membuat ini berfungsi lagi dengan API inspeksi atau pendekatan lain?

Semua 65 komentar

Saya tidak berpikir kami sedang menguji node 8 sehingga masuk akal bahwa ini mungkin rusak. Terima kasih telah mengemukakan ini!

Saya akan mencoba menggali ini dalam beberapa hari ke depan tetapi PR untuk memperbaikinya akan sangat diterima!

_debugger dan debugger CLI lama telah dihapus di Node 8: https://github.com/nodejs/node/commit/90476ac6ee

Ada pembaruan tentang ini?

Bisakah kami mengetahui apa rencana untuk dukungan Node 8? :)

Dengan Node v8 diatur untuk memasuki LTS pada bulan Oktober, mungkin kita bisa mendapatkan pembaruan?

https://github.com/nodejs/LTS#lts -schedule1

Menurut https://nodejs.org/en/docs/guides/debugging-getting-started/#legacy -debugger ,
tim node.js memigrasikan pengguna ke Inspect API yang baru.

Apakah ada rencana dari tim untuk membuat ini berfungsi lagi dengan API inspeksi atau pendekatan lain?

Saya sudah mulai melihat ke dalam ini. Berikut adalah beberapa tebakan tentang cara kerja pembaruan ini:

Sejauh yang saya tahu, perubahan harus terjadi di debuggerCommons.js

Daripada require('_debugger'); itu perlu menggunakan require('inspector'); ( docs here ). Anda kemudian dapat membuka inspektur, membuat sesi, menyambungkannya, lalu menggunakan session.post dan Chrome DevTools Protocol untuk mengirim pesan guna menambahkan breakpoint.

Saya akan menyelesaikan PR ketika saya punya waktu.

@phenomnomnominal Hei itu bagus! Bolehkah saya tahu kapan Anda tersedia untuk membuat PR? Karena fungsi ini sangat berguna, akan sangat bagus jika dapat segera dibuat. Ini akan sangat mempercepat perkembangan kita.
Terima kasih!

@phenomnomnominal Hai, kami

Hanya apa yang saya uraikan di atas. Tadinya aku berencana untuk membocorkannya malam ini.

@phenomnomnominal itu bagus, terima kasih banyak!

@phenomnomnominal Hai, ada pembaruan sejauh ini?

Saya mulai mencoba, tetapi saya mengalami masalah dengan Selenium ketika mencoba menjalankan tes (ada tips?). Aku akan punya waktu lagi Selasa malam. API baru sangat berbeda, tetapi saya tidak melihat ada masalah nyata.

OK. Terima kasih banyak. Saya seharusnya punya waktu setelah hari Senin, mungkin saya juga bisa memeriksanya setelah itu.

Aku punya... di suatu tempat? Ternyata men-debug debugger tidak semudah yang saya harapkan. @qiyigg apakah Anda memiliki kesempatan untuk melihat sesuatu?

Saya akan memeriksanya hari ini, terima kasih!

Saya akan punya lebih banyak waktu malam ini juga, kita bisa membandingkan catatan nanti.

Hai, ada kemajuan tentang masalah ini dalam seminggu terakhir? Ini masih terjadi.

Untuk debugger/explorer busur derajat, kami memutuskan untuk tidak mendukungnya di node 8.

  1. Debugger/explorer busur derajat terutama dirancang untuk menguji debug dalam aliran kontrol; tetapi aliran kontrol adalah sesuatu yang tidak kami dorong (Terutama kami memiliki async/menunggu asli di node 8) dan pada akhirnya akan ditinggalkan.
  2. Setelah menyelidiki, kami menemukan bahwa mungkin perlu banyak upaya untuk memperbaikinya dan tidak layak dilakukan menurut alasan 1.
  3. Kami sedang berupaya menyediakan dokumen debug baru untuk node 8 menggunakan async/await dan alat pemeriksa chrome asli, yang akan memberikan pengalaman yang lebih baik daripada debugger asli.
  4. @phenomnomnominal Jika Anda memiliki terobosan tentang ini, kami ingin meninjaunya. Terima kasih atas usaha Anda.

Apakah Anda memiliki semacam ETA untuk ini? Kami sedang mencarinya di tempat saya bekerja. Mencoba mengajari beberapa orang tentang pengujian e2e dan kami tidak memiliki cara untuk masuk ke mode debug dan benar-benar mengeksekusi kode dalam konteks di mana kegagalan terjadi. Jika ada cara yang bisa dilakukan di luar ini, beri tahu saya.

@KellyR-STCU
Hai,
Untuk versi simpul <8, Anda dapat menggunakan proses/alat debugging asli.
Untuk versi node >=8, Anda dapat mengikuti proses debugging baru, yang menggunakan async/await asli Node.js untuk menangani panggilan asinkron (sehingga kita tidak perlu bergantung pada aliran kontrol dan debugger lama), dan menggunakan chrome inspector( atau debugger simpul lainnya) untuk di-debug

Kami memiliki beberapa dokumen untuk menjelaskan cara men-debug dengan async/menunggu asli dan inspektur chrome
debugging dengan aliran kontrol dinonaktifkan
cara menggunakan async/menunggu

Semoga membantu

@qiyigg bagaimana dengan

@monkpit itu tidak akan berfungsi di Node 8 karena alasan yang sama. Kami tidak memiliki pengganti yang lengkap untuk itu, tetapi Anda dapat membuka dan menggunakan alat pengembangan chrome selama debugging, itu tidak akan bertentangan dengan debugging busur derajat seperti yang kami temui sebelumnya.

@qiyigg ok, karena fitur elementExplorer adalah fokus masalah, saya akan membiarkannya terbuka.

Solusinya juga sedikit masalah karena memerlukan penulisan ulang tes yang ada karena "Anda tidak dapat menggunakan campuran async/menunggu dan aliran kontrol". Alangkah baiknya jika Anda dapat menentukan pendekatan mana yang harus diambil per tes sehingga peralihan tidak memerlukan pembaruan semua tes yang ada.

@uriah-ascend
ya, saya harus mengakui bahwa itu bukan solusi yang sempurna. Tetapi seperti yang saya sebutkan di atas, aliran kontrol adalah sesuatu yang pada akhirnya akan dihapus . Mengonversi pengujian kami ke async/menunggu adalah sesuatu yang harus kami lakukan secara bertahap, dan itu memberi kami pengalaman debug yang lebih baik.
Saya kira salah satu cara yang dapat Anda lakukan adalah memiliki konfigurasi pengujian terpisah untuk pengujian baru, dan kemudian mengonversinya secara bertahap.

@qiyigg apakah ada panduan atau dokumentasi cara mengonversi ke async/menunggu?

Info yang cukup bagus di dua tautan yang dia berikan berjudul debugging dengan aliran kontrol dinonaktifkan dan
cara menggunakan async/menunggu

Yang kedua mungkin lebih merupakan langkah demi langkah untuk konversi.

Setelah mengalami masalah dengan browser.pause() pada Node 8.

Saya mengikuti Disabled Control Flow .

Alih-alih menjalankan node --inspect-brk bin/protractor <config_file> dan melakukan debugging di browser, saya menggunakan node inspect $(which protractor) <config_file> diikuti oleh debug> cont di terminal.

Sekarang saya memiliki browser.pause() setara.

yaitu gunakan debugger sebagai ganti browser.pause()

Hanya untuk memeriksa: kami memiliki basis kode busur derajat yang besar, yang tidak dapat dikonversi ke async/menunggu sekaligus. Cara yang baik untuk melakukannya adalah dengan terlebih dahulu mengonversi semua tindakan busur derajat "async" menggunakan rantai janji, bukan? Dengan cara ini semuanya akan berfungsi apakah aliran kontrol diaktifkan atau tidak.
Terima kasih !

Rantai janji akan berfungsi apakah aliran kontrol diaktifkan atau tidak, tetapi terkadang agak berantakan dan Anda mungkin ingin mengubahnya kembali ke async/menunggu suatu hari nanti?
Jadi saran saya adalah memiliki dua konfigurasi terpisah untuk saat ini, masukkan tes baru/tes yang dikonversi ke konfigurasi baru yang menonaktifkan control_flow dan singkirkan yang lama secara bertahap

Masalahnya adalah kami berbagi banyak fungsi di antara pengujian, jadi jika kami memigrasikan fungsi ini ke async menunggu, kami akan merusak semua pengujian yang menggunakannya dan yang belum dimigrasikan ke async menunggu (petunjuk: BANYAK). Dan jika kita menyimpan dua versi dari fungsi yang sama, kita berisiko membuat keduanya berbeda.
Jadi menurut saya kita memindahkan semuanya ke rantai janji sebagai langkah perantara sebelum pindah ke async/menunggu, atau kita mengatur babel untuk mengubah basis kode pengujian kita (menggunakan sesuatu seperti itu: https://stackoverflow.com/questions/ 28708975/transpile-async-await-proposal-with-babel-js ?), sehingga kita dapat menulis async/menunggu dan mengubahnya menjadi sesuatu yang dapat dijalankan dengan aliran kontrol atau tanpa aliran kontrol.
Apakah ada yang tahu jika ini telah dilakukan sebelumnya?
Bagaimanapun, tampaknya merupakan ide yang baik untuk memberikan jalur migrasi untuk basis kode besar pada readme...

Masuk akal, sebenarnya kami memikirkannya baru-baru ini.
Saya telah berbicara dengan tim internal yang memigrasi basis kode besar ke async/menunggu.
Mereka menemukan bahwa itu akan memperkenalkan bug halus dan kondisi balapan jika mereka mengubah utilitas umum menjadi rantai janji dan mereka sudah menyerah untuk melakukan itu.
Mereka memang menyalin beberapa utilitas umum dan menerjemahkannya ke dalam async/menunggu. Saya tidak tahu apakah itu solusi terbaik, tetapi seperti yang Anda sebutkan, itu akan memiliki beberapa risiko yang berbeda
Kami juga sedang mengerjakan beberapa alat migrasi untuk membuatnya lebih mudah, tetapi alat tersebut mungkin tidak akan berfungsi secara eksternal.

Bagaimanapun, kami sedang mengerjakan rencana migrasi baru-baru ini, dan harus memberikan beberapa saran migrasi di suatu tempat dalam waktu dekat.

Terima kasih atas balasan Anda, senang mengetahui bahwa itu adalah masalah
sedang diperiksa!
Saya pikir itu akan menjadi ide yang baik untuk membuat masalah khusus tentang bagaimana
migrasikan basis kode besar, sehingga orang-orang melihatnya sedang dikerjakan.

Le 16 janv. 2018 19:58, "qiyi" [email protected] a écrit :

Masuk akal, sebenarnya kami memikirkannya baru-baru ini.
Saya telah berbicara dengan tim internal yang memigrasi basis kode besar ke
asinkron/menunggu.
Mereka menemukan bahwa itu akan memperkenalkan bug halus dan kondisi balapan jika mereka
mengubah utilitas umum menjadi rantai janji dan mereka sudah menyerah untuk melakukan itu.
Mereka memang menyalin beberapa utilitas umum dan menerjemahkannya ke dalam async/menunggu. Saya
tidak tahu apakah itu solusi terbaik, tetapi seperti yang Anda sebutkan, itu akan
memiliki beberapa risiko yang berbeda
Kami juga sedang mengerjakan beberapa alat migrasi untuk membuatnya lebih mudah, tetapi
alat mungkin tidak akan bekerja secara eksternal.

Bagaimanapun, kami sedang mengerjakan rencana migrasi baru-baru ini, dan harus memberikan beberapa
saran migrasi di suatu tempat dalam waktu dekat.


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/angular/protractor/issues/4307#issuecomment-358068096 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AHHOgiLEdFS-xZVcOKmO1EB-CID53cryks5tLPFagaJpZM4NtM1n
.

Halo kawan-kawan! Ada solusi?

protractor - 5.2.2
nodejs - 9.3
protractor --elementExplorer
(node:72438) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
[19:15:43] I/local - Starting selenium standalone server...
[19:15:44] I/local - Selenium standalone server started at http://172.29.148.101:58279/wd/hub
[19:15:45] I/protractor -
[19:15:45] I/protractor - ------- Element Explorer -------
[19:15:45] I/protractor - Starting WebDriver debugger in a child process. Element Explorer is still beta, please report issues at github.com/angular/protractor
[19:15:45] I/protractor -
[19:15:45] I/protractor - Type <tab> to see a list of locator strategies.
[19:15:45] I/protractor - Use the `list` helper function to find elements by strategy:
[19:15:45] I/protractor -   e.g., list(by.binding('')) gets all bindings.
[19:15:45] I/protractor -
module.js:557
    throw err;
    ^

Error: Cannot find module '_debugger'
    at Function.Module._resolveFilename (module.js:555:15)
    at Function.Module._load (module.js:482:25)
    at Module.require (module.js:604:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/usr/local/lib/node_modules/protractor/built/debugger/debuggerCommons.js:1:82)
    at Module._compile (module.js:660:30)
    at Object.Module._extensions..js (module.js:671:10)
    at Module.load (module.js:573:32)
    at tryModuleLoad (module.js:513:12)
    at Function.Module._load (module.js:505:3)
[19:15:45] I/local - Shutting down selenium standalone server.
MB-219751:~ olekh$ 

Juga mengalami Error: Cannot find module '_debugger' , OSX.

Masalah ini telah terbuka selama hampir satu tahun. Masih belum ada kemajuan?

@ajklotz Saya dapat mengonfirmasi bahwa itu masih hanya berfungsi dengan Node 7. Saya telah menggunakan nvm untuk beralih di antara versi Node untuk menggunakan elemen explorer. Ini menyakitkan, tetapi berhasil!

@ajklotz @monkpit @mraible Jika Anda dapat menjalankan dengan Node 8 atau lebih tinggi, saya sarankan Anda mencoba melakukan hal berikut:

  1. Tonton video ini "Protractor: A New Hope" https://youtu.be/6aPfHrSl0Qk?t=1051 , khusus mulai sekitar pukul 17:31
  2. Beralih menggunakan Node 8 atau lebih tinggi
  3. Konversikan pengujian Anda untuk menggunakan kata kunci async/await ES2017: https://github.com/angular/protractor/blob/master/docs/async-await.md
  4. Tambahkan SELENIUM_PROMISE_MANAGER: false, ke busur derajat Anda.conf.js
  5. Gunakan fungsi debugger dan gunakan inspektur chrome untuk men-debug: https://github.com/angular/protractor/blob/master/docs/debugging.md#disabled -control-flow

Saya telah melakukan ini dengan tes Busur Derajat saya sendiri dan mengonfirmasi bahwa itu berfungsi.

@ajklotz @monkpit @mraible Berikut adalah contoh di mana saya mengonversi tes Busur Derajat untuk menggunakan async/menunggu: https://github.com/buildbot/buildbot/pull/4074/files

Apa pun yang mengembalikan Janji, Anda menempelkan await di depannya seperti:

  • .click()
  • .browser.wait()
  • .browser.get()
  • .getText()

Jika suatu fungsi memiliki panggilan ke await , maka tanda tangan fungsi harus memiliki async di depannya.

Jika Anda memanggil fungsi dengan async , maka Anda harus await itu.

Butuh beberapa saat tetapi begitu Anda melakukannya, maka itu berhasil.

@rodrigc Area pengujian saya sudah menggunakan async/menunggu, inti dari masalah ini adalah dari baris perintah, protractor --elementExplorer tidak berfungsi kecuali Anda menggunakan node 7.

FWIW, sepertinya fitur bahasa seperti async/await seharusnya tidak relevan. Mungkin swap sebagai perbaikan stop-gap masuk akal, tetapi Busur Derajat tidak menyiratkan ketergantungan pada gaya itu.

@monkpit Ya Anda benar sekali. Akar penyebab masalah Anda adalah bahwa pada baris ini: https://github.com/angular/protractor/blob/master/lib/debugger/debuggerCommons.js#L1 , modul _debugger diimpor, yang tidak tersedia di node8. Apa pun yang menggunakan debuggerCommons.js dengan demikian tidak akan berfungsi pada node8, termasuk elementExplorer .

Jadi, jika Anda ingin menggunakan node8 atau lebih tinggi dan men-debug dengan busur derajat, kuncinya adalah menggunakan async/await dan ikuti langkah-langkah di: https://github.com/angular/protractor/blob/master/docs/ debug.md

Hal-hal debug lama tidak akan berfungsi.

Entah itu tidak akan diperbaiki (tidak apa-apa, saya bisa menggunakan solusinya) atau akan diperbarui untuk menggunakan node 8+ (itu juga baik-baik saja). Tetapi saya ingin melihat tanggapan resmi dengan satu atau lain cara.

@monkpit

Saya rasa jawabannya ada di komentar @qiyigg ini.

Untuk debugger/explorer busur derajat, kami memutuskan untuk tidak mendukungnya di node 8...

Dari apa yang saya dengar dari @qiyigg ketika saya berbicara dengannya, fokus tim saat ini terletak pada _menonaktifkan aliran kontrol dalam tes Busur Derajat_.

Saya akan menutup masalah ini untuk saat ini. Itu masih terbuka untuk diskusi.

@qiyigg Saya sudah mulai menggunakan debugger dengan inspektur chrome, dan node8 dan berfungsi dengan baik.

Bisakah tim busur derajat mulai menandai dokumentasi untuk kode debug lama yang menggunakan debuggerCommon.js sebagai DEPRECATED ? Saya setuju dengan @monkpit bahwa hal-hal yang agak membingungkan sekarang di mana kode tidak bekerja dengan node8, tetapi tidak ditandai sebagai usang. Pada akhirnya kode debug lama ini harus dihapus saja jika tidak akan pernah diperbaiki dengan node8.

Jika Anda melihat dokumen debugging, kami telah menyebutkan bahwa debugger tidak akan berfungsi pada Node 8
https://github.com/angular/protractor/blob/master/docs/debugging.md#enabled -control-flow
"Catatan: Debugger busur derajat dan penjelajah elemen tidak dapat digunakan untuk Node.js 8+"

Satu hal yang perlu diingat adalah: tidak semua orang menggunakan Node 8+, kami tidak dapat mengatakan bahwa debugger tidak digunakan lagi dan memaksa semua orang untuk menggunakan async/menunggu (Meskipun kami akan melakukannya di dalam google).

Rupanya, pindah ke Node 8+ dan async/await memiliki banyak manfaat dan pada akhirnya kita harus pindah ke sana, tetapi itu bukan pekerjaan mudah karena kita harus mengubah banyak kode yang ada. Kami sedang mengerjakan ini di dalam google dan mencoba mengumpulkan lebih banyak pengalaman tentang migrasi (bahkan alat migrasi) dan berharap ini juga dapat membantu pengguna di luar google pada akhirnya.

Saya pikir apa yang bisa kita lakukan sekarang adalah membuat kesalahan ini lebih jelas, katakanlah, berikan pengecualian: elemen explorer/debugger tidak didukung untuk Node 8+ alih-alih "Kesalahan: Tidak dapat menemukan modul '_debugger'", PR akan sangat disambut.

@qiyigg Saya akan menyarankan untuk membuat peringatan itu dalam huruf tebal dan ALL CAPS . Agak sulit untuk menangkap halaman itu, karena ada banyak kata.

saya sangat senang dengan debugger baru karena saya dapat menggunakan intellij untuk menjalankan tes saya. ini jauh lebih baik daripada penjelajah elemen (yang lebih saya sukai) tetapi menggunakan IDE saya untuk men-debug tes adalah kemenangan besar.

@qiyigg Saya bekerja di perusahaan yang membuat pinter produksi besar. Karena kami mengubah semua UI kami untuk menggunakan Angular (hore!), kami memutuskan untuk menggunakan Protractor untuk tes UI E2E (juga hore). Terlepas dari tes E2E ini, kami juga memiliki tes ujung ke ujung yang bekerja pada sistem yang berjalan sebenarnya. Semua kasus pengujian untuk sistem pengujian tersebut ditentukan dalam kerangka pengujian Microsft TFS dan kami menggunakan DSL untuk menulisnya. DSL ini memuat objek halaman yang kami tulis untuk UI kami melalui busur derajat yang dimulai secara interaktif (jadi penjelajah elemen) dan memanggil metode pada objek tersebut untuk menjalankan pengujiannya.

Sejauh ini bagus, Anda akan mengatakan, kami memiliki ribuan tes ini dan mereka benar-benar berjalan "sebagai pengguna". Apa yang saya dapatkan dari percakapan ini adalah bahwa elemen explorer dijatuhkan dengan node baru (dan node baru wajib untuk memutakhirkan Angular). Ini juga berarti bahwa tiba-tiba seluruh basis pengujian kami akan berhenti bekerja.

Saya mendapatkan perubahan dengan async / wait dan kami akan menulis ulang objek halaman kami dengan jelas untuk mendukungnya, tetapi tidak ada alternatif nyata untuk memasukkan perintah busur derajat dari jarak jauh, bukan? Saya akan selalu harus lulus dalam "tes" yang hanya memanggil "debugger", dan kemudian langsung berkomunikasi dengan chrome untuk memanggil perintah pada objek halaman saya dan kemudian menjalankan ke panggilan "debugger" berikutnya yang mungkin harus saya jalankan dalam loop sementara.

Apakah skenario seperti ini tidak didukung? Bukankah begitu? Atau apakah saya hanya melewatkan sesuatu ... Bagi saya, kesalahan debug dalam pengujian/kode Anda sama sekali berbeda dari menginstruksikan perintah pengujian dari jarak jauh. Yang terakhir adalah sesuatu yang digunakan explorer elemen untuk memfasilitasi :)

Untuk setidaknya membagikan apa solusi saya saat ini, saya telah menulis tes ini, yang merupakan satu-satunya tes sistem yang saya jalankan dengan busur derajat (CompletableFuture jelas merupakan kelas pembantu):

jasmine.DEFAULT_TIMEOUT_INTERVAL = 3600000; // arbitrary large timeout
(global as any).systemTestsDone = new CompletablePromise<void>();

describe('TestHelper', () => {
  it('should provide a way to interactively run tests', async () => {
    await (global as any).systemTestsDone;
  });
});
node --inspect .\node_modules\protractor\bin\protractor .\systemTests\protractor.conf.js

Tes ini kemudian terus berjalan saat saya menghubungkan klien (C#) WS saya yang bertindak sebagai jembatan antara spesifikasi pengujian, dan objek halaman. Bridge ini kemudian menginstruksikan browser untuk memuat objek halaman dan pengujian mulai dijalankan.

Perintah terakhir yang saya kirim ke browser tentu saja

global.systemTestsDone.complete()

sehingga tes selesai secara normal. Saya tidak berpikir ini benar-benar mengerikan, satu-satunya hal yang aneh adalah saya sekarang harus menyalahgunakan tes untuk masuk ke mode interaktif. Jika lebih banyak orang kehilangan fungsionalitas seperti ini, mungkin ide yang baik untuk memasukkannya ke dalam busur derajat lagi. Maksud saya bukan seluruh protokol devtools tetapi opsi untuk membiarkan busur derajat berjalan saat Anda, misalnya, menggunakan konsol chrome atau kode studio visual sebagai "penjelajah elemen".

tambahkan @vikerman , yang akan mengambil alih hal-hal

@vikerman Haruskah saya membuat permintaan fitur dari komentar di atas?

Singkatnya, apa yang ingin saya miliki di busur derajat (karena --elementExplorer tidak lagi berfungsi dengan versi node.js terbaru) adalah mode yang baru saja memulai busur derajat, mengabaikan file spesifikasi dan terus berjalan hingga beberapa metode manual memanggil (sesuatu seperti protractor.exit() ?). Kita dapat memulai busur derajat dalam mode ini dengan node --inspect , memuat beberapa objek halaman dan menghubungkan pelari pengujian eksternal ke protokol debugger dan menjalankan pengujian secara interaktif.

ini akan sangat bagus jika seseorang memperbaikinya. Saat ini saya menggunakan nvm sebagai solusi.
saya menggunakan nvm untuk menginstal node 7.10.1 dan menjalankan elementExplorer dari sana.
sedikit solusi yang lemah tetapi berhasil untuk saat ini

Saya menurunkan versi ke node v6 agar ini berfungsi dan sekarang saya tidak dapat menjalankan aplikasi Angular 6 saya karena node 6 tidak didukung di Angular 6+. Sepertinya Angular sekarang menargetkan node >= 8.9.0.

Apakah ada pekerjaan bagus yang bisa saya ikuti untuk mendapatkan REPL busur derajat tanpa harus menjalankan dua versi simpul?

Saya mengalami kesalahan yang sama di konsol. Saya mengikuti instruksi yang diberikan di sini
https://github.com/angular/protractor/blob/master/docs/debugging.md#enabled -control-flow

tapi masih kesalahan yang sama akan datang

Jadi apakah ini akhir dari browser.pause() / browser.debugger()? Tampaknya kita harus menjauh dari aliran kontrol dan menggunakan debugger node.
https://github.com/angular/protractor/blob/master/docs/debugging.md

Menggunakan NVM untuk beralih ke node versi 7.10.1 memperbaiki masalah browser.pause() untuk saya.

Saya mengerti bahwa async/menunggu adalah jalan ke depan, dan menggunakan Webstorm untuk men-debug tes dengan breakpoint benar-benar mulus, tetapi di mana saya merasa tidak adanya elementExplorer adalah penggunaan yang diperpanjang dalam paket elemen , yang merupakan cara yang menyenangkan untuk menguji bagian secara interaktif kode dengan cepat (dalam omnibox) alih-alih menjalankan seluruh tes dari awal.
Dengan proses debugging yang diberikan untuk nodejs 8+, perintah dari konsol tidak menyelesaikan janji saat inspektur dijeda di breakpoint, yang saya sadari kontra-intuitif, tetapi semua ini berarti peningkatan halus dalam waktu yang dihabiskan untuk menulis/ tes debug, dan hilangnya fitur yang banyak digunakan (berdasarkan jumlah respons di utas ini).
Apakah ada rencana untuk mengganti fitur elementExplorer lama di busur derajat?

@woppa684 Saran bekerja dengan baik untuk saya. Terima kasih @woppa684. Saya baru saja pindah ke node 10+ yang memiliki repl-wait (jadi Anda bisa menunggu di konsol)

Menambahkan semua file konfigurasi saya untuk referensi, semoga membantu seseorang:

Spesifikasi debug interaktif khusus - interactive.e2e.ts

import { LoginPage } from './src/pages/login.po';
import { AppPage } from './src/pages/app.po';
import { SwitchProfileSideSheet } from './src/side-sheets/switch-profile-side-sheet.po';
import { sel } from '../src/testing/get-component';

const login = new LoginPage();
const app = new AppPage();
const switchProfileSideSheet = new SwitchProfileSideSheet();

// add my own page objects to the global object so I can use them interactively.
global['sel'] = sel;
global['po'] = {
  login,
  app,
  switchProfileSideSheet,
};

(global as any).systemTestsDone = new Promise(function(_resolve, _reject) {
  global['finishInteractiveDebug'] = _resolve;
});

describe('TestHelper', () => {
  it('should provide a way to interactively run tests', async () => {
    await (global as any).systemTestsDone;
  });
});

package.json

    "e2e-interactive": "node --experimental-repl-await --inspect-brk ./node_modules/.bin/protractor ./e2e/protractor.interactive.conf",

busur derajat.interactive.conf.js

// Protractor configuration file, see link for more information
// https://github.com/angular/protractor/blob/master/lib/config.ts

// standard protractor config
const baseConfig = require('./protractor.conf');
const configCopy = Object.assign({}, baseConfig.config);

const oneDayInMilliSeconds = 1000 * 60 * 60 * 24;
// set timeout to a huge number
// so it's not an issue when we pause in the debugger
configCopy.allScriptsTimeout = oneDayInMilliSeconds;
configCopy.jasmineNodeOpts.defaultTimeoutInterval = oneDayInMilliSeconds;
// just load our interactive specs
configCopy.specs = ['./interactive.e2e.ts'];

console.log('interactive config', configCopy);
exports.config = configCopy;

Saya menggunakan browser.sleep(100000) alih-alih browser.pause()

Apakah halaman ini membantu?
0 / 5 - 0 peringkat