【问题标题】:ChromeOptions causes reference error using Selenium ChromeDriver for node.jsChromeOptions 使用 Selenium ChromeDriver for node.js 导致参考错误
【发布时间】:2025-12-01 14:00:01
【问题描述】:

我正在尝试使用 Selenium 的 ChromeDriver 驱动程序来使用 Chrome 运行一些测试,但是当我使用 ChromeOptions 时出现参考错误。

我的代码

我想强制使用某些选项,例如针对特定用户配置文件进行测试。基于 Selenium 和 ChromeDriver 文档,这是我的文件test.js

opt = new chromeOptions(); // ERROR OCCURS HERE!
opt.setBinary("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
opt.addArguments("--user-data-dir=C:\\Users\\MyUserAccount\\AppData\\Local\\Google\\Chrome\\User Data");
driver = new ChromeDriver(opt);

// rest of my script goes here

错误

我正在使用命令node test.js 执行此操作。这会在第一行引发以下错误:

\path\to\test.js:1

ction (exports, require, module, __filename, __dirname) { opt = new chromeOpti
                                                                    ^
ReferenceError: chromeOptions is not defined
    at Object.<anonymous> (\path\to\test.js:1:73)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:902:3

对于它的价值,如果我跳过设置选项并用这个替换脚本的前四行,它可以工作,但我无法设置我需要设置的选项:

var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().
    withCapabilities(webdriver.Capabilities.chrome()).
    build();

我确定我错过了一些非常基本的东西,但我无法弄清楚这一点。如何使用 Selenium 和 node.js 为 Chrome 设置选项?

经过编辑,从我找到的一些文档中的示例中删除了一些明显无效的语法。

【问题讨论】:

    标签: node.js google-chrome selenium selenium-chromedriver


    【解决方案1】:

    以下对我有用:

    var webdriver = require("selenium-webdriver");
    var chrome = require("selenium-webdriver/chrome");
    
    // Make sure the PATH is set to find ChromeDriver. I'm on a Unix
    // system. You'll need to adapt to whatever is needed for
    // Windows. Actually, since you say that you can get a browser to show
    // up if you don't try to specify options, your ChromeDriver is
    // probably already on your PATH, so you can probably skip this.
    process.env["PATH"] += ":/home/user/src/selenium/";
    
    var options = new chrome.Options();
    
    // Commented out because they are obviously not what you want.
    // Uncomment and adapt as needed:
    //
    // options.setChromeBinaryPath("/tmp/foo");
    // options.addArguments(["--blah"]);
    
    var driver = new webdriver.Builder().
       withCapabilities(options.toCapabilities()).build();
    
    driver.get("http://www.google.com")
    

    我用各种值测试了上面的代码,发现它可以工作。

    如果你想看看你还能用Options 对象做什么,你可以打开node_modules/selenium_webdriver/chrome.js 并阅读源代码。这就是我想出上述方法的原因。

    【讨论】:

    • 谢谢;这是真的接近。它使用我传递给它的选项(即正确的配置文件)启动 Chrome,但随后 driver.get(...) 和后续命令似乎没有做任何事情。例如,它实际上并没有导航到 google.com。有什么想法吗?
    • 哇。我从未见过这种行为。当我写下这个答案时,我的测试要么完全成功,要么在过程的早期失败真的,并在控制台上显示有用的错误消息。唯一立即想到的就是确保您安装了最新的 ChromeDriver。
    • 我几天前安装了 ChromeDriver,实际上昨天重新安装了。我会再玩这个,因为你的回答似乎很有希望。
    • 好的,这就是我想出的:如果我加载一个不是我自己的用户配置文件,它就可以工作。如果我加载自己的,即使我尝试禁用扩展,它也不起作用;它似乎挂断了。任何想法如何解决这个问题?
    • 对不起。我不知道。我从来没有尝试过使用我自己的个人资料。我使用 Selenium 来测试应用程序,这意味着测试环境必须是原始的。
    【解决方案2】:

    请您尝试以下解决方案

    var webdriver = require("selenium-webdriver");
    var chrome = require("selenium-webdriver/chrome");
    
    /** 
     * Set chrome command line options/switches
    */      
    var chromeOptions = new chrome.Options();
    chromeOptions.addArguments("test-type");
    chromeOptions.addArguments("start-maximized");
    chromeOptions.addArguments("--js-flags=--expose-gc");
    chromeOptions.addArguments("--enable-precise-memory-info");
    chromeOptions.addArguments("--disable-popup-blocking");
    chromeOptions.addArguments("--disable-default-apps");
    chromeOptions.addArguments("--disable-infobars");
    
    driver = new webdriver.Builder()
                 .forBrowser("chrome")
                 .setChromeOptions(chromeOptions)
                 .build();
    
    driver.get("http://www.google.com")
    

    【讨论】:

      【解决方案3】:

      这对我有用(来自this gist

      //import the selenium web driver
      var webdriver = require('selenium-webdriver');
      
      var chromeCapabilities = webdriver.Capabilities.chrome();
      //setting chrome options to start the browser fully maximized
      var chromeOptions = {
          'args': ['--test-type', '--start-maximized']
      };
      chromeCapabilities.set('chromeOptions', chromeOptions);
      var driver = new webdriver.Builder().withCapabilities(chromeCapabilities).build();
      

      【讨论】:

        【解决方案4】:

        这似乎是一个基本的 OOP JavaScript 误解!

        你的问题是:

        ChromeOptions opts = new chromeOptions();
        

        您不会以这种方式实例化对象。试试:

        var opt = new ChromeOptions();
        

        这是证据: http://jsfiddle.net/q5Etk/

        如果你运行它,我们会得到“Unexpected Identifier”。 取消注释var 位并注释Cat cat 位并查看它的工作原理。

        编辑编辑后:

        您正在指定chromeOptions()。这是ChromeOptions() 封顶C

        【讨论】:

        • 对不起;我知道语法没有意义。尽管如此,我还是在一些示例中发现了声称显示 JavaScript 示例代码(其中一些显然是真正的 Java)。我实际上修改了代码以使用您建议的版本 (var opts = new ChromeOptions();) 并忘记解决我的问题。我现在修改了问题以反映真正的错误。
        • 关于您的编辑:使用 ChromeOptions() 会引发完全相同的错误。
        • 这是什么错误? 'ChromeOptions' is not defined?
        • 是的,完全正确;唯一的区别是当我更改代码时大小写会发生变化。
        • 老实说,我不相信 ChromeOptions 类存在于 webdriverjs 中......通过源代码搜索一无所获
        【解决方案5】:

        var m_Options = new chrome.Options();   
            m_Options.addArguments("--user-data-dir=C:/Users/israfil/AppData/Local/Google/Chrome/Profile 2");
            m_Options.addArguments("--profile-directory=Default");
            m_Options.addArguments("--disable-extensions"); 
            m_Options.addArguments(['user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.11 Safari/537.36"']);
            m_Options.setBinaryPath("H://project//nodejs//chrome//chrome.exe");
            m_Options.directConnect = false; //setBinaryPath true;
            
            //m_Options.addExtensions();
            //m_Options.setProxy();
            //m_Options.headless();// Options.headless()}.#headless Options.headless()} Gpu Support ok
            
            //m_Options.addArguments(" --blah"); // not use this codes Importent
            
        var driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).setChromeOptions(m_Options).build();
                    

        【讨论】:

        • 在没有任何解释的情况下,不清楚这段代码是否对六年前已接受的答案添加了任何内容。在发布这样的答案之前,请花点时间学习如何使用本网站。