是否有 API 可用于获取 selenium 网格中可用的特定浏览器的插槽数?
Is there any API available to get how many slots of specific browser available in selenium grid?
我想获取 selenium 网格中特定浏览器的测试数 运行。
我查看了现有的 API,我可以从中获取插槽计数,它是包括所有浏览器在内的所有可用插槽的总和。
例如:curl -X GET http://localhost:4444/grid/api/hub/ -d '{"configuration":["slotCounts"]}'
输出将是:{"success":true,"slotCounts":{"free":178,"total":196}}
是否有任何 API 可用于获取有多少 chrome 浏览器插槽可用?
我想到的其他选项是解析现有 API
curl -X GET http://localhost:4444/grid/console
哪个 return 完整堆栈,我需要解析 html 结构,就像
<img src='/grid/resources/org/openqa/grid/images/chrome.png' width='16' height='16' class='busy' title='POST - /session/8802ebae-10cb-480d-bbbd-5e7edd7ee7b2/execute executed.' />
没有。目前,Selenium Grid 中没有这样的 API 可以为您完成此操作。
您需要构建一个自定义 servlet,调用它时可以提取并为您提供此信息。
您的 Hub servlet 可能如下所示:
import org.openqa.grid.internal.ProxySet;
import org.openqa.grid.internal.Registry;
import org.openqa.grid.internal.RemoteProxy;
import org.openqa.grid.web.servlet.RegistryBasedServlet;
import org.openqa.selenium.remote.CapabilityType;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class SimpleServlet extends RegistryBasedServlet {
public SimpleServlet(Registry registry) {
super(registry);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ProxySet proxySet = getRegistry().getAllProxies();
Iterator<RemoteProxy> iterator = proxySet.iterator();
Map<String, List<String>> returnValue = new HashMap<>();
while (iterator.hasNext()) {
RemoteProxy each = iterator.next();
each.getTestSlots().forEach(slot -> {
String browser = (String) slot.getCapabilities().get(CapabilityType.BROWSER_NAME);
String machineIp = each.getRemoteHost().getHost();
List<String> machines = returnValue.get(browser);
if (machines == null) {
machines = new ArrayList<>();
}
machines.add(machineIp);
returnValue.put(browser, machines);
});
}
//Write logic to have the Map returned back as perhaps a JSON payload
}
}
您可以参考 Selenium 文档here了解如何将 servlet 注入 Hub 或节点。
我想获取 selenium 网格中特定浏览器的测试数 运行。
我查看了现有的 API,我可以从中获取插槽计数,它是包括所有浏览器在内的所有可用插槽的总和。
例如:curl -X GET http://localhost:4444/grid/api/hub/ -d '{"configuration":["slotCounts"]}'
输出将是:{"success":true,"slotCounts":{"free":178,"total":196}}
是否有任何 API 可用于获取有多少 chrome 浏览器插槽可用?
我想到的其他选项是解析现有 API
curl -X GET http://localhost:4444/grid/console
哪个 return 完整堆栈,我需要解析 html 结构,就像
<img src='/grid/resources/org/openqa/grid/images/chrome.png' width='16' height='16' class='busy' title='POST - /session/8802ebae-10cb-480d-bbbd-5e7edd7ee7b2/execute executed.' />
没有。目前,Selenium Grid 中没有这样的 API 可以为您完成此操作。
您需要构建一个自定义 servlet,调用它时可以提取并为您提供此信息。
您的 Hub servlet 可能如下所示:
import org.openqa.grid.internal.ProxySet;
import org.openqa.grid.internal.Registry;
import org.openqa.grid.internal.RemoteProxy;
import org.openqa.grid.web.servlet.RegistryBasedServlet;
import org.openqa.selenium.remote.CapabilityType;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class SimpleServlet extends RegistryBasedServlet {
public SimpleServlet(Registry registry) {
super(registry);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ProxySet proxySet = getRegistry().getAllProxies();
Iterator<RemoteProxy> iterator = proxySet.iterator();
Map<String, List<String>> returnValue = new HashMap<>();
while (iterator.hasNext()) {
RemoteProxy each = iterator.next();
each.getTestSlots().forEach(slot -> {
String browser = (String) slot.getCapabilities().get(CapabilityType.BROWSER_NAME);
String machineIp = each.getRemoteHost().getHost();
List<String> machines = returnValue.get(browser);
if (machines == null) {
machines = new ArrayList<>();
}
machines.add(machineIp);
returnValue.put(browser, machines);
});
}
//Write logic to have the Map returned back as perhaps a JSON payload
}
}
您可以参考 Selenium 文档here了解如何将 servlet 注入 Hub 或节点。