【发布时间】:2016-08-31 08:55:08
【问题描述】:
我有这种情况:
必须在浏览器中执行不同的脚本。其中之一是将消息从一个浏览器发送到另一个浏览器(WebRTC)。我想测量每个操作的延迟,特别是发送消息。
为了实现这一点,我为每个执行脚本的 selenium 驱动程序创建了一个自己的线程。此外,我创建了 another 线程,该线程正在等待消息从其他浏览器到达观察到的浏览器。等待消息的线程执行如下异步脚本:
String message = (String) ((JavascriptExecutor) driver).executeAsyncScript(
"window.receivedMessage = function(message_id){" +
"arguments[arguments.length - 1](message_id);" +
"}");
如您所见,如果浏览器收到消息,我正在等待调用的回调。
不幸的是,这会阻止我在浏览器中注册此异步脚本后要执行的所有其他脚本(不管是 .executeScript() 还是 .executeAsyncScript() )。
是否有人知道如何不断等待消息到达并使用 webdriver 执行其他脚本?
编辑
顺便说一句:忙着等待不应该是解决办法。我更喜欢以某种方式通知 selenium 操作已完成的方法,而无需不断地从驱动程序轮询结果。
【问题讨论】:
-
您是否有任何选项来验证浏览器 UI 上是否已收到消息?
-
@QVSJ 你的意思是我是否有权访问接收消息的浏览器?是的。我也可以修改浏览器的代码。
-
你找到解决这个问题的方法了吗@firsti
-
@Seraph 抱歉回复晚了。我将设置更改为使用外部消息记录服务器。在程序结束时,我只收集发送时间戳和接收时间戳之间的差异。 Selenium 在浏览器中执行脚本时不支持多线程。
标签: javascript java multithreading selenium asynchronous