远程 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();
}
}