![](/img/trans.png)
[英]How to get browser console error messages using Selenium WebDriver + Java?
[英]How to get PID of a browser instance using Selenium WebDriver + Java?
要使用Selenium和java检索由WebDriver启动和控制的Firefox 浏览器的 PID,您可以使用getCapabilities()
方法,您可以使用以下解决方案:
代码块:
import java.io.IOException; import org.openqa.selenium.Capabilities; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.remote.RemoteWebDriver; public class PID_Firefox_Java { public static void main(String[] args) throws IOException { System.setProperty("webdriver.gecko.driver", "C:\\\\Utility\\\\BrowserDrivers\\\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); Capabilities cap = ((RemoteWebDriver) driver).getCapabilities(); System.out.println("moz:processID value is : "+cap.getCapability("moz:processID")); } }
控制台输出:
moz:processID value is : 4576
我不确定 Chrome 是否可以像 @DebanjanB 为 Firefox 发布的那样直接使用。 您现在可以使用下面的代码来实现
public static void main(String[] args) throws IOException {
System.out.println(new Example().getProcessId("firefox"));
}
public String getProcessId(String browserName) throws IOException {
int port = 0;
WebDriver driver;
if (browserName.equalsIgnoreCase("firefox")) {
WebDriverManager.firefoxdriver().setup();
GeckoDriverService service = GeckoDriverService.createDefaultService();
driver = new FirefoxDriver(service);
port = service.getUrl().getPort();
} else if (browserName.equalsIgnoreCase("chrome")) {
WebDriverManager.chromedriver().setup();
ChromeDriverService service = ChromeDriverService.createDefaultService();
driver = new ChromeDriver(service);
port = service.getUrl().getPort();
}
BufferedReader reader = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("lsof -i :" + port).getInputStream()));
StringBuilder builder = new StringBuilder();
String line = null;
Set<String> set = new HashSet<String>();
while ((line = reader.readLine()) != null) {
if (line.contains(String.valueOf(port)) && line.contains("LISTEN")) {
set.add(line.split(" ")[1]);
}
}
return set.iterator().next();
}
更新:
对于 Windows,命令是不同的。 所以需要在上面的代码中做一些调整。
BufferedReader reader = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("netstat -aon | find \""+ port+"\"").getInputStream()));
StringBuilder builder = new StringBuilder();
String line = null;
Set<String> set = new HashSet<String>();
while ((line = reader.readLine()) != null) {
if (line.contains(String.valueOf(port)) && line.contains("LISTEN")) {
String s[]=line.split(" ");
set.add(s[s.length-1]);
}
}
return set.iterator().next();
注意:我传递给获取 PID 的命令是在 Mac 上使用的。 如果它不起作用,请根据操作系统进行更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.