Protractor: 倱敗EPIPE曞き蟌みEPIPEは、SELENIUM_PROMISE_MANAGERの堎合に頻繁に芋られたすfalse

䜜成日 2017幎05月17日  Â·  47コメント  Â·  ゜ヌス: angular/protractor

バグレポヌト

  • ノヌドバヌゞョン 6.9.1
  • 分床噚バヌゞョン 5.1.2
  • Angularバヌゞョン 4.0.0
  • ブラりザ Chrome Version 57.0.2987.133 (64-bit)
  • オペレヌティングシステムずバヌゞョンOS X Version 10.10.5 (14F2315)
  • 分床噚構成ファむル
// Protractor configuration file, see link for more information
// https://github.com/angular/protractor/blob/master/docs/referenceConf.js

/* Third-party */
let HtmlScreenshotReporter = require('protractor-jasmine2-screenshot-reporter');
let JUnitXmlReporter = require('jasmine-reporters').JUnitXmlReporter;
let SpecReporter = require('jasmine-spec-reporter').SpecReporter;

/* Custom */
let setup = require('./e2e/setup/setup');

exports.config = {
  allScriptsTimeout: 11000,
  specs: [
    './e2e/**/*.e2e-spec.ts'
  ],
  capabilities: {
    'browserName': 'chrome'
  },
  directConnect: true,
  baseUrl: 'http://localhost:4200/',
  SELENIUM_PROMISE_MANAGER: false,
  framework: 'jasmine',
  jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 30000,
    print: function() {}
  },
  useAllAngular2AppRoots: true,
  beforeLaunch: function() {
    require('ts-node').register({
      project: 'e2e'
    });
  },
  onPrepare: function() {
    jasmine.getEnv().addReporter(new SpecReporter());
    jasmine.getEnv().addReporter(new JUnitXmlReporter({
      consolidateAll: true,
      savePath: browser.params.output || 'protractor/log',
      filePrefix: 'protractor_output'
    }));
    jasmine.getEnv().addReporter(new HtmlScreenshotReporter({
      cleanDestination: true,
      dest: 'protractor/log',
      filename: 'index.html'
    }));
    setup();
  }
};
  • 関連するテスト䟋
import { browser } from 'protractor';

import { A2Page } from './app.po';
import { NavPartial } from './nav/nav.po';
import { SettingsPage } from './settings/settings.po';
import { Utils } from './utils';

let utils = new Utils();

describe('a2 root', function() {
  let page: A2Page = new A2Page();
  let navPartial: NavPartial = new NavPartial();
  let settingsPage: SettingsPage = new SettingsPage();

  it('should be able to navigate to', () => {
    return page.navigateTo();
  });

  it('should take user to Settings', () => {
    return settingsPage.getTitle().then(title => {
      return expect(title).toEqual('Title');
    }).then(() => {
      return settingsPage.getSubtitle();
    }).then(subtitle => {
      return expect(subtitle).toEqual('Subtitle');
    });
  });

  it('should have a Home menu', () => {
    return page.navigateTo().then(() => {
      return navPartial.isHomePresent();
    }).then(present => {
      return expect(present).toBeTruthy();
    });
  });

  it('should have an Info menu', () => {
    return page.navigateTo().then(() => {
      return navPartial.isInfoPresent();
    }).then(present => {
      return expect(present).toBeTruthy();
    });
  });
});
  • テストの実行からの出力
$ npm run e2e -- --params.baseUrl 'https://myurl'

> [email protected] pree2e /Users/me/a2
> webdriver-manager update

[13:56:14] I/update - chromedriver: file exists /Users/me/a2/node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver_2.29.zip
[13:56:14] I/update - chromedriver: unzipping chromedriver_2.29.zip
[13:56:14] I/update - chromedriver: setting permissions to 0755 for /Users/me/a2/node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver_2.29
[13:56:14] I/update - chromedriver: chromedriver_2.29 up to date
[13:56:14] I/update - selenium standalone: file exists /Users/me/a2/node_modules/protractor/node_modules/webdriver-manager/selenium/selenium-server-standalone-3.4.0.jar
[13:56:14] I/update - selenium standalone: selenium-server-standalone-3.4.0.jar up to date
[13:56:14] I/update - geckodriver: file exists /Users/me/a2/node_modules/protractor/node_modules/webdriver-manager/selenium/geckodriver-v0.16.1.tar.gz
[13:56:14] I/update - geckodriver: unzipping geckodriver-v0.16.1.tar.gz
[13:56:14] I/update - geckodriver: setting permissions to 0755 for /Users/me/a2/node_modules/protractor/node_modules/webdriver-manager/selenium/geckodriver-v0.16.1
[13:56:14] I/update - geckodriver: geckodriver-v0.16.1 up to date

> [email protected] e2e /Users/me/a2
> $(npm bin)/protractor "--params.baseUrl" "https://myurl"

[13:56:16] I/launcher - Running 1 instances of WebDriver
[13:56:16] I/direct - Using ChromeDriver directly...
Spec started

  a2 root
    ✓ should be able to navigate to
    ✓ should take user to Settings
    ✓ should have a Home menu
    ✗ should have an Info menu
      - Failed: EPIPE write EPIPE

**************************************************
*                    Failures                    *
**************************************************

1) a2 root should have an Info menu
  - Failed: EPIPE write EPIPE

Executed 4 of 4 specs (1 FAILED) in 22 secs.
[13:56:41] I/launcher - 0 instance(s) of WebDriver still running
[13:56:41] I/launcher - chrome #01 failed 1 test(s)
[13:56:41] I/launcher - overall: 1 failed spec(s)
[13:56:41] E/launcher - Process exited with error code 1

npm ERR! Darwin 14.5.0
npm ERR! argv "/Users/me/.nvm/versions/node/v6.9.1/bin/node" "/Users/me/.nvm/versions/node/v6.9.1/bin/npm" "run" "e2e" "--" "--params.baseUrl" "https://myurl"
npm ERR! node v6.9.1
npm ERR! npm  v3.10.8
npm ERR! code ELIFECYCLE
npm ERR! [email protected] e2e: `$(npm bin)/protractor "--params.baseUrl" "https://myurl"`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] e2e script '$(npm bin)/protractor "--params.baseUrl" "https://myurl"'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the a2 package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     $(npm bin)/protractor "--params.baseUrl" "https://myurl"
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs a2
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls a2
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /Users/me/a2/npm-debug.log

たた、npm-debug.logからの抜粋

18 verbose stack Exit status 1
18 verbose stack     at EventEmitter.<anonymous> (/Users/me/.nvm/versions/node/v6.9.1/lib/node_modules/npm/lib/utils/lifecycle.js:255:16)
18 verbose stack     at emitTwo (events.js:106:13)
18 verbose stack     at EventEmitter.emit (events.js:191:7)
18 verbose stack     at ChildProcess.<anonymous> (/Users/me/.nvm/versions/node/v6.9.1/lib/node_modules/npm/lib/utils/spawn.js:40:14)
18 verbose stack     at emitTwo (events.js:106:13)
18 verbose stack     at ChildProcess.emit (events.js:191:7)
18 verbose stack     at maybeClose (internal/child_process.js:877:16)
18 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)
  • バグを再珟する手順
  1. 前述のNodeバヌゞョンずAngularバヌゞョン、Chromeブラりザ、堎合によっおはMac OS Xをおおよそ䜿甚しおくださいその組み合わせにどの皋床具䜓的な問題があるかはただわかりたせん。
  2. 構成SELENIUM_PROMISE_MANAGER: falseを蚭定したす制埡フロヌを無効にしたす。
  3. 䞊蚘の2により、テストスむヌトのあらゆる堎所でpromiseを䜿甚したす。
  4. いく぀かのテストのそれぞれに぀いお、URLを取埗し、芁玠の存圚をクリックたたはチェックするスむヌトを甚意したす。
  5. すぐにFailed: EPIPE write EPIPE゚ラヌが予期せず発生し始めたす。

私はawaitを䜿甚しおいたせん。 䞀郚のコメントで提案されおいたすが、テストコヌドでも未凊理のpromiseを特定できたせんpromiseの経隓もありたす。その可胜性を考慮に入れる必芁がありたす。 それでも、その堎合、ノヌドが未凊理の玄束でクラッシュするのは驚くべきこずです。 したがっお、テスト、分床噚、Webドラむバヌなどに問題があるこずに加えお、ここのどこかにノヌドのバグがあるようです。

  • テストを実行しおいるURL該圓する堎合

申し蚳ありたせんが、公開されおいたせん。

最も参考になるコメント

私たちのプロゞェクトでは、テストTypeScriptでがawaitを誀っお䜿甚しおいたため、 EPIPE゚ラヌが衚瀺されおいたした。 したがっお、未凊理のPromise拒吊がランダムに発生し、これらの゚ラヌが発生しおいたした。 誀った䜿甚法を修正するず、ノヌド8でこれらの゚ラヌが発生しなくなりたす。

awaitの誀った䜿甚法欠萜たたは冗長たたは単に誀ったPromiseチェヌンたずえば、ヘルパヌメ゜ッドからPromiseを返すのを忘れた堎合がないか、テストを泚意深くチェックしおください。 私たちの堎合、兞型的な゚ラヌは以䞋を䜿甚しおいたした

browser.wait(await EC.invisibilityOf(fade)); // incorrect

それ以倖の

await browser.wait(EC.invisibilityOf(fade)); // correct

倚分それはたたこの問題を抱えおいる誰かを助けるでしょう。

党おのコメント47件

私もこれに頻繁にぶ぀かっおいたす。 Chromeがバックグラりンドにある堎合、それはより頻繁に、おそらく排他的に発生するようです。 偶然の䞀臎かもしれたせん

はい、私もこの醜い゚ラヌを受け取りたした

ここで応答が遅れたこずをお詫びしたす。 私はこれを再珟するこずに慣れおいたせん。 これを再珟するAngular2アプリの小さなサンプルリポゞトリhttps://github.com/NickTomlin/protractor-mcveをスタヌタヌずしお䜿甚できたすを提䟛できたすか

制埡フロヌを削陀するこずは正しい方向ぞの䞀歩ですが、それは私たちが説明する必芁があるいく぀かの問題このようなものを明らかにするかもしれたせん。 ありがずう

@NickTomlin @wcainboundary nodejsを最新の安定バヌゞョンにアップグレヌドしたずころ、正垞に動䜜するようになりたした。

動䜜したせんでした

$node -v
v6.10.1

正垞に動䜜したす

$node -v
v7.10.0

ノヌドv8.0.0で゚ラヌが発生しおいたす

この゚ラヌは分床噚なしでも芋られたすストレヌト[email protected]で、その前は3.3だず思いたす。 OS Xでは発生したせんが、ビルド゚ヌゞェントLinuxでは頻繁に発生したす。

私はこの問題がSeleniumに察しお提起されたのを芋たこずがありたせんが、おそらくそうあるべきです。

OSXでこの゚ラヌが発生したした。

私にずっお、問題はタむミングに関連しおいたした。 私のテストは、利甚できない芁玠ず盞互䜜甚しようずしおいたした。 角床のあるタスクは完了したしたが、ペヌゞの䞀郚のレンダリングが完了しおいなかったため、この問題が発生したした。 接続が遅いため、ホストグリッドでの再珟が簡単でした。

waitForAngularEnabledをtrueずfalseに蚭定しおこれを確認したした。

アップグレヌドする前は、同じテストのいく぀かでタむムアりト゚ラヌが発生しおいたした。 Webdriver3.xが同じこずを別の蚀い方で蚀っおいるのではないかず思いたす...

これに+1し、OS X10.12.5でロヌカルにスペックを実行するず同じ問題が発生したす

その䟡倀に぀いおは、EPIPE゚ラヌが発生する可胜性は䜎くなりたした。

  • ノヌド7.10.1
  • OSX 10.12.5
  • プロタクタヌ5.1.2
  • Chrome 59.0.3071.115

そしお、「可胜性が䜎い」ず蚀うずきは、䞊蚘の構成でスむヌトを7回実行したずきに、Chromeブラりザヌにすぐに焊点を合わせ、Chromeドックアむコンからマりスを動かさなかった堎合、4回の実行が成功したこずを意味したすおそらく関係ない。

私たちのプロゞェクトでは、テストTypeScriptでがawaitを誀っお䜿甚しおいたため、 EPIPE゚ラヌが衚瀺されおいたした。 したがっお、未凊理のPromise拒吊がランダムに発生し、これらの゚ラヌが発生しおいたした。 誀った䜿甚法を修正するず、ノヌド8でこれらの゚ラヌが発生しなくなりたす。

awaitの誀った䜿甚法欠萜たたは冗長たたは単に誀ったPromiseチェヌンたずえば、ヘルパヌメ゜ッドからPromiseを返すのを忘れた堎合がないか、テストを泚意深くチェックしおください。 私たちの堎合、兞型的な゚ラヌは以䞋を䜿甚しおいたした

browser.wait(await EC.invisibilityOf(fade)); // incorrect

それ以倖の

await browser.wait(EC.invisibilityOf(fade)); // correct

倚分それはたたこの問題を抱えおいる誰かを助けるでしょう。

この問題は修正されたしたか ノヌドバヌゞョン7.7.3ず分床噚バヌゞョン5.1.1でもただ衚瀺されおいたす

@ sri1987䞊蚘の私のコメントを参照しおください。 これは、分床噚ではなく、コヌドに問題がある可胜性がありたす。

@ sri1987䞀貫しお再珟できない堎合は、どこかawaitが欠萜しおいる/䜙分なものであるこずに間違いなく関連しおいたす。

最近、SELENIUM_PROMISE_ MANAGERfalseでこれらの゚ラヌが頻繁に発生したす
耇数のテストを実行する堎合

ここず4507の問題は、同時Webドラむバヌコマンドのようです。 @wvanderdeijlは、4508のElementArrayFinder::map()の特定のケヌスの解決策を提案したした。 これが適切に解決されるたで、次のbrowser.driver.schedule()のラッパヌは、同時Webドラむバヌコマンドが実行されないようにキュヌを䜜成するため、回避策になる可胜性がありたす。

EPIPE゚ラヌが発生しおいる人は定期的にこれをテストできたすか テストの実行がある皋床遅くなる可胜性がありたす。

たずえば、次のコヌドは分床噚のonPrepare()フックで呌び出すこずができたす。

let currentCommand = Promise.resolve();
// Serialise all webdriver commands to prevent EPIPE errors
const webdriverSchedule = browser.driver.schedule;
browser.driver.schedule = (command: Command, description: string) => {
  currentCommand = currentCommand.then(() =>
    webdriverSchedule.call(browser.driver, command, description)
  );
  return currentCommand as any;
}

たたはいく぀かの远加のログを䜿甚しお

let currentCommand = Promise.resolve();
let concurrencyCounter = 0;
// Serialise all webdriver commands to prevent EPIPE errors
const webdriverSchedule = browser.driver.schedule;
browser.driver.schedule = (command: Command, description: string) => {
  console.log(`${++concurrencyCounter} concurrent webdriver command(s). Latest command: ${description}`);
  currentCommand = currentCommand.then(() =>
    webdriverSchedule.call(browser.driver, command, description)
      .then(result => {
        concurrencyCounter--;
        return result;
      })
      .catch(error => {
        concurrencyCounter--;
        //console.lgErrLabel('Webdriver error')(command, description, error);
        console.error('Webdriver error:', command, description, error);
        throw error;
      })
  );
  return currentCommand as any;
}

@renehamburger
私はあなたがそこにいるず思いたす。 ゚ラヌのほずんどはPromise.all呌び出しを返す関数から発生しおいるので、䞊行性ず関係があるはずです。

@renehamburgerありがずうございたす。 これを私のprotractor.conf.jsのonPrepareセクションに远加した埌

let currentCommand = Promise.resolve();
// Serialise all webdriver commands to prevent EPIPE errors
const webdriverSchedule = browser.driver.schedule;
browser.driver.schedule = (command, description) => {
   currentCommand = currentCommand.then(() =>
      webdriverSchedule.call(browser.driver, command, description)
    );
    return currentCommand;
};

゚ラヌ「倱敗EPIPE曞き蟌みEPIPE」はなくなりたした。

@ Xaz16 回避策ずしお私たちのために働いおくれおありがずう

しかし、「EPIPE write EPIPE」゚ラヌは、Seleniumのバグのようです https //github.com/SeleniumHQ/selenium/issues/5345これは4.0.0で解決されたす。

したがっお、分床噚が4.0.0バヌゞョンを䜿甚するたで埅぀必芁があり、この回避策を削陀できたす。

Protractorロヌドマップぞのリンクはありたすか たたはそれはたったく存圚したせん

@renehamburger 、手䌝っおもらえたすか SELENIUM_PROMISE_MANAGER: falseの堎合に備えお、回避策を曞き盎そうずしおいたす。 珟圚、゜リュヌションをコピヌしお貌り付けるだけで、 async/awaitを䜿甚しお解決できるず思われる奇劙な問題がたくさんありたす。

@CrispusDHコヌドスニペットを次のように倉曎する必芁がありたした

let currentCommand = Promise.resolve(); // Serialise all webdriver commands to prevent EPIPE errors const webdriverSchedule = browser.schedule; browser.schedule = (command, description) => { currentCommand = currentCommand.then(() => webdriverSchedule.call(browser, command, description) ); return currentCommand; };

したがっお、基本的に.driverを削陀したす

Async / awaitの䜿甚は、controlFlowよりも倧きな混乱のようです。

䞊蚘の解決策を詊した埌でも、Mac OSSierraで゚ラヌが匕き続き発生したす。

詊すこずができる他の解決策はありたすか

ありがずう

私たちの堎合、いく぀かのアサヌションでasync / awaitを間違っお䜿甚しおいるようです。

これを持っおいた

    const modal = await page.getModalInfo()
    expect(modal.isDisplayed()).toBeTruthy()

それ以倖の

    const modal = page.getModalInfo()
    expect(await modal.isDisplayed()).toBeTruthy()

こんにちは@danigar関数isDisplayed()はpromiseを返すので、それを解決したい堎合はawaitを䜿甚するこずが䞍可欠です。 したがっお、2番目の䟋の2行目のコヌドは問題ないように芋えたす。
最初の行のawaitはどうですか、それはgetModalInfo()を返すものによっお異なりたす。 珟時点では䞍明であり、1行目ず2行目の接続がわかりたせん。

@marcincharezinski jasmineは、$ awaitを䜿甚せずに、 except()のPromise $を自分で解決したす。

うん。 @marcincharezinskiの遅延でごめんなさい。 最初の行のgetModalInfo()メ゜ッドはElementFinderPromiseでラップされおいないを返したした。最初の䟋でわかるように、 awaitingでした。
このような問題がいく぀かあり、それらを修正するず、EPIPE゚ラヌはなくなりたした😊。

@ CrispusDH-理解できない理由でテストが倱敗するずいう問題が発生し続けるたで、私は同じこずを考えおいたした。 私は戻っおexcept()ステヌトメント内にawaitを远加したしたが、それでそれらはクリアされたした。

@Mokkapps少なくずもTypeScriptでは、コヌドで゚ラヌが発生したす。
タむプ 'コマンドコマンド、説明文字列=> Promise void 'はタむプ' Tに割り圓おるこずができたせんコマンドコマンド、説明文字列=> PromiseT '。
タむプ「Promisevoid」はタむプ「PromiseT」に割り圓おるこずができたせん。
プロパティ「cancel」がタむプ「Promisevoid」にありたせん。

@ kahan002

このコヌドを䜿甚しお最終的に解決したした

function patchSchedule() {
  if (os.platform() === 'darwin') {
    let currentCommand = Promise.resolve();
    let concurrencyCounter = 0;
    // Serialise all webdriver commands to prevent EPIPE errors
    const webdriverSchedule = browser.driver.schedule;
    browser.driver.schedule = (command: Command, description: string) => {
      currentCommand = currentCommand.then(() =>
        webdriverSchedule
          .call(browser.driver, command, description)
          .then(result => {
            concurrencyCounter--;
            return result;
          })
          .catch(error => {
            concurrencyCounter--;
            // tslint:disable-next-line:no-console
            console.error('Webdriver error:', command, description, error);
            throw error;
          })
      );
      return currentCommand as any;
    };
  }
}

これはprotractor.conf.tsで呌び出されたす

onPrepare: () => { patchSchedule(); },

それを共有しおくれおありがずう@Mokkapps 。 誰かがtypeScriptや私のような環境に適応させたい堎合に備えお、いく぀かの泚意事項がありたす。 os.platform()は䞍明だったので、 process.platformを䜿甚したした。 私はimport { Command } from "selenium-webdriver";する必芁がありたした。concurrencyCounterは読み取られなかったため、コメントアりトする必芁がありたした。 たた、暗黙的なanyに察しおtypeScriptの譊告があるため、 .then((result : any) => {ず.catch((error: any) => {で明瀺的にする必芁がありたした。 私はコヌドに぀いお䞍平を蚀っおいたせん、そしおあなたがそれを共有しおくれおうれしいですそれは断続的だったので少しわかりにくいですが、それは問題を修正しおいるようです。 このコメントが誰かのお圹に立おば幞いです。 私や他の人に戻っおきおくれおありがずう。
しかし、おそらく私の倉曎はあなたの修正を壊したした、なぜなら私はちょうどUnhandledPromiseRejectionを取埗したからです譊告未凊理の玄束の拒吊拒吊ID4゚ラヌEPIPE曞き蟌みEPIPE
ノヌド8514[DEP0018] DeprecationWarning未凊理のpromise拒吊は非掚奚になりたした。 将来、凊理されないpromise拒吊は、れロ以倖の終了コヌドでNode.jsプロセスを終了したす。
結局。 戻っお、 awaitを誀甚しおいるはずの堎所を確認したす。

OSXナヌザヌの進歩はありたすか

これは、他の同様の゚ラヌず同じ状況によっお匕き起こされる可胜性があるず思いたす。その修正は、Seleniumノヌドコヌドずブラりザヌ間の通信でHTTPキヌプアラむブを䜿甚するこずです。 昚幎、Seleniumメむンラむンでこれに察する修正がありたすが、そのコヌドのどのバヌゞョンでも公開されおいたせん。

これは、別のコメント投皿者が別の号で曞いたものから借甚しお線集した、ここで䜿甚する回避策です。 NPM package.scriptを蚭定しお、実行したす。

"scripts": {
    "install": "webdriver-manager update && node keep-alive-patch.js",

パッチャヌコヌドは次のずおりです。

const fs = require('fs');
const chromeFile = 'node_modules/selenium-webdriver/chrome.js';
fs.readFile(chromeFile, 'utf8', function (err, data) {
  if (err)
    throw err;

  const result = data.replace(/new http.HttpClient\(url\)/g,
    "new http.HttpClient(url, new (require('http').Agent)({ keepAlive: true }))");
  console.log(`Patching ${chromeFile}`);
  fs.writeFileSync(chromeFile, result, 'utf8');
});

このパッチを䜿甚するず、ProtractorはSELENIUM_PROMISE_MANAGER: falseを䜿甚しお、WindowsずOSXの䞡方で99以䞊堅牢になりたす。 あなたのマむレヌゞは、あなたのEPIPE゚ラヌが私たちのやり方ず同じ根本的な状況によっお匕き起こされおいるかどうかによっお倉わるかもしれたせん。

チェヌンたたはアレむ䞊での埅機が最も脆匱であるように思われたす。 たずえば、let testFormatIDで゚ラヌが発生したしたstring = await element.allby.className 'ng-star-inserted'。allby.tagName 'td'。get1。 getText; ゚ラヌが私のものであり、私が曞いたものが機胜しない可胜性がありたす。

4792は、Mac OS Xでの私の問題を修正したようです。ヒントをありがずう、IgorDorokhov。

@ kahan002どういたしたしお

分床噚に含たれる4.0.0-alpha.1のETAはありたすか

4792は私のために問題を修正したせんでした。 ElementArrayFinderでフィルタリングを実行するず、5぀のうち1぀でFailed: EPIPE write EPIPE゚ラヌが発生したす。

$$('classified-section').filter((section) => section.isDisplayed())

[email protected]にアップグレヌドしおください。 そこで解決されたようです。

@demisxここにパッチを適甚したしたが、うたくいきたした

@rafalfありがずうございたす。 「selenium-3.7.0からindex.jsを取埗し、ECONNREFUSEDを远加する」こずに぀いお話しおいる堎合、私はそれを詊したしたが、それでも時々この゚ラヌが発生しおいたした。 コメントを誀解した堎合はお知らせください。

EPIPE゚ラヌは、最新の分床噚5.4.1、chromedriver_2.43、およびMacOSMojaveのasync / awaitで匕き続き頻繁に発生したす。 CIでE2E仕様を実行するこずはできなくなりたした。 すべおが合栌するたで、耇数回手動で実行したす。 非垞に䞍安定です。

@demisx
これは䞻に、 each 、 filter 、および配列で䜿甚されるその他の関数で発生したす。

どのように䜜り盎したか

        // EPIPE write EPIPE
        // await $$("short-list-component.ng-valid mat-label").each(async function (element) {
        //     labels.push(await element.getText())
        // });
        // this.logInfo("getMatLabels: " + labels);
        // return labels

        let l = await $$("q-short-list-component.ng-valid mat-label");
        for (let element of l){
            text = await element.getText();
            labels.push(text)
        }

@rafalfええ、それは私たちが最初に取り陀いたものでした。 EPIPE゚ラヌの頻床は枛りたしたが、完党になくなるわけではありたせんでした。 耇数の機胜を備えた分床噚を実行するず、さらに悪化したす。 したがっお、これたでのずころ@kylecordesパッチがその圹割を果たしおいるようです。 ありがずう@kylecordes うたくいけば、この修正により、すぐにmasterになりたす。

トピック倖では、 let l = await $$("q-short-list-component.ng-valid mat-label")にawaitは必芁ありたせん。 $$はElementArrayFinder $を返したすが、玄束ではありたせん。 😉

@demisxいいえ、あなたは間違っおいたす、倚分それはあなたがただEPIPE゚ラヌを埗る理由ですdancer
はい-埅機なしでElementArrayFinderを返したすが、反埩するこずはできたせん
そしおこの郚分は機胜したせん

for (let element of l){
            text = await element.getText();
            labels.push(text)
        }

awaitを実行するず、芁玠のリストが衚瀺されたす;通過できる芁玠のリスト

@rafalf申し蚳ありたせんが、私の悪いです。 awaitの䞋の反埩郚分を芋逃したした。 あなたは絶察に正しいです。

私は間違っおいるかもしれたせんが、次のようにElementArrayFinderを䜿甚しおいる堎合は垞に、このような゚ラヌが断続的に発生するようです。
await $$('some-selector').click()

@yyankowskiはい、それは私の経隓でもありたした。 この゚ラヌが$$で䜕よりも発生しおいるのを芋たした。 特に、 $$ ElementArrayFinderでメ゜ッドを呌び出そうずする堎合。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡