我对WebRTC项目进行了自动化测试。当我试图在允许的权限下使用麦克风时,macOS上的chrome驱动程序会崩溃。Linux上一切正常,问题只存在于macOS。
val options = ChromeOptions()
val prefs = HashMap<String, Any>()
prefs["intl.accept_languages"] = "de"
prefs["profile.default_content_setting_values.media_stream_mic"] = 1
options.setExperimentalOption("prefs", prefs)
val driver = ChromeDriver(options)
铬驱动程序的日志:
[1111/144648.290128:WARNING:process_memory_mac.cc(93)] mach_vm_read(0x7ffee3670000, 0x2000): (os/kern) invalid address (1)
[1111/144648.443304:WARNING:system_snapshot_mac.cc(42)] sysctlbyname kern.nx: No such file or directory (2)
[1111/144648.462626:WARNING:crash_report_exception_handler.cc(239)] UniversalExceptionRaise: (os/kern) failure (5)
[1573480008.479][SEVERE]: Unable to receive message from renderer
[1573480008.479][INFO]: Waiting for pending navigations...
[1573480008.479][INFO]: Done waiting for pending navigations. Status: disconnected: not connected to DevTools
[1573480008.479][DEBUG]: DevTools HTTP Request: http://localhost:63323/json
[1573480008.480][DEBUG]: DevTools HTTP Request failed
有人知道是什么原因导致了车祸吗?有什么设置,比如内存等。?或者这只是硒元素的缺陷?
经过大量的实验,我能够解决这个问题。但我仍然无法解释为什么这种情况只发生在macOS上。这似乎是根本原因在于实验性的选择。也许它被称为实验性的是有充分理由的=(我发现可以使用以下选项:options.addArguments("--use-fake-ui-for-media-stream")
,它既适用于Linux,也适用于macOS,而不是使用prefs["profile.default_content_setting_values.media_stream_mic"] = 1
来允许使用麦克风。铬驱动程序的完整设置如下:
val options = ChromeOptions()
val prefs = HashMap<String, Any>()
prefs["intl.accept_languages"] = "de"
options.setExperimentalOption("prefs", prefs)
options.addArguments("--use-fake-ui-for-media-stream")
val driver = ChromeDriver(options)
此外,对于Firefox:
val profile = FirefoxProfile()
profile.setPreference("intl.accept_languages", "de")
val options = FirefoxOptions()
options.profile = profile
options.addPreference("media.navigator.streams.fake", true)
return BrowserProfile.initDriver(FirefoxDriver(options))