seleniumでカメラやマイクを使った通話系コンテンツのテストをする際に、Docker環境などでブラウザ環境を作って棄ててとやっていると、毎回Chromeプロファイルごと棄てられるため、毎回カメラやマイクの許可を求められたり、また、AWS環境でそれらのテストを実行する場合はそもそもハードウェアがなく、ハードウェアがあるパターンのテストとかどうやるん的な感じになって結構あちこち調べ回ったのでそのメモです
テスト環境
- selenium 3.141.0
- selenoid 1.10.0
- Robotframework 3.2.2
- Robotframework SeleniumLibrary 4.5.0
- Google Chrome 88
- Docker 20.10.2
仮想デバイスを実装するオプションを付与する
まず、上記の記事にある通り、 --user-fake-ui-for-media-stream
--user-fake-device-for-media-stream
をChrome起動時のオプションに設定します
// ←追加
の部分をオプションに追加します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| *** Settings *** Documentation ブラウザ設定
*** Variables *** &{DESIRED_CAPABILITIES} enableVNC=${${ENABLE_VNC}} enableVideo=${${ENABLE_VIDEO}}
*** Keywords *** ブラウザを開く [Arguments] ${ADDRESS} ${ALIAS}
${options} = evaluate sys.modules['selenium.webdriver'].ChromeOptions() sys
call method ${options} add_argument --no-sandbox call method ${options} add_argument --disable-dev-shm-usage call method ${options} add_argument --ignore-certificate-errors call method ${options} add_argument --allow-file-access-from-files call method ${options} add_argument --use-fake-ui-for-media-stream // ←追加 call method ${options} add_argument --use-fake-device-for-media-stream // ←追加 call method ${options} add_argument disable-infobars
Open Browser ${ADDRESS} Chrome alias=${ALIAS} remote_url=${HUB_URL} options=${options} desired_capabilities=${DESIRED_CAPABILITIES}
|
ブラウザにアクセス権限を付与する
次に、カメラやマイク、ついでに位置情報やデスクトップ通知などを許可するようブラウザに付与します(例えば、「カメラへのアクセスを求めています」みたいなプロンプトが出るやつを防ぐ設定)
// 追加 ここから ---->
から // 追加 ここまで <----
の部分をオプションに追加します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| *** Settings *** Documentation ブラウザ設定
*** Variables *** &{DESIRED_CAPABILITIES} enableVNC=${${ENABLE_VNC}} enableVideo=${${ENABLE_VIDEO}}
*** Keywords *** ブラウザを開く [Arguments] ${ADDRESS} ${ALIAS}
${options} = evaluate sys.modules['selenium.webdriver'].ChromeOptions() sys
call method ${options} add_argument --no-sandbox call method ${options} add_argument --disable-dev-shm-usage call method ${options} add_argument --ignore-certificate-errors call method ${options} add_argument --allow-file-access-from-files call method ${options} add_argument --use-fake-ui-for-media-stream call method ${options} add_argument --use-fake-device-for-media-stream call method ${options} add_argument disable-infobars
// 追加 ここから ----> ${prefs}= Create Dictionary ... profile.content_settings.exceptions.media_stream_mic=1 ... profile.content_settings.exceptions.media_stream_camera=1 ... profile.content_settings.exceptions.geolocation=1 ... profile.content_settings.exceptions.notifications=1 call method ${options} add_experimental_option prefs ${prefs} // 追加 ここまで <----
Open Browser ${ADDRESS} Chrome alias=${ALIAS} remote_url=${HUB_URL} options=${options} desired_capabilities=${DESIRED_CAPABILITIES}
|
ちなみに、 profile.default_content_setting_values
という指定も見かけましたが今回は使用していません
1 2 3 4
| ... profile.default_content_setting_values.media_stream_mic=1 ... profile.default_content_setting_values.media_stream_camera=1 ... profile.default_content_setting_values.geolocation=1 ... profile.default_content_setting_values.notifications=1
|
その他: Open xdg-open?
プロンプトの制御
以前に記事を書いています、こちらもどうぞ