java - 为什么 Selenium Webdriver 每次运行脚本都会打开新窗口以及如何修复它?

标签 java selenium google-chrome google-chrome-extension selenium-chromedriver

我正在尝试运行以下代码。但每次我运行时都会打开一个新的 chrome 窗口。如何解决这个问题。此外,打开的新 chrome 实例未登录,因此我无法使用已安装的扩展程序。有办法解决这个问题吗?

任何帮助将不胜感激。

我已经提供了相同的屏幕截图:

new chrome instances

代码试验:

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");

    }

}

base instance 。 。 new instance not logged in

最佳答案

每次创建新的 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/

相关文章:

java.lang.NumberFormatException : For input string: "8999999999999995"

java - 运行数据流 WordCount 示例时的 badRequest API 响应

java - 在 for 循环中使用 row.getlastcellnum() 方法在 Selenium 中写入 excel 工作表会导致 java.lang.IllegalArgumentException

css - 如何使用 selenium 为以下 Expedia 网站示例唯一标识元素

c# - 在 C# 中使用 chrome 作为浏览器?

javascript - 在 Chrome 中拖动时锁定鼠标光标

java - 为什么此代码仅使用冗余 map() 进行编译?

Java创建和读取不同的RGB像素值

java - 如何在 Java 中使用 Selenium webdriver 下载 .docx 文件?

google-chrome - Chrome 开发工具 "Find"范围 : Search through Resources (scripts, 样式表等)