2

我正在尝试使用 selenium-rc 和 pear 的 selenium PHP API(运行的 php 脚本测试位于其应用服务器上,与远程控制的窗口位于同一本地网络上)。

到目前为止,一切都很好,除了我无法从 selenium RC 获取屏幕截图 - 在 base64_decode(); 之后它们都是空白(灰色);(没有那个,他们甚至不打开)。

尽管 os x preview 将它们显示为灰色,但我很确定它们实际上是透明的或有某种其他损坏,因为 Photoshop 根本不会打开它们。(它们重 0.7k)但是 unix“文件”命令将它们正确识别为“PNG 图像,1440 x 900,8 位/彩色 RGB,非隔行扫描” - 1440 x 900 是我的 Mac 的分辨率,连接到windows系统通过远程桌面。

我直接运行 selenium rc(即 java -jar selenium-server.jar),而不是作为服务。我所有的 Windows 测试系统的症状都是一样的。

我的 Selenium 版本是 1.0.1,这是尝试获取屏幕截图的片段:

$this->selenium->windowMaximize();
$screenshot = $this->selenium->captureScreenshotToString();

我正在使用最新的 Testing_Selenium pear 包。我意识到这里有一个处理类似问题的问题,但我没有使用服务包装器,也无法引入这种复杂性(但如果您认为这是一个错误,请告诉我)

谢谢和问候, 安德拉斯

ps:我将这个帖子交叉发布到几个论坛,以拼命尝试获得一些影响 - 如果这让你感到不安,我深表歉意:-)

编辑:硒 rc 控制台说

16:38:24.562 信息 - 得到结果:会话 a5304a287eb24402 8c8c843b294bf98f java.net.SocketException 上的 [base64 编码 PNG]:软件导致连接中止:java.net 上的 java.net.SocketOutputStream.socketWrite0(本机方法)的套接字写入错误。 SocketOutputStream.socketWrite(Unknown Source) at java.net.SocketOutputStream.write(Unknown Source) at org.mortbay.http.ChunkingOutputStream.bypassWrite(ChunkingOutputStrea m.java:151) at org.mortbay.http.BufferedOutputStream.write(BufferedOutputStream. java :142) at org.mortbay.http.HttpOutputStream.write(HttpOutputStream.java:423) at org.mortbay.http.HttpOutputStream.write(HttpOutputStream.java:414) at org.openqa.selenium.server.SeleniumDriverResourceHandler.handleComman dRequest(SeleniumDriverResourceHandler.java:370) 在 org.openqa。selenium.server.SeleniumDriverResourceHandler.handle(Selen iumDriverResourceHandler.java:125) at org.mortbay.http.HttpContext.handle(HttpContext.java:1530) at org.mortbay.http.HttpContext.handle(HttpContext.java:1482) at org.mortbay.http.HttpServer.service(HttpServer.java:909) 在 org.mortbay.http.HttpConnection.service(HttpConnection.java:820) 在 org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986)在 org.mortbay.http.HttpConnection.handle(HttpConnection.java:837) 在 org.mortbay.http.SocketListener.handleConnection(SocketListener.java: 245) 在 org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357 ) 在 org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)125) 在 org.mortbay.http.HttpContext.handle(HttpContext.java:1530) 在 org.mortbay.http.HttpContext.handle(HttpContext.java:1482) 在 org.mortbay.http.HttpServer.service(HttpServer.java :909) 在 org.mortbay.http.HttpConnection.service(HttpConnection.java:820) 在 org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986) 在 org.mortbay.http.HttpConnection.handle(HttpConnection. java:837) at org.mortbay.util.ThreadPool$PoolThread.run 在 org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357) 在 org.mortbay.http.SocketListener.handleConnection(SocketListener.java: 245) (线程池.java:534)125) 在 org.mortbay.http.HttpContext.handle(HttpContext.java:1530) 在 org.mortbay.http.HttpContext.handle(HttpContext.java:1482) 在 org.mortbay.http.HttpServer.service(HttpServer.java :909) 在 org.mortbay.http.HttpConnection.service(HttpConnection.java:820) 在 org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986) 在 org.mortbay.http.HttpConnection.handle(HttpConnection. java:837) at org.mortbay.util.ThreadPool$PoolThread.run 在 org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357) 在 org.mortbay.http.SocketListener.handleConnection(SocketListener.java: 245) (线程池.java:534)org.mortbay.http.HttpConnection.service(HttpConnection.java:820) org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986) org.mortbay.http.HttpConnection 的服务(HttpServer.java:909) .handle(HttpConnection.java:837) 在 org.mortbay.http.SocketListener.handleConnection(SocketListener.java: 245) 在 org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357) 在 org.mortbay.util。 ThreadPool$PoolThread.run(ThreadPool.java:534)org.mortbay.http.HttpConnection.service(HttpConnection.java:820) org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986) org.mortbay.http.HttpConnection 的服务(HttpServer.java:909) .handle(HttpConnection.java:837) 在 org.mortbay.http.SocketListener.handleConnection(SocketListener.java: 245) 在 org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357) 在 org.mortbay.util。 ThreadPool$PoolThread.run(ThreadPool.java:534)org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534) 上的 util.ThreadedServer.handle(ThreadedServer.java:357)org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534) 上的 util.ThreadedServer.handle(ThreadedServer.java:357)

对于所有屏幕截图。

4

1 回答 1

6

当没有物理桌面(或远程桌面会话)时,运行 Selenium RC 的 Java 进程将导致屏幕截图为黑色。在不了解更多信息的情况下,这可能是您的问题。

作为 Selenium RC 的创建者,我实际上建议不要完全使用 Windows 服务。相反,做我们在 BrowserMob 所做的事情,它提供免费的监控免费的负载测试服务,以及最近推出的即时测试工具,可以从多个位置截取您的站点的屏幕截图。

我们所做的是从VNC会话的上下文中启动所有内容。在 Windows 上,将 VNC 配置为在启动时启动会话。然后确保用户自动登录。然后在 Program Files->Startup 中放置一个 .bat 文件以启动 Selenium RC。这有点痛苦,但这是我找到的确保 Selenium RC 在支持屏幕截图、启动 IE、与本机事件交互等的环境中启动的最可靠方法。

祝你好运!

于 2009-11-16T17:32:19.973 回答