【发布时间】:2015-08-07 04:33:22
【问题描述】:
我的 Protractor 套件在使用 Flash 捕捉摄像头和麦克风的网络应用上运行。当然,任何人第一次使用该应用程序时,Flash 都会弹出一个对话框,询问是否允许使用网络摄像头和麦克风。
此对话框的 HTML 如下所示:
<div id="flash-container" class="">
<object width="247" height="159" id="flashRecorder" type="application/x-shockwave-flash" data="EIRecorderProcess.swf" style="visibility: visible;">
<param name="allowScriptAccess" value="always">
<param name="wmode" value="transparent">
</object>
</div>
而对话框本身是这样的:
量角器在这里挂起,因为它似乎不知道如何单击“允许”按钮,并且应用程序不会让它继续,直到它这样做。这是我尝试过的:
我访问了特定于站点的 Flash 安全设置以允许访问 对于网络应用程序。但是每次 WebDriver 运行时,它都会创建一个 Chrome 上的临时配置文件,它不知道这些安全性 设置,所以无论如何都会弹出设置框。
我设置了 Protractor 配置文件以使用选项运行 Chrome '使用假设备换媒体流','使用假用户界面换媒体流', 和“禁用捆绑的 ppapi-flash”。前两个没什么区别。 最后一个真的打破了一切。
-
我试过用这个:
browser.actions() .mouseMove(element(by.css('object#flashRecorder')), x, y) .click() .perform();即使我是个高手,而且我很确定我已经搞定了按钮 坐标(确定使用了一些 javascript 坐标跟踪),什么也没发生。
我使用了 Chrome 标志“user-data-dir=/a/random/path”,以便在第一个 时间点击对话框并单击“允许”和“记住”,安全设置为 已存储且不会弹出 不再。这是当前的解决方法,但会为任何 想要运行测试的开发人员,而我的程序员说这不是犹太教 需要人工交互的自动化测试。
有没有人找到另一种方法来做到这一点?
【问题讨论】:
-
--use-fake-ui-for-media-stream参数应该可以解决问题。你能展示你是如何将它传递给chrome的吗?谢谢。 -
以下是我的 protractor.conf.js 中的相关行:capabilities: { 'browserName': 'chrome', 'chromeOptions': { 'args': ['use-fake-device-for -media-stream', 'use-fake-ui-for-media-stream'] }, },
-
如果你尝试这种方式呢?
capabilities: { 'browserName': 'chrome', 'chromeOptions': { 'args': ['--use-fake-ui-for-media-stream'] }, } -
@alecxe,我也试过这样。 chromeOptions 数组不需要您在命令行上需要的双破折号。我用非常明显的“show-fps-counter”进行了测试,以确保它们通过了。
-
好的,谢谢,我之前一直放
--,只是想检查一下。很高兴知道。
标签: angularjs automated-tests protractor flash