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

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

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

Codeceptionは、容易にPHPのテストを行えるテスティングフレームワーク。単体テスト・機能テスト・受入テストの全てをサポートします。BDDスタイルの文法に対応し、テストコードの可読性に秀逸です。主要フレームワークもサポートしています。

Chrome

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ソフトウェアテスト

ソフトウェアテストは、プログラムを実行し、要求通りに正しく動作が行えているかどうか確認する作業です。プログラム中のバグをできる限り多く発見することを目標として行われます。

selenium

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

Q&A

解決済

2回答

4487閲覧

Codeception + SeleniumServer + ChromeWebDriverでのUserAgentの変更方法

退会済みユーザー

退会済みユーザー

総合スコア0

Codeception

Codeceptionは、容易にPHPのテストを行えるテスティングフレームワーク。単体テスト・機能テスト・受入テストの全てをサポートします。BDDスタイルの文法に対応し、テストコードの可読性に秀逸です。主要フレームワークもサポートしています。

Chrome

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ソフトウェアテスト

ソフトウェアテストは、プログラムを実行し、要求通りに正しく動作が行えているかどうか確認する作業です。プログラム中のバグをできる限り多く発見することを目標として行われます。

selenium

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

1グッド

9クリップ

投稿2015/06/30 08:54

編集2015/07/02 02:39

受け入れテストをCodeceptionとSeleniumServerを使って自動化しようと考えています。この場合にユーザエージェントの切り替えをどのようにすればいいのか教えて欲しいです。

該当システムはユーザエージェントでPC版とスマホ版の表示切り替えをしていて、
現状PC版のテストはプロトタイプが作れたのですが、ユーザエージェントの切替方法が分からずスマホ版のテストの目処が立ちません。

以下のようにacceptance.suite.ymlに書いて実行してみましたがダメでした。(PC版で実行されてしまいました)

class_name: AcceptanceTester modules: enabled: [WebDriver] config: WebDriver: url: 'http://test.host.jp' browser: chrome capabilities: userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4"

調べていてデフォルトで使えるFirefoxWebDriverでは難しそう(出来なそう?)だったので、ChromeWebDriverを使ってみています。
この辺を見る限りmobileEmulationの当たりを上手く設定出来ればいけるのかとおもっているのですがCodeceptionを使ったときにどうしていいか分からず。。。

また、Codeception + SeleniumServer + ChromeWebDriverと書きましたがスマホ版のテストが出来るならChromeでなくても良いと考えています。

ikuwow👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

連続で失礼します。

個人的に興味もありましたので、ChromeWebDriverで挑戦してみましたところ、以下の方法でうまくいきました。

環境は以下のとおりです。(その他は前の回答と同じ)

  • ChromeDriver 2.16
  • Chrome 43.0.2357.130 m (64-bit)

そもそもで、Codeceptionが依存しているphp-webdriverがmobileEmulationに対応していないようですので、そこを考慮する必要がありました。

まず、php-webdriverに含まれているChromeOptionsを拡張したクラスを用意します。

lang

1<?php 2class ExtendedChromeOptions extends \ChromeOptions 3{ 4 protected $mobileEmulation; 5 6 public function setMobileEmulation($mobileEmulation) 7 { 8 $this->mobileEmulation = $mobileEmulation; 9 } 10 11 public function toArray() 12 { 13 $options = parent::toArray(); 14 $options['mobileEmulation'] = $this->mobileEmulation; 15 return $options; 16 } 17}

次に、先ほど回答させていただいたAcceptanceHelperのloadFirefoxProfileをChromeに対応します。

lang

1<?php 2namespace Codeception\Module; 3 4class AcceptanceHelper extends \Codeception\Module\WebDriver 5{ 6 protected function loadFirefoxProfile() 7 { 8 if (isset($this->config['capabilities']['userAgent'])) { 9 if ($this->config['browser'] === 'firefox') { 10 $profile = new \FirefoxProfile(); 11 $profile->setPreference( 12 'general.useragent.override', 13 $this->config['capabilities']['userAgent'] 14 ); 15 $this->capabilities['firefox_profile'] = $profile->encode(); 16 } else if ($this->config['browser'] === 'chrome') { 17 $mobileEmulation = [ 18 'userAgent' => $this->config['capabilities']['userAgent'] 19 ]; 20 $options = new \ExtendedChromeOptions(); 21 $options->setMobileEmulation($mobileEmulation); 22 $this->capabilities[\ChromeOptions::CAPABILITY] = $options->toArray(); 23 } 24 } else { 25 parent::loadFirefoxProfile(); 26 } 27 } 28}

(もはや、処理内容が「loadFirefoxProfile」という命名とはずれてますが、適した場所がここしかないので。。。。)

最後に、acceptance.suite.ymlはbrowserを firefox -> chrome に変更するのみですので、割愛します。

試してはいませんが、deviceMetricsなんかも設定できそうな雰囲気が致します。

以上です。参考になさってください。

投稿2015/07/02 08:54

piccagliani

総合スコア39

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

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

退会済みユーザー

退会済みユーザー

2015/07/02 12:12

回答いただきありがとうございました! 無事ユーザエージェントの変更に成功しました! また、ヘルパークラスの使用方法についても理解が深まりました。 本当にありがとうございました。
piccagliani

2015/07/03 00:12

早速試していただき、ありがとうございました! お役に立ててうれしいです!
guest

0

こんにちは。

質問にあるChromeWebDriverではないですが、、、、FirefoxWebDriverでユーザーエージェントの切り替えを行うことができましたので共有します。

私の環境は以下のとおりです。

  • Windows 8.1
  • PHP 5.5.15
  • Codeception 2.0.15
  • Selenium Standalone Server 2.44.0
  • Firefox Developer Edition 40.0a2 (2015-05-28)

まず、WebDriverモジュールのloadFirefoxProfileメソッドを tests/support/AcceptanceHelper.php でオーバーライドします。

lang

1<?php 2namespace Codeception\Module; 3 4class AcceptanceHelper extends \Codeception\Module\WebDriver 5{ 6 protected function loadFirefoxProfile() { 7 if (isset($this->config['capabilities']['userAgent'])) { 8 $profile = new \FirefoxProfile(); 9 $profile->setPreference( 10 'general.useragent.override', 11 $this->config['capabilities']['userAgent'] 12 ); 13 $this->capabilities['firefox_profile'] = $profile->encode(); 14 } else { 15 parent::loadFirefoxProfile(); 16 } 17 } 18}

オリジナルのloadFirefoxProfileでは、ファイルシステム上のプロファイルを読み込む実装になっているため、プロファイルを用意してもいいのかもしれませんが、暗号化が必要など、手間がかかりそうでした。。。。)

次に、acceptance.suite.ymlを少し変更します。

lang

1class_name: AcceptanceTester 2modules: 3 enabled: [AcceptanceHelper] # ←WebDriverをAcceptanceHelperに変更 4 config: 5 AcceptanceHelper: # ←WebDriverをAcceptanceHelperに変更 6 url: 'http://test.host.jp' 7 browser: firefox 8 capabilities: 9 userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4"

urlをhttp://www.google.co.jpに設定すると、スマホ用の画面が表示されることを確認しました。試してみてください。

なお、もしすでにAcceptanceHelperにかなり手が入っていていじることができない、という場合は別のクラスを定義してそちらでloadFirefoxProfileをオーバーライドすれば大丈夫だと思います。(合わせてsuite設定もそのクラスに合わせて変更します)

テストが順調にいくことをお祈りしてます!

投稿2015/07/02 06:55

piccagliani

総合スコア39

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

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

退会済みユーザー

退会済みユーザー

2015/07/02 12:14

firefoxについても無事成功しました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問