远程 WebDriver 独立服务器

使用独立服务器。

此文档之前位于 wiki

服务器将始终在要测试的浏览器所在的机器上运行。服务器可以从命令行使用,也可以通过代码配置使用。

从命令行启动服务器

下载 selenium-server-standalone-{VERSION}.jar 后,将其放置在要测试的浏览器所在的计算机上。然后,从 jar 所在的目录运行以下命令

java -jar selenium-server-standalone-{VERSION}.jar

运行服务器的注意事项

调用者应正确终止每个会话,调用 Selenium#stop()WebDriver#quit

selenium-server 为每个正在进行的会话保留内存中的日志,这些日志在调用 Selenium#stop()WebDriver#quit 时清除。 如果您忘记终止这些会话,您的服务器可能会泄漏内存。 如果您保持长时间运行的会话,您可能需要时不时地停止/退出(或使用 -Xmx jvm 选项增加内存)。

超时(从 2.21 版本开始)

服务器有两个不同的超时,可以设置如下

java -jar selenium-server-standalone-{VERSION}.jar -timeout=20 -browserTimeout=60
  • browserTimeout
    • 控制浏览器允许挂起的时间(以秒为单位)。
  • timeout
    • 控制客户端在会话被回收之前允许离开的时间(以秒为单位)。

从 2.21 版本开始,不再支持系统属性 selenium.server.session.timeout

请注意,browserTimeout 旨在作为普通超时机制失败时的备用超时机制,它应该主要在 grid/服务器环境中使用,以确保崩溃/丢失的进程不会停留太久,污染运行时环境。

以编程方式配置服务器

理论上,该过程就像将 DriverServlet 映射到 URL 一样简单,但也可能将页面托管在轻量级容器中,例如完全在代码中配置的 Jetty。

  • 下载 selenium-server.zip 并解压缩。
  • 将 JAR 放到 CLASSPATH 上。
  • 创建一个名为 AppServer 的新类。在这里,我们使用 Jetty,因此您还需要下载
import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.security.SslSocketConnector;
import org.mortbay.jetty.webapp.WebAppContext;

import javax.servlet.Servlet;
import java.io.File;

import org.openqa.selenium.remote.server.DriverServlet;

public class AppServer {
  private Server server = new Server();

  public AppServer() throws Exception {
    WebAppContext context = new WebAppContext();
    context.setContextPath("");
    context.setWar(new File("."));
    server.addHandler(context);

    context.addServlet(DriverServlet.class, "/wd/*");

    SelectChannelConnector connector = new SelectChannelConnector();
    connector.setPort(3001);
    server.addConnector(connector);

    server.start();
  }
}
上次修改时间:2022 年 1 月 12 日: 存档其他 wiki 文章 (e75f49c8af3)