質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Firefox

Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

1回答

2904閲覧

Selenium × Node.js × Firefox 環境でブラウザのコンソールログを取得したい

IkazoIchikawa

総合スコア38

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Firefox

Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2020/04/07 12:01

編集2020/04/19 05:25

実装・期待動作・事象

表記の環境で Selenium をつかったブラウザ操作をしようとしています。

実装したコードは以下なのですが、
コード中、 //<- point.1, //<- point.2 の所のように、
selenium-webdriver の Builder に対して ログ取得を有効化する設定をしていて、
Logs.get() でコンソールログを取得できると期待していました(//<- point.3 の所)。
ところが、WebDriverError が Throw されてしまいます。 (//<- point.4 の所)

Google Chrome 環境なら、こうすれば取得できる という方法(下記 2-setFirefoxOptions-setPreference.js に記載した方法)はあるんですが、これを Firefox で実現したく、アドバイスいただけませんでしょうか、、

↓ 3-1and2.js ↓ (オリジナルは repo 参照)

javascript

1const {Builder, Browser, Capabilities, logging} = require('selenium-webdriver'); 2const {Options} = require('selenium-webdriver/firefox'); 3 4(async () => { 5 6 var str_browserName = Browser.FIREFOX; 7 8 var obj_logPrefs = new logging.Preferences(); 9 obj_logPrefs.setLevel(logging.Type.BROWSER, logging.Level.ALL); 10 11 var obj_builder = await new Builder() 12 .withCapabilities( 13 new Capabilities() 14 .setBrowserName(str_browserName) 15 .setLoggingPrefs(obj_logPrefs) //<- point.1 16 ) 17 .setFirefoxOptions( 18 new Options() 19 .setPreference('log', 'trace') //<- point.2 20 ) 21 ; 22 23 console.log('<Content of Builder object>----------------------------------'); 24 console.log('<Builder>---------------'); 25 console.log(obj_builder); 26 console.log('<Preferences>---------------'); 27 console.log(obj_builder['capabilities_']['map_'].get('goog:loggingPrefs')); 28 console.log('<Object>---------------'); 29 console.log(obj_builder['firefoxOptions_'].get('moz:firefoxOptions')); 30 console.log('----------------------------------</Content of Builder object>'); 31 32 var obj_webDriver = obj_builder 33 .build() 34 ; 35 36 await obj_webDriver.get('https://firefox-source-docs.mozilla.org/testing/geckodriver/TraceLogs.html'); 37 38 await obj_webDriver.executeScript('console.log(\'hello console\');'); 39 40 var str_expectedString = 'hello console'; 41 var int_waitMS = 3000; 42 43 await obj_webDriver 44 .wait(async () => { 45 46 let bl_gotLog = false; 47 48 await obj_webDriver 49 .manage() 50 .logs() 51 .get(logging.Type.BROWSER) 52 .then(entries => { //<- point.3 53 entries.forEach( entry => { 54 55 console.log('[%s] %s', entry.level.name, entry.message); 56 57 if(entry.message.indexOf(str_expectedString) != (-1)){ 58 console.log("OK"); 59 bl_gotLog = true; 60 } 61 }); 62 }) 63 ; 64 65 return bl_gotLog; 66 67 },int_waitMS) 68 .catch(function(e){ //<- point.4 69 70 console.error('<exception caught!>----------------------------'); 71 72 if( (typeof e) === 'object' && e.constructor.name === "TimeoutError"){ 73 console.log("NG"); 74 75 }else{ 76 throw e; 77 } 78 }) 79 ; 80 81})();

↓ 実行結果 ↓

>node 3-1and2.js <Content of Builder object>---------------------------------- <Builder>--------------- Builder { log_: Logger { name_: 'webdriver.Builder', level_: null, parent_: Logger { name_: 'webdriver', level_: null, parent_: [Logger], handlers_: null }, handlers_: null }, url_: '', proxy_: null, capabilities_: Capabilities { map_: Map { 'browserName' => 'firefox', 'goog:loggingPrefs' => [Preferences] } }, chromeOptions_: null, chromeService_: null, firefoxOptions_: Options { map_: Map { 'browserName' => 'firefox', 'moz:firefoxOptions' => [Object] } }, firefoxService_: null, ieOptions_: null, ieService_: null, safariOptions_: null, edgeOptions_: null, edgeService_: null, ignoreEnv_: false, agent_: null } <Preferences>--------------- Preferences { prefs_: Map { 'browser' => Level { name_: 'ALL', value_: 0 } } } <Object>--------------- { prefs: { log: 'trace' } } ----------------------------------</Content of Builder object> <exception caught!>---------------------------- (node:1628) UnhandledPromiseRejectionWarning: WebDriverError: HTTP method not allowed at parseHttpResponse (C:\Users****\Desktop\q\node_modules\selenium-webdriver\lib\http.js:582:11) at Executor.execute (C:\Users****\Desktop\q\node_modules\selenium-webdriver\lib\http.js:491:26) at processTicksAndRejections (internal/process/task_queues.js:97:5) at async thenableWebDriverProxy.execute (C:\Users****\Desktop\q\node_modules\selenium-webdriver\lib\webdriver.js:700:17) at async C:\Users****\Desktop\q\3-1and2.js:59:13 (node:1628) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1) (node:1628) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

やってみたこと

//<- point.1, //<- point.2 の設定が競合しているのかと思ったので、
以下2パターンを試してみましたが、同様に WebDriverError が Throw されてしまいます。

  • //<- point.1 だけ設定して //<- point.2 は設定しない。 (repo1-withCapabilities-setLoggingPrefs.js)
  • //<- point.1 は設定しないで //<- point.2 だけ設定する。(repo2-setFirefoxOptions-setPreference.js)

また、Chrome(80.0.3987.149) × ChromeDriver 80.0.3987.106 であれば、
//<- point.1 だけ設定して //<- point.2 は設定しない状態で、コンソールログが取得できる事を確認しました。(repoc-1-withCapabilities-setLoggingPrefs.js)
、、Firefox はもっと違った実装が必要なんでしょうか?

環境

Windows10 (64bit)
Node.js v12.16.1
selenium-webdriver 4.0.0-alpha.7
Firefox 74.0.1(64bit)
geckodriver 0.26.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Googlechromeを使ったほうが良いです。

投稿2020/04/16 23:52

OkuHiroto

総合スコア47

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

IkazoIchikawa

2020/04/19 05:58

質問には記載していなかったのですが、クロスブラウザ対応の観点から、 Firefox でも実行できるようにしたい思いがあり、今回の質問となった次第です、、 なので Firefox環境(さらには Node.js 環境 (Pythonなどの他言語での実装は学習コスト発生する為回避したい。またFirefoxの為だけに他言語で実装した場合、運用コスト倍増してしまう))はハズせないんです、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問