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

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

ただいまの
回答率

90.62%

  • JavaScript

    15880questions

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

  • Node.js

    1792questions

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

  • Chrome

    587questions

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

  • selenium

    485questions

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

Selenium×Node.jsでテスト実行すると「NoSuchSessionError: no such session」となりうまくいかない...

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 566

okame

score 50

 前提・実現したいこと

会社プロダクトで人力で行っているシナリオテストの工数・負荷を削減したく
Selenium×Node.jsでテスト自動化を行おうとしていますが、調査の段階で詰まってしまっています。。。

 環境

  • Mac OS10.12.6
  • Node 8.11.1
  • Selenium Server 3.12.0
  • Selenium WebDriver 4.0.0
  • ChromeDriver 2.38

 やったこと

1. Node.js のインストール
公式サイトから
2. selenium-webdriverのインストール
npm経由でインストール

$ npm install selenium-webdriver


3. selenium-serverのインストール
Homebrew経由でインストール

$ brew install selenium-server-standalone


4. Chromeドライバのインストール
ChromeDriver - WebDriver for Chrome
→ドライバをダウンロードしたらファイルを移動

$ mv /Users/username/Downloads/chromedriver ./
$ ls -la
total 31920 
drwxr-xr-x 7 username staff 238 5 24 17:42 . 
drwxr-xr-x+ 55 username staff 1870 5 24 17:42 .. 
-rwxr-xr-x@ 1 username staff 11917200 4 20 16:39 chromedriver 
drwxr-xr-x 41 username staff 1394 5 24 16:45 node_modules 
-rw-r--r-- 1 username staff 9367 5 24 16:45 package-lock.json


5. Selenium Server の起動
バックグラウンドで起動

$ selenium-server -port 4444 &
[1] 33415
C02SY1XFGTFJ:selenium username$ 18:04:14.512 INFO [GridLauncherV3.launch] - Selenium build info: version: '3.11.0', revision: 'e59cfb3'
18:04:14.513 INFO [GridLauncherV3$1.launch] - Launching a standalone Selenium Server on port 4444
2018-05-24 18:04:14.624:INFO::main: Logging initialized @441ms to org.seleniumhq.jetty9.util.log.StdErrLog
18:04:14.882 INFO [SeleniumServer.boot] - Welcome to Selenium for Workgroups....
18:04:14.882 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4444

 発生している問題・エラーメッセージ

サンプルとなるテストコードを書きます。

$ vim sample.js
// WebDriver の初期化
const webdriver = require('selenium-webdriver');
// ブラウザの選択
const browser = new webdriver.Builder().forBrowser('chrome').build();

// ページタイトルの取得
browser.get('http://example.selenium.jp/reserveApp/').then(()=>{
    browser.getTitle().then(title => console.log('ページタイトル:',title))
});

// ブラウザの終了
browser.close();
browser.quit();

上記コードを実行させると、、、

$ node sample.js 
(node:13216) UnhandledPromiseRejectionWarning: NoSuchSessionError: no such session
  (Driver info: chromedriver=2.38.552518 (183d19265345f54ce39cbb94cf81ba5f15905011),platform=Mac OS X 10.12.6 x86_64)
    at Object.checkLegacyResponse (/Users/ko-kamenashi/selenium/node_modules/selenium-webdriver/lib/error.js:585:15)
    at parseHttpResponse (/Users/ko-kamenashi/selenium/node_modules/selenium-webdriver/lib/http.js:533:13)
    at Executor.execute (/Users/ko-kamenashi/selenium/node_modules/selenium-webdriver/lib/http.js:468:26)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
(node:13216) 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(). (rejection id: 2)
(node:13216) [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.

とエラーになります。
エラーメッセージ「NoSuchSessionError: no such session」等でググると記事は出てくるのですが、
本事象の解決とは至っていません。

 以上です

お手数ですが皆様のお知恵を拝借できれば幸いです。宜しくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

Node.jsだとドライバの不具合が解消しなかったので、PHPでfacebook-webdriverを使う形に切り替えたらSelenium正常に動作しました。

 PHPでWebブラウザを操作するために必要なライブラリ「facebook-webdriver」のダウンロード

 Composerのダウンロード

ComposerはPHPのパッケージ管理ツールです。

$ curl -sS https://getcomposer.org/installer | php
All settings correct for using Composer
Downloading...

Composer (version 1.6.5) successfully installed to: /Users/kamenashikou/selenium/composer.phar
Use it: php composer.phar

 facebook-webdriverのインストール

Facebookさんが作ってくれたツールです。少し時間がかかります。

$ php composer.phar require facebook/webdriver
Using version ^1.6 for facebook/webdriver
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 2 installs, 0 updates, 0 removals
  - Installing symfony/process (v4.1.1): Downloading (100%)         
  - Installing facebook/webdriver (1.6.0): Downloading (100%)         
facebook/webdriver suggests installing ext-SimpleXML (For Firefox profile creation)
Writing lock file
Generating autoload files

 最終的なディレクトリ構成

$ ls -la
total 38368
drwxr-xr-x   8 username  staff       272  7  5 09:49 .
drwxr-xr-x+ 95 username  staff      3230  7  5 09:35 ..
-rwxr-xr-x@  1 username  staff  12093844  6  7 13:25 chromedriver
-rw-r--r--   1 username  staff        64  7  5 09:49 composer.json
-rw-r--r--   1 username  staff      4447  7  5 09:49 composer.lock
-rwxr-xr-x   1 username  staff   1849094  7  5 09:48 composer.phar
-rwxr-xr-x@  1 username  staff   5685072  6 16 05:56 geckodriver
drwxr-xr-x   6 username  staff       204  7  5 09:49 vendor

これでselenium-serverを実行し、PHPのテストコードでSelenium実行されました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

私も微妙に違いますが似たような事象に遭遇したことがあります。
結論から言うと原因はよく分からず、解決しませんでした。

chromiumプロジェクトのバグトラッカーなどでも何年か前から議論されていましたが、どうなったのかはわかりません。

私が解決した方法は、Dockerを使うことです。
ChromeDriverはバージョンによってよくわからない不具合があるようで、安定していないと思われます。
ですので、linuxやmacにChromeDriverを入れてE2Eテストを行うことはオススメしません。

Dockerは使われたことはありますか?
とりあえずDockerをインストールしたあとに以下のコマンドを実行してみてください。
これでChromeの入ったSeleniumコンテナがlocalhost:4444で起動します。

$ docker run -p 4444:4444 -itd selenium/standalone-chrome-debug

Node.js側のseleniumドライバの設定はよくわかりませんが、host/portをlocalhost/4444に設定してテストしてみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/27 20:33

    ご教示いただきありがとうございます!!
    どなたからもコメントいただけなかったので諦めかけていました。

    似たような事象で解決に至らなかったのですね。そうでしたか。。。
    とりあえず動作確認をしたくMacで環境構築しようとしたのですが、一旦諦めます。

    解決方法はDockerですね!いずれは部内へ展開する予定で
    テスト環境をDockerで共有するつもりでしたのでちょうどよかったです\(^o^)/
    週明け時間をとって今度はDockerで試してみます。結果を改めて共有させていただきますね!

    取り急ぎ御礼まで。

    キャンセル

  • 2018/06/07 16:14

    keroxp様
    Docker上でご教示いただいたコマンドを実行しコンテナの生成/起動はできました。
    この後の進め方として、テストコードをどこに書いてどのように実行していけば良いでしょうか?

    キャンセル

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

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    Selenium2 javascript 値の取得方法

    Selenium2をjavascriptから使っています。 (MacOS上でnode.js + selenium-webdriver、ブラウザはChromeを使用) 画面上

  • 解決済

    vimでmacのアプリcheatsheet のようなことをしたい

    vim そのもののショートカットコマンド自体もものすごい数ですが,プラグインなどを導入するともはや覚えきれません... macでは開いているアプリケーション上でcommand

  • 解決済

    search()のフラグzの使い方が分からない

    search()やsearchpos()にzフラグを付けた場合と付けない場合の挙動を確認したいのですが、次のようなサンプルでは違いを確認できませんでした。 どのようにsearch

  • 受付中

    vimで記号が含まれたショートカットキーの入力が面倒なので改善したい

    いつもお世話になっております。 vimでショートカットキーに記号を含んだ物があります。例えば「di"」や「"0p」など記号を含んだショートカットキーがありますが、利用する際に

  • 受付中

    selenium-webdriverがつながりません。

    前提・実現したいこと 著書:クローラー開発技法のサンプルコードを動かしたいです。 発生している問題・エラーメッセージ $ ruby login.rb /usr/local

  • 解決済

    vimのremapで自作関数を呼ぶ方法

    前提・実現したいこと 閉じ括弧を打つのが面倒くさいので、 insert モード時に '{' を打つと、同時に閉じ括弧 '}' が入力される関数を自作してみました。 関数内ではカーソ

  • 解決済

    新規タブを開いたときにNERDTreeを表示

    新規タブを開いたときにNerdTreeを表示させるにはvimrcになんと書けばよいでしょうか。 autocmd tabnew * NERDTree と書いてみたのですが、 ウィ

  • 解決済

    SeleniumでChromeのprofileが変更できない

     実現したいこと C#でSeleniumを使用して自動操作するソフトを作成しています。 Chromeの起動オプションで「user-data-dir」を指定したいのです。  発生

同じタグがついた質問を見る

  • JavaScript

    15880questions

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

  • Node.js

    1792questions

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

  • Chrome

    587questions

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

  • selenium

    485questions

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