我正在尝试运行以下代码。但每次我运行时都会打开一个新的 chrome 窗口。如何解决这个问题。此外,打开的新 chrome 实例未登录,因此我无法使用已安装的扩展程序。有办法解决这个问题吗?
任何帮助将不胜感激。
我已经提供了相同的屏幕截图:
代码试验:
package com.webdriver;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class WebElements {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.com");
}
}
最佳答案
每次创建新的 ChromeDriver 实例时执行代码,都会生成新的 Chrome 浏览器 session 。此功能按照设计。
更好的方法是在 tearDown(){}
方法中调用 driver.quit()
来关闭并销毁 <每次运行测试执行后,em>WebDriver 和 Web 浏览器 实例都会正常运行。详细可以找discussion here .
虽然这可以解决多个 Chrome 浏览器窗口的问题,但您仍然无法在新 session 中登录。要登录,您需要使用特定的Chrome配置文件并存储cookie并在以后重复使用。您将在 this discussion 中找到有关如何创建和打开新的 Chrome 配置文件的详细讨论。 .
要使用您已安装的扩展,您需要打包/解压它们并使用 ChromeOptions
类。
Chrome Extensions
Chrome 扩展程序可以打包或解包。打包扩展是带有 .crx 扩展名的单个文件。解压后的扩展是包含扩展的目录,其中包括 manifest.json
文件。
要打包未打包的扩展程序,请使用 chrome://extensions
中的“打包”按钮或使用 Chrome(Windows 示例):
chrome.exe --pack-extension=C:\path\to\unpacked\extension --pack-extension-key=C:\myext.pem
请参阅extensions docs了解其他对自动化更加友好的方法。要解压打包的扩展程序,只需解压缩文件(您可能需要将文件从 .crx
重命名为 .zip
以便 zip 实用程序识别它)。
通过 ChromeDriver 使用扩展
打包(.crx 文件):
ChromeOptions options = new ChromeOptions(); options.addExtensions(new File("/path/to/extension.crx")); WebDriver driver = new ChromeDriver(options);
解压(目录):
ChromeOptions options = new ChromeOptions(); options.addArguments("load-extension=/path/to/extension"); WebDriver driver = new ChromeDriver(options);
关于java - 为什么 Selenium Webdriver 每次运行脚本都会打开新窗口以及如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54734087/